如何监控

本文档介绍了 Apigee Edge for Private Cloud 本地部署支持的组件的监控技术。

概览

Edge 支持多种方式来获取有关服务的详细信息以及检查其状态。下表列出了您可以对每项符合条件的服务执行的检查类型:

Mgmt API
组件 内存用量 [JMX*] 服务检查 用户/组织/ 部署状态 axstatus 数据库检查 apigee-service 状态 apigee-monit**
管理服务器
消息处理器
路由器
Qpid
Postgres
了解详情 了解详情 了解详情 了解详情 了解详情 了解详情 了解详情

* 您必须先启用 JMX,然后才能使用它,如启用 JMX 中所述。

** apigee-monit 服务会检查组件是否正常运行,如果未正常运行,则会尝试重新启动该组件。如需了解详情,请参阅使用 apigee-monit 进行自我修复

监控端口和配置文件

每个组件都支持在不同端口上进行 Java 管理扩展 (JMX) 和管理 API 监控调用。下表列出了每种服务器的 JMX 和管理 API 端口,以及配置文件位置:

组件 JMX 端口 管理 API 端口 配置文件位置
管理服务器 1099 8080 $APIGEE_ROOT/customer/application/management-server.properties
消息处理器 1101 8082 $APIGEE_ROOT/customer/application/message-processor.properties
路由器 1100 8081 $APIGEE_ROOT/customer/application/router.properties
Qpid 1102 8083 $APIGEE_ROOT/customer/application/qpid-server.properties
Postgres 1103 8084 $APIGEE_ROOT/customer/application/postgres-server.properties

使用 JMX 监控组件

以下部分介绍了如何使用 JMX 监控 Edge 组件。

启用 JMX

如需在不进行身份验证或不使用基于 SSL 的通信的情况下启用 JMX,请执行以下步骤。 注意:在生产系统中,为了安全起见,应同时启用加密身份验证和 SSL。

  1. 修改相应的配置文件(请参阅 配置文件参考)。如果配置文件不存在,请创建该文件。
    conf_system_jmxremote_enable=true
  2. 保存配置文件,并确保该文件归 apigee:apigee 所有。
  3. 重启相应的 Edge 组件
    apigee-service edge-management-server restart

如需停用 JMX,请移除属性 conf_system_jmxremote_enable 或将其值更改为 false。然后,重启相应的 Edge 组件。

JMX 中的身份验证

Edge for Private Cloud 支持使用存储在文件中的详细信息进行基于密码的身份验证。 您可以将密码存储为哈希值,以提高安全性。

  1. 如需在 edge-* 组件中启用 JMX 身份验证,请修改相应的配置文件(请参阅 配置文件参考)。创建配置文件(如果不存在):
    conf_system_jmxremote_enable=true
    conf_system_jmxremote_authenticate=true
    conf_system_jmxremote_encrypted_auth=true
    conf_system_jmxremote_access_file=/opt/apigee/customer/application/management-server/jmxremote.access
    conf_system_jmxremote_password_file=/opt/apigee/customer/application/management-server/jmxremote.password
    保存配置文件,并确保该文件归 apigee:apigee 所有。
  2. 创建密码的 SHA256 哈希值:
    echo -n '' | openssl dgst -sha256
  3. 创建包含 JMX 用户凭据的 jmxremote.password 文件:
    1. 将以下文件从 $JAVA_HOME 目录复制到 /opt/apigee/customer/application/<component>/ 目录:
      cp ${JAVA_HOME}/lib/management/jmxremote.password.template $APIGEE_ROOT/customer/application/management-server/jmxremote.password
    2. 修改该文件,并使用以下语法添加您的 JMX 用户名和密码:
      USERNAME <HASH-PASSWORD>
    3. 确保该文件归 apigee 所有,并且文件模式为 400:
      chown apigee:apigee $APIGEE_ROOT/customer/application/management-server/jmxremote.password
      chmod 400 $APIGEE_ROOT/customer/application/management-server/jmxremote.password
  4. 创建一个包含 JMX 用户权限的 jmxremote.access 文件:
    1. 将以下文件从 $JAVA_HOME 目录复制到 /opt/apigee/customer/application/<component>/ 目录
      
      cp ${JAVA_HOME}/lib/management/jmxremote.access$APIGEE_ROOT/customer/application/management-server/jmxremote.password/jmxremote.access
    2. 修改该文件,并添加您的 JMX 用户名,后跟权限(READONLY/READWRITE)
      USERNAME READONLY
    3. 确保该文件归 apigee 所有,并且文件模式为 400:
      chown apigee:apigee $APIGEE_ROOT/customer/application/management-server/jmxremote.password
      
      chmod 400 $APIGEE_ROOT/customer/application/management-server/jmxremote.access
  5. 重启相应的 Edge 组件:
    apigee-service edge-management-server restart

如需停用 JMX 身份验证,请移除属性 conf_system_jmxremote_authenticate 或将值更改为 false,然后重启相应的 Edge 组件。

JMX 中的 SSL

如需在 edge-* 组件中启用基于 SSL 的 JMX,请执行以下操作:

  1. 修改相应的配置文件(请参阅 配置文件参考)。创建配置文件(如果不存在):
    conf_system_jmxremote_enable=true
    conf_system_jmxremote_ssl=true
    conf_system_javax_net_ssl_keystore=/opt/apigee/customer/application/management-server/jmxremote.keystore
    conf_system_javax_net_ssl_keystorepassword=<keystore-password>
    保存配置文件,并确保该文件归 apigee:apigee 所有。
  2. 准备一个包含服务器密钥的密钥库,并将其放置在上述配置 conf_system_javax_net_ssl_keystore 中提供的路径中。确保 apigee:apigee 可读取密钥库文件。
  3. 重启相应的 Edge 组件:
    apigee-service edge-management-server restart

如需停用基于 SSL 的 JMX,请移除属性 conf_system_jmxremote_ssl 或将值更改为 false。重启相应的 Edge 组件。

通过 Jconsole 进行监控

通过 jconsole 进行监控的说明与 https://docs.apigee.com/private-cloud/v4.52.01/how-monitor#jconsole 中所述的相同。

可以添加一行内容,说明“如果为 JMX 启用了 SSL,则需要使用信任库和信任库密码启动 jconsole。”参考:https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

使用 JConsole 进行监控

使用 JConsole(一种符合 JMX 标准的工具)来管理和监控健康检查和进程统计信息。 借助 JConsole,您可以获取服务器公开的 JMX 统计信息,并在图形界面中显示这些信息。如需了解详情,请参阅使用 JConsole

如果为 JMX 启用了 SSL,您需要使用信任库和信任库密码启动 JConsole。 请参阅 使用 JConsole

JConsole 使用以下服务网址来监控通过 JMX 提供的 JMX 属性 (MBean):

service:jmx:rmi:///jndi/rmi://IP_address:port_number/jmxrmi

其中:

  • IP_address 是您要监控的服务器的 IP 地址。
  • port_number 是您要监控的服务器的 JMX 端口号

例如,如需监控管理服务器,请发出如下命令(假设服务器的 IP 地址为 216.3.128.12):

service:jmx:rmi:///jndi/rmi://216.3.128.12:1099/jmxrmi

请注意,此示例指定了端口 1099,这是管理服务器 JMX 端口。如需了解其他端口,请参阅 JMX 和管理 API 监控端口

下表显示了通用的 JMX 统计信息:

JMX MBean JMX 属性

内存

HeapMemoryUsage

NonHeapMemoryUsage

用法

配置文件参考

以下部分介绍了您可能需要对 Edge 组件配置文件进行的 JMX 相关配置更改。如需了解详情,请参阅监控端口和配置文件

要添加到相应组件的配置文件中的 JMX 配置

  • 在边缘组件上启用 JMX 代理。默认值为 false。
    conf_system_jmxremote_enable=true

基于密码的身份验证的配置

  • 启用基于密码的身份验证。默认值为 false。
    conf_system_jmxremote_authenticate=true
  • 访问文件的路径。应仅由 Apigee 用户拥有和读取。
    conf_system_jmxremote_access_file=/opt/apigee/customer/application/management-server/jmxremote.access
  • 密码文件的路径。应仅由 Apigee 用户拥有和读取。
    conf_system_jmxremote_password_file=/opt/apigee/customer/application/management-server/jmxremote.password
  • 允许以加密格式存储密码。默认值为 false。
    conf_system_jmxremote_encrypted_auth=true

基于 SSL 的 JMX 的配置

  • 为 JMX 通信启用 SSL。默认值为 false。
    conf_system_jmxremote_ssl=true
  • 密钥库的路径。应仅由 Apigee 用户拥有和读取。
    conf_system_javax_net_ssl_keystore=/opt/apigee/customer/application/management-server/jmxremote.keystore
  • 密钥库密码:
    conf_system_javax_net_ssl_keystorepassword=changeme

可选的 JMX 配置

所列值均为默认值,可以更改。

  • JMX 端口。下表列出了默认值。
    conf_system_jmxremote_port=
  • JMX RMI 端口。默认情况下,Java 进程会选择一个随机端口。
    conf_system_jmxremote_rmi_port=
  • 远程桩的主机名。本地主机的默认 IP 地址。
    conf_system_java_rmi_server_hostname=
  • 使用 SSL 保护 JMX 注册表。默认值为 false。仅在启用 SSL 时适用。
    conf_system_jmxremote_registry_ssl=false

使用 Management API 进行监控

Edge 包含多个 API,您可以使用这些 API 对服务器执行服务检查,以及检查用户、组织和部署。本部分将介绍这些 API。

执行服务检查

Management API 提供了多个端点,用于监控和诊断服务问题。这些端点包括:

端点 说明
/servers/self/up

检查服务是否正在运行。此 API 调用不需要进行身份验证。

如果服务正在运行,此端点会返回以下响应:

<ServerField>
  <Up>true</Up>
</ServerField>

如果服务未运行,您会收到类似于以下内容的响应(具体取决于服务和检查方式):

curl: Failed connect to localhost:port_number; Connection refused
/servers/self

返回有关服务的信息,包括:

  • 配置属性
  • 启动时间和运行时间
  • build、RPM 和 UUID 信息
  • 内部和外部主机名和 IP 地址
  • 区域和 pod
  • <isUp> 属性,用于指示服务是否正在运行

此 API 调用需要您使用 Apigee 管理员凭据进行身份验证。

如需使用这些端点,请使用以下语法的命令调用 curl 等实用程序:

curl http://host:port_number/v1/servers/self/up -H "Accept: [application/json|application/xml]"
curl http://host:port_number/v1/servers/self -u username:password -H "Accept: [application/json|application/xml]"

其中:

  • host 是要检查的服务器的 IP 地址。如果您已登录服务器,则可以使用“localhost”;否则,请指定服务器的 IP 地址以及用户名和密码。
  • port_number 是您要检查的服务器的管理 API 端口。每种类型的组件都有不同的端口。例如,管理服务器的管理 API 端口为 8080。如需查看要使用的管理 API 端口号列表,请参阅 JMX 和管理 API 监控端口

如需更改响应的格式,您可以将 Accept 标头指定为“application/json”或“application/xml”。

以下示例获取了 localhost(端口 8081)上路由器的状态:

curl http://localhost:8081/v1/servers/self/up -H "Accept: application/xml"

以下示例获取了有关 216.3.128.12(端口 8082)的消息处理器的信息:

curl http://216.3.128.12:8082/v1/servers/self -u sysAdminEmail:password
  -H "Accept: application/xml"

监控用户、组织和部署状态

您可以使用 Management API 通过发出以下命令来监控管理服务器和消息处理器的代理的用户、组织和部署状态:

curl http://host:port_number/v1/users -u sysAdminEmail:password
curl http://host:port_number/v1/organizations -u sysAdminEmail:password
curl http://host:port_number/v1/organizations/orgname/deployments -u sysAdminEmail:password

其中,port_number 对于管理服务器为 8080,对于消息处理器为 8082。

此调用需要您使用系统管理用户名和密码进行身份验证。

服务器应针对所有调用返回“已部署”状态。如果这些测试失败,请执行以下操作:

  1. 检查服务器日志中是否存在任何错误。日志位于以下位置:
    • 管理服务器:opt/apigee/var/log/edge-management-server
    • 消息处理器:opt/apigee/var/log/edge-message-processor
  2. 针对服务器发出调用,以检查其是否正常运行。
  3. 从 ELB 中移除服务器,然后重新启动服务器:
    /opt/apigee/apigee-service/bin/apigee-service service_name restart

    其中 service_name 为:

    • edge-management-server
    • edge-message-processor

使用 apigee-service 命令检查状态

当您登录到运行服务的服务器时,可以使用 apigee-service 命令排查 Edge 服务的问题。

如需使用 apigee-service 检查服务状态,请执行以下操作

  1. 登录到服务器并运行以下命令:
    /opt/apigee/apigee-service/bin/apigee-service service_name status

    其中 service_name 是以下值之一:

    • 管理服务器:edge-management-server
    • 消息处理器:edge-message-processor
    • Postgres:edge-postgres-server
    • Qpid:edge-qpid-server
    • 路由器:edge-router

    例如:

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor status
  2. 如果服务未运行,请启动服务:
    /opt/apigee/apigee-service/bin/apigee-service service_name start
  3. 重启服务后,请检查该服务是否正常运行,方法是使用之前使用的 apigee-service status 命令,或使用通过 Management API 进行监控中所述的 Management API。

    例如:

    curl -v http://localhost:port_number/v1/servers/self/up

    其中,port_number 是服务的 Management API 端口

    此示例假定您已登录服务器,并且可以使用“localhost”作为主机名。如需使用 Management API 远程检查状态,您必须指定服务器的 IP 地址,并在 API 调用中包含系统管理员用户名和密码。

Postgres 监控

Postgres 支持多种实用程序,您可以使用这些实用程序来检查其状态。以下各部分将介绍这些实用程序。

检查 Postgres 上的组织和环境

您可以发出以下 curl 命令,检查已在 Postgres 服务器上完成初始配置的组织和环境名称:

curl -v http://postgres_IP:8084/v1/servers/self/organizations

系统应显示组织和环境名称。

验证分析状态

您可以发出以下 curl 命令来验证 Postgres 和 Qpid 分析服务器的状态:

curl -u userEmail:password http://host:port_number/v1/organizations/orgname/environments/envname/provisioning/axstatus

系统应显示所有分析服务器的成功状态,如以下示例所示:

{
  "environments" : [ {
    "components" : [ {
      "message" : "success at Thu Feb 28 10:27:38 CET 2013",
      "name" : "pg",
      "status" : "SUCCESS",
      "uuid" : "[c678d16c-7990-4a5a-ae19-a99f925fcb93]"
     }, {
      "message" : "success at Thu Feb 28 10:29:03 CET 2013",
      "name" : "qs",
      "status" : "SUCCESS",
      "uuid" : "[ee9f0db7-a9d3-4d21-96c5-1a15b0bf0adf]"
     } ],
    "message" : "",
    "name" : "prod"
   } ],
  "organization" : "acme",
  "status" : "SUCCESS"
}

PostgreSQL 数据库

本部分介绍可专门用于监控 Postgres 数据库的技术。

使用 check_postgres.pl 脚本

如需监控 PostgreSQL 数据库,您可以使用标准监控脚本 check_postgres.pl。如需了解详情,请参阅 http://bucardo.org/wiki/Check_postgres

运行脚本之前

  1. 您必须在每个 Postgres 节点上安装 check_postgres.pl 脚本。
  2. 确保您已安装 perl-Time-HiRes.x86_64,这是一个实现高分辨率闹钟、睡眠、gettimeofday 和间隔计时器的 Perl 模块。例如,您可以使用以下命令进行安装:
    yum install perl-Time-HiRes.x86_64
  3. CentOS 7:在 CentOS v7 上使用 check_postgres.pl 之前,请安装 perl-Data-Dumper.x86_64 RPM。

check_postgres.pl 输出

使用 check_postgres.pl 的 API 调用的默认输出与 Nagios 兼容。安装脚本后,请执行以下检查:

  1. 检查数据库大小:
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -include=apigee -action database_size --warning='800 GB' --critical='900 GB'
  2. 检查数据库的入站连接数,并与允许的最大连接数进行比较:
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action backends
  3. 检查数据库是否正在运行且可用:
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action connection
  4. 检查磁盘空间:
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action disk_space --warning='80%' --critical='90%'
  5. 检查 Postgres 节点中已完成初始化的组织和环境的数量:
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action=custom_query --query="select count(*) as result from pg_tables where schemaname='analytics' and tablename like '%fact'" --warning='80' --critical='90' --valtype=integer

运行数据库检查

您可以验证是否已在 PostgreSQL 数据库中创建正确的表。使用以下命令登录 PostgreSQL 数据库:

psql -h /opt/apigee/var/run/apigee-postgresql/ -U apigee -d apigee

然后运行以下命令:

\d analytics."org.env.fact"

检查 postgres 进程的健康状况

您可以通过调用以下 curl 命令在 Postgres 机器上执行 API 检查:

curl -v http://postgres_IP:8084/v1/servers/self/health

当 postgres 进程处于活跃状态时,此命令会返回 ACTIVE 状态。如果 Postgres 进程未启动并运行,则返回 INACTIVE 状态。

Postgres 资源

如需详细了解如何监控 Postgres 服务,请参阅以下内容:

Apache Cassandra

默认情况下,Cassandra 会启用 JMX,并且对 Cassandra 的远程 JMX 访问不需要密码。

为 Cassandra 启用 JMX 身份验证

您可以为 Cassandra 启用 JMX 身份验证。执行此操作后,您需要向对 nodetool 实用程序的每次调用传递用户名和密码。

如需为 Cassandra 启用 JMX 身份验证,请执行以下操作

  1. 创建和修改 cassandra.properties 文件:
    1. 修改 /opt/apigee/customer/application/cassandra.properties 文件。如果该文件不存在,请创建该文件。
    2. 将以下内容添加到该文件中:
      conf_cassandra_env_com.sun.management.jmxremote.authenticate=true
      conf_cassandra_env_com.sun.management.jmxremote.password.file=${APIGEE_ROOT}/customer/application/apigee-cassandra/jmxremote.password
      conf_cassandra_env_com.sun.management.jmxremote.access.file=${APIGEE_ROOT}/customer/application/apigee-cassandra/jmxremote.access
    3. 保存 cassandra.properties 文件。
    4. 将文件的所有者更改为 apigee:apigee,如下例所示:
      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties

    如需详细了解如何使用属性文件设置令牌,请参阅如何配置 Edge

  2. 创建和修改 jmx_auth.sh
    1. 如果以下位置不存在相应文件,请创建一个:
      /opt/apigee/customer/application/jmx_auth.sh
    2. 向文件添加以下属性:
      export CASS_JMX_USERNAME=JMX_USERNAME
      export CASS_JMX_PASSWORD=JMX_PASSWORD
    3. 保存 jmx_auth.sh 文件。
    4. 获取文件:
      source /opt/apigee/customer/application/jmx_auth.sh
  3. 复制并修改 jmxremote.password 文件:
    1. 将以下文件从 $JAVA_HOME 目录复制到 /opt/apigee/customer/application/apigee-cassandra/
      cp ${JAVA_HOME}/lib/management/jmxremote.password.template $APIGEE_ROOT/customer/application/apigee-cassandra/jmxremote.password
    2. 修改 jmxremote.password 文件,并使用以下语法添加您的 JMX 用户名和密码:
      JMX_USERNAME JMX_PASSWORD

      其中 JMX_USERNAMEJMX_PASSWORD 是您之前设置的 JMX 用户名和密码。

    3. 确保该文件归“apigee”所有,并且文件模式为 400:
      chown apigee:apigee /opt/apigee/customer/application/apigee-cassandra/jmxremote.password
      chmod 400 /opt/apigee/customer/application/apigee-cassandra/jmxremote.password
  4. 复制并修改 jmxremote.access 文件:
    1. 将以下文件从 $JAVA_HOME 目录复制到 /opt/apigee/customer/application/apigee-cassandra/
      cp ${JAVA_HOME}/lib/management/jmxremote.access
      $APIGEE_ROOT/customer/application/apigee-cassandra/jmxremote.access
    2. 修改 jmxremote.access 文件并添加以下角色:
      JMX_USERNAME readwrite
    3. 确保该文件归“apigee”所有,并且文件模式为 400:
      chown apigee:apigee /opt/apigee/customer/application/apigee-cassandra/jmxremote.access
      chmod 400 /opt/apigee/customer/application/apigee-cassandra/jmxremote.access
  5. 在 Cassandra 上运行 configure
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
  6. 重启 Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  7. 在所有其他 Cassandra 节点上重复此过程。

启用 JMX 密码加密

如需启用 JMX 密码加密,请执行以下步骤:

  1. 打开 source/conf/casssandra-env.sh 文件。
  2. 创建和修改 cassandra.properties 文件:
    1. 修改 /opt/apigee/customer/application/cassandra.properties 文件。如果该文件不存在,请创建该文件。
    2. 将以下内容添加到该文件中:
      conf_cassandra_env_com.sun.management.jmxremote.encrypted.authenticate=true
    3. 保存 cassandra.properties 文件。
    4. 将文件的所有者更改为 apigee:apigee,如以下示例所示:
      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
  3. 在命令行中,输入 echo -n 'Secret' | openssl dgst -sha1,生成所需密码的 SHA1 哈希值
  4. 针对 $APIGEE_ROOT/customer/application/apigee-cassandra/jmxremote.password 中的用户名(在上一部分中创建)设置密码。
  5. 在 Cassandra 上运行配置:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
  6. 重启 Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  7. 在所有其他 Cassandra 节点上重复此过程。

为 Cassandra 启用带 SSL 的 JMX

启用 SSL 的 JMX 可为基于 JMX 的与 Cassandra 的通信提供额外的安全性和加密。如需启用使用 SSL 的 JMX,您需要向 Cassandra 提供密钥和证书,以接受基于 SSL 的 JMX 连接。您还需要为 nodetool(以及通过 JMX 与 Cassandra 通信的任何其他工具)配置 SSL。

启用 SSL 的 JMX 同时支持纯文本和加密的 JMX 密码。

如需为 Cassandra 启用使用 SSL 的 JMX,请按以下步骤操作:

  1. 启用 JMX。 根据需要启用密码加密。
  2. 为 Cassandra 启用 JMX 身份验证。 如上所述。确保 nodetool 可使用配置的用户名和密码。
    /opt/apigee/apigee-cassandra/bin/nodetool -u <JMX_USER> -pw <JMX_PASS> ring
  3. 准备密钥库和信任库。

    • 密钥库应包含密钥和证书,用于配置 Cassandra 服务器。如果密钥库包含多个密钥对,Cassandra 会使用第一个密钥对来启用 SSL。

      请注意,密钥库和密钥的密码应相同(使用 keytool 生成密钥时的默认密码)。

    • 信任库应仅包含证书,并且由客户端(基于 apigee-service 的命令或 nodetool)用于通过 JMX 进行连接。

    验证上述要求后:

    1. 将密钥库文件放在 /opt/apigee/customer/application/apigee-cassandra/ 中。
    2. 通过输入以下命令,确保只有 Apigee 用户可以读取密钥库文件:
      chown apigee:apigee /opt/apigee/customer/application/apigee-cassandra/keystore.node1
      chmod 400 /opt/apigee/customer/application/apigee-cassandra/keystore.node1
  4. 通过执行以下步骤,为 Cassandra 配置 JMX(使用 SSL):
    1. 输入以下命令,停止 Cassandra 节点:
      apigee-service apigee-cassandra stop
    2. 通过打开文件 /opt/apigee/customer/application/cassandra.properties 并添加以下行,在 Cassandra 中启用 SSL:
      conf_cassandra_env_com.sun.management.jmxremote.ssl=true
      conf_cassandra_env_javax.net.ssl.keyStore=/opt/apigee/customer/application/apigee-cassandra/keystore.node1
      conf_cassandra_env_javax.net.ssl.keyStorePassword=keystore-password
      ## On FIPS enabled systems, when you are using non standard keystore, set the following:
      ## These can be skipped otherwise
      ## Possible values are JKS, PKCS12, BCFKS
      conf_cassandra_env_javax.net.ssl.keyStoreType=PKCS12
      conf_cassandra_env_javax.net.ssl.keyStoreAlias=cassjmx-tls-alias
    3. 将文件的所有者更改为 apigee:apigee,如以下示例所示:
      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    4. 在 Cassandra 上运行配置:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
    5. 重启 Cassandra:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
    6. 在所有其他 Cassandra 节点上重复此过程。
    7. 输入以下命令,启动 Cassandra 节点:
      apigee-service apigee-cassandra start
  5. 配置 apigee-service Cassandra 命令。 运行 apigee-service 命令时,您需要设置某些环境变量,包括以下变量:
    apigee-service apigee-cassandra stop
    apigee-service apigee-cassandra wait_for_ready
    apigee-service apigee-cassandra ring
    apigee-service apigee-cassandra backup

    您可以通过多种方式为 JMX 身份验证和 SSL 配置 apigee-service。根据易用性和您的安全实践选择一个选项。

    选项 1(SSL 实参存储在文件中)

    设置以下环境变量:

    export CASS_JMX_USERNAME=ADMIN
    # Provide encrypted password here if you have setup JMX password encryption
    export CASS_JMX_PASSWORD=PASSWORD
    export CASS_JMX_SSL=Y

    在 Apigee 用户的主目录 (/opt/apigee) 中创建一个文件。

    $HOME/.cassandra/nodetool-ssl.properties

    修改该文件并添加以下行:

    -Djavax.net.ssl.trustStore=<path-to-truststore.node1>
    -Djavax.net.ssl.trustStorePassword=<truststore-password>
    -Dcom.sun.management.jmxremote.registry.ssl=true
    ## If you are using a non standard truststore, set below, otherwise skip
    ## Possible values are JKS, PKCS12, BCFKS
    -Djavax.net.ssl.trustStoreType=PKCS12

    确保 Apigee 用户可以读取信任库文件。

    运行以下 apigee-service 命令。 如果该命令运行无误,则说明您的配置正确。

    apigee-service apigee-cassandra ring

    方法 2(SSL 实参存储在环境变量中)

    设置以下环境变量:

    export CASS_JMX_USERNAME=ADMIN
    # Provide encrypted password here if you have setup JMX password encryption
    export CASS_JMX_PASSWORD=PASSWORD
    export CASS_JMX_SSL=Y
    # Ensure the truststore file is accessible by Apigee user.
    export CASS_JMX_TRUSTSTORE=<path-to-trustore.node1>
    export CASS_JMX_TRUSTSTORE_PASSWORD=<truststore-password>
    # If you are using a non standard truststore type, export truststore type as well
    # Possible values are JKS, PKCS12, BCFKS
    export CASS_JMX_TRUSTSTORE_TYPE=PKCS12

    运行以下 apigee-service 命令。如果该命令运行无误,则说明您的配置正确无误。

    apigee-service apigee-cassandra ring

    选项 3(直接传递给 apigee-service 的 SSL 实参)

    运行任何 apigee-service 命令,例如以下命令。 您无需配置任何环境变量。

    CASS_JMX_USERNAME=ADMIN CASS_JMX_PASSWORD=PASSWORD CASS_JMX_SSL=Y CASS_JMX_TRUSTSTORE=<path-to-trustore.node1> CASS_JMX_TRUSTSTORE_PASSWORD=<trustore-password> CASS_JMX_TRUSTSTORE_TYPE=PKCS12 /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra ring
  6. 设置 nodetool。Nodetool 需要将 JMX 参数传递给它。您可以通过以下两种方式配置 nodetool 以使用启用 SSL 的 JMX 运行,如下面的配置选项中所述:

    这两种选项的区别在于将 SSL 相关配置传递给 nodetool 的方式。在这两种情况下,运行 nodetool 的用户都应具有对信任库文件的读取权限。 根据易用性和您的安全实践选择合适的选项。

    如需详细了解 nodetool 参数,请参阅 DataStax 文档

    配置选项 1

    在运行 nodetool 的用户的主目录中创建一个文件。

    $HOME/.cassandra/nodetool-ssl.properties

    将以下代码行添加到文件中:

    -Djavax.net.ssl.trustStore=<path-to-truststore.node1>
    -Djavax.net.ssl.trustStorePassword=<truststore-password>
    -Dcom.sun.management.jmxremote.registry.ssl=true
    ## If you are using a non standard truststore, set below, otherwise skip
    ## Possible values are JKS, PKCS12, BCFKS
    -Djavax.net.ssl.trustStoreType=PKCS12

    运行 nodetool 的任何用户都应能够访问上述信任库路径。

    运行带有 --ssl 选项的 nodetool

    /opt/apigee/apigee-cassandra/bin/nodetool --ssl -u <jmx-user-name> -pw <jmx-user-password> -h localhost ring

    配置选项 2

    运行 nodetool 作为单个命令,并使用下列额外参数。

    /opt/apigee/apigee-cassandra/bin/nodetool -Djavax.net.ssl.trustStore=<path-to-truststore.node1> -Djavax.net.ssl.trustStorePassword=<truststore-password> -Dcom.sun.management.jmxremote.registry.ssl=true -Djavax.net.ssl.trustStoreType=PKCS12 -Dssl.enable=true -u <jmx-user-name> -pw <jmx-user-password> -h localhost ring

恢复 SSL 配置

如果您需要恢复上述流程中所述的 SSL 配置,请执行以下步骤:

  1. 通过输入以下内容停止 apigee-cassandra
    apigee-service apigee-cassandra stop
  2. 从文件 /opt/apigee/customer/application/cassandra.properties 中移除第 conf_cassandra-env_com.sun.management.jmxremote.ssl=true 行。
  3. /opt/apigee/apigee-cassandra/source/conf/cassandra-env.sh 中注释掉以下几行
    # JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/opt/apigee/data/apigee-cassandra/keystore.node0"
    # JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=keypass"
    # JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true”
  4. 首先,输入以下内容来启动 apigee-cassandra
  5. apigee-service apigee-cassandra start
  6. 移除环境变量 CASS_JMX_SSL(如果已设置)。

    unset CASS_JMX_SSL
  7. 检查基于 apigee-service 的命令(例如 ringstopbackup 等)是否正常运行。
  8. 停止使用带有 nodetool 的 --ssl 开关

为 Cassandra 停用 JMX 身份验证

如需为 Cassandra 停用 JMX 身份验证,请执行以下操作

  1. 修改 /opt/apigee/customer/application/cassandra.properties
  2. 移除文件中的以下行:
    conf_cassandra-env_com.sun.management.jmxremote.authenticate=true
  3. 在 Cassandra 上运行配置:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
  4. 重启 Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  5. 在所有其他 Cassandra 节点上重复此过程。

使用 JConsole:监控任务统计信息

使用 JConsole 和以下服务网址来监控通过 JMX 提供的 JMX 属性 (MBean):

service:jmx:rmi:///jndi/rmi://IP_address:7199/jmxrmi

其中,IP_address 是 Cassandra 服务器的 IP。

Cassandra JMX 统计信息

JMX MBean JMX 属性

ColumnFamilies/apprepo/environments

ColumnFamilies/apprepo/organizations

ColumnFamilies/apprepo/apiproxy_revisions

ColumnFamilies/apprepo/apiproxies

ColumnFamilies/audit/audits

ColumnFamilies/audit/audits_ref

PendingTasks

MemtableColumnsCount

MemtableDataSize

ReadCount

RecentReadLatencyMicros

TotalReadLatencyMicros

WriteCount

RecentWriteLatencyMicros

TotalWriteLatencyMicros

TotalDiskSpaceUsed

LiveDiskSpaceUsed

LiveSSTableCount

BloomFilterFalsePositives

RecentBloomFilterFalseRatio

BloomFilterFalseRatio

使用 nodetool 管理集群节点

nodetool 实用程序是 Cassandra 的命令行界面,用于管理集群节点。您可以在 /opt/apigee/apigee-cassandra/bin 找到该实用程序。

可以在所有 Cassandra 集群节点上进行以下调用:

  1. 常规环信息(也适用于单个 Cassandra 节点):查找所有节点的“启动”和“正常”状态。
    nodetool [-u username -pw password] -h localhost ring

    只有在为 Cassandra 启用 JMX 身份验证时,您才需要传递用户名和密码。

    上述命令的输出如下所示:

    Datacenter: dc-1
    ==========
    Address            Rack     Status State   Load    Owns    Token
    192.168.124.201    ra1      Up     Normal  1.67 MB 33,33%  0
    192.168.124.202    ra1      Up     Normal  1.68 MB 33,33%  5671...5242
    192.168.124.203    ra1      Up     Normal  1.67 MB 33,33%  1134...0484
  2. 有关节点的一般信息(每次调用每个节点)
    nodetool [-u username -pw password]  -h localhost info

    上述命令的输出如下所示:

    ID                     : e2e42793-4242-4e82-bcf0-oicu812
    Gossip active          : true
    Thrift active          : true
    Native Transport active: true
    Load                   : 273.71 KB
    Generation No          : 1234567890
    Uptime (seconds)       : 687194
    Heap Memory (MB)       : 314.62 / 3680.00
    Off Heap Memory (MB)   : 0.14
    Data Center            : dc-1
    Rack                   : ra-1
    Exceptions             : 0
    Key Cache              : entries 150, size 13.52 KB, capacity 100 MB, 1520781 hits, 1520923 requests, 1.000 recent hit rate, 14400 save period in seconds
    Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
    Counter Cache          : entries 0, size 0 bytes, capacity 50 MB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
    Token                  : 0
  3. Thrift 服务器的状态(提供客户端 API)
    nodetool [-u username -pw password] -h localhost statusthrift

    上述命令的输出如下所示:

    running
  4. 数据流式传输操作的状态:观察 Cassandra 节点的流量:
    nodetool [-u username -pw password] -h localhost netstats

    上述命令的输出如下所示:

    Mode: NORMAL
    Not sending any streams.
    Read Repair Statistics:
    Attempted: 151612
    Mismatch (Blocking): 0
    Mismatch (Background): 0
    Pool Name                    Active   Pending      Completed   Dropped
    Commands                        n/a         0              0         0
    Responses                       n/a         0              0       n/a

如需详细了解 nodetool,请参阅关于 nodetool 实用程序

Cassandra 资源

请参阅以下网址:http://www.datastax.com/docs/1.0/operations/monitoring

监控 Apache Qpid Broker-J

您可以通过 Qpid 管理控制台监控 Qpid Broker-J。本部分介绍了如何访问控制台并使用它来执行基本的监控功能。如需详细了解如何使用管理控制台,请参阅 Apache Qpid 文档中的 Web 管理控制台

访问管理控制台

默认管理控制台端口为 8090。如需通过此默认端口访问控制台,请在网络浏览器中输入以下网址:

http://QPID_NODE_IP:8090

如需登录控制台,请使用 Apigee 设置的默认凭据或 Edge 配置文件中设置的凭据。如需了解详情,请参阅 Edge 配置文件参考文档

监控队列和消息

在左侧导航面板中,依次前往 Java-Broker > virtualhosts > queues。选择一个队列,即可在界面主要部分查看其详细信息。在详细信息视图中,您可以查看队列属性和统计信息,包括有关已递送、已入队的消息、消息速率等信息。

查看和下载日志文件

在左侧导航面板中,依次前往 Java-Broker > brokerloggers > logfile。在主界面详细信息视图中,您可以查看日志文件详细信息并下载日志文件。

使用 Qpid 管理 API

您可以使用 Apache Qpid Broker-J REST API 自动执行管理任务并监控代理。 如需了解详情,请参阅 Apache Qpid Broker REST API 文档

您还可以使用命令行工具监控代理。例如:

curl "QPID_NODE_IP":"8090"/api/latest/broker -u "USERNAME":"PASSWORD"

为 Qpid 启用 SSL 监控

为了进一步提高监控和管理方面的安全性,请在 Qpid 的管理门户和 Qpid 的管理 API 上启用 SSL。请按照以下准则提供密钥和证书。

Qpid 提供了一个文件密钥库选项,该选项在 Apigee 中处于启用状态。此类型接受 Java 和 keytool 等 Java 工具可识别的标准 JKS 密钥库格式。它还可以接受 PKCS12 密钥库,该密钥库可以使用 OpenSSL 等工具生成。

密钥库准备

如需了解如何生成密钥库,请参阅 Java Keytool 文档

如需了解如何生成 PKCS12 密钥库,请参阅 OpenSSL 文档

验证要求后

  1. 将密钥库文件放在 /opt/apigee/customer/application/apigee-qpidd 中。
  2. 确保只有 Apigee 用户可以读取密钥库文件:
    chown apigee:apigee /opt/apigee/customer/application/apigee-qpidd/qpidd.keystore
      chmod 400 /opt/apigee/customer/application/apigee-qpidd/qpidd.keystore

在 Qpid 中启用 SSL

一次在一个 Qpid 节点上执行以下步骤:

打开 /opt/apigee/customer/application/qpidd.properties 文件并添加以下几行代码:

conf_qpidd_qpid_management.https.enabled=true
conf_qpidd_qpid.keystore.storeUrl=/opt/apigee/customer/application/apigee-qpidd/qpidd.keystore
conf_qpidd_qpid.keystore.password=keystore-password
conf_qpidd_qpid.keystore.certificateAlias=certificate-alias
## If you are using a PKCS12 keystore, specify the keystore type
conf_qpidd_qpid.keystore.keyStoreType=PKCS12
  1. 将文件的所有者更改为 apigee:apigee:
    chown apigee:apigee /opt/apigee/customer/application/qpidd.properties
  2. 配置 Qpidd:
    apigee-service apigee-qpidd configure
  3. 重启 Qpidd:
    apigee-service apigee-qpidd restart
  4. 使用 wait_for_ready 检查状态:
    apigee-service apigee-qpidd wait_for_ready

恢复 SSL 配置

从文件 /opt/apigee/customer/application/qpidd.properties 中移除或注释掉相应属性:

conf_qpidd_qpid_management.https.enabled=true
conf_qpidd_qpid.keystore.storeUrl=/opt/apigee/customer/application/apigee-qpidd/keystore
  1. 配置 Qpidd:
    apigee-service apigee-qpidd configure
  2. 重启 Qpidd:
    apigee-service apigee-qpidd restart
  3. 使用 wait_for_ready 检查状态:
    apigee-service apigee-qpidd wait_for_ready

Apache ZooKeeper

检查 ZooKeeper 状态

  1. 确保 ZooKeeper 进程正在运行。ZooKeeper 会将 PID 文件写入 opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
  2. 测试 ZooKeeper 端口,确保您可以在每个 ZooKeeper 服务器上与端口 2181 和 3888 建立 TCP 连接。
  3. 确保您可以从 ZooKeeper 数据库中读取值。使用 ZooKeeper 客户端库(或 /opt/apigee/apigee-zookeeper/bin/zkCli.sh)进行连接,并从数据库中读取值。
  4. 检查状态:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper status

使用 ZooKeeper 四字母字词

您可以通过一组简短的命令(四字母词)来监控 ZooKeeper,这些命令使用 netcat (nc) 或 telnet 发送到端口 2181。

如需详细了解 ZooKeeper 命令,请参阅:Apache ZooKeeper 命令参考

例如:

  • srvr:列出服务器的完整详细信息。
  • stat:列出服务器和已连接客户端的简要详细信息。

可以向 ZooKeeper 端口发出以下命令:

  1. 运行四字母命令 ruok,测试服务器是否处于非错误状态。成功的响应会返回“imok”。
    echo ruok | nc host 2181

    返回:

    imok
  2. 运行四字母命令 stat,列出服务器性能和已连接客户端统计信息:
    echo stat | nc host 2181

    返回:

    Zookeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
    Clients:
    /0:0:0:0:0:0:0:1:33467[0](queued=0,recved=1,sent=0)
    /192.168.124.201:42388[1](queued=0,recved=8433,sent=8433)
    /192.168.124.202:42185[1](queued=0,recved=1339,sent=1347)
    /192.168.124.204:39296[1](queued=0,recved=7688,sent=7692)
    Latency min/avg/max: 0/0/128
    Received: 26144
    Sent: 26160
    Connections: 4
    Outstanding: 0
    Zxid: 0x2000002c2
    Mode: follower
    Node count: 283
  3. 如果 netcat (nc) 不可用,您可以使用 Python 作为替代方案。创建一个名为 zookeeper.py 的文件,其中包含以下内容:
    import time, socket,
    sys c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    c.connect((sys.argv[1], 2181))
    c.send(sys.argv[2])
    time.sleep(0.1)
    print c.recv(512)

    现在运行以下 Python 代码:

    python zookeeper.py 192.168.124.201 ruok
    python zookeeper.py 192.168.124.201 stat

LDAP 级测试

您可以监控 SymasLDAP,查看特定请求是否得到妥善处理。换句话说,检查特定搜索是否返回正确的结果。

  1. 使用 ldapsearch (yum install symasldap-clients) 查询系统管理员的条目。此条目用于对所有 API 调用进行身份验证。
    /opt/symas/bin/ldapsearch -b "uid=admin,ou=users,ou=global,dc=apigee,dc=com" -x -W -D "cn=manager,dc=apigee,dc=com" -H ldap://localhost:10389 -LLL

    然后,系统会提示您输入 LDAP 管理员密码:

    Enter LDAP Password:

    输入密码后,您会看到如下形式的响应:

    dn:
    uid=admin,ou=users,ou=global,dc=apigee,dc=com
    objectClass: organizationalPerson
    objectClass: person
    objectClass: inetOrgPerson
    objectClass: top
    uid: admin
    cn: admin
    sn: admin
    userPassword:: e1NTSEF9bS9xbS9RbVNXSFFtUWVsU1F0c3BGL3BQMkhObFp2eDFKUytmZVE9PQ=
     =
    mail: opdk@google.com
  2. 使用以下命令检查管理服务器是否仍连接到 LDAP:
    curl -u userEMail:password http://localhost:8080/v1/users/ADMIN

    返回:

    {
      "emailId" : ADMIN,
      "firstName" : "admin",
      "lastName" : "admin"
    }

您还可以监控 SymasLDAP 缓存,这有助于减少磁盘访问次数,从而提高系统性能。监控并调整 SymasLDAP 服务器中的缓存大小会对目录服务器的性能产生很大影响。您可以查看日志文件 (opt/apigee/var/log) 以获取有关缓存的信息。