如何监控

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

概览

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

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

* 您必须先按照启用 JMX 中的说明将其启用,然后才能使用 JMX。

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

JMX 和 Management API 监控端口

每个组件都支持对不同端口进行 JMX 和 Management API 监控调用。下表列出了各类服务器的 JMX 和 Management API 端口:

组件 JMX 端口 Management API 端口
管理服务器 1099 8080
路由器 1100 8081
消息处理器 1101 8082
Qpid 1102 8083
Postgres 1103 8084

使用 JMX 监控

Management Server、Message Processor、Qpid 和 Postgres 的监控流程均使用 JMX。但是,默认情况下,只有 Cassandra 会启用 JMX,而对于所有其他 Edge 组件,JMX 默认处于停用状态。因此,您必须为每个组件单独启用 JMX,然后才能对其进行监控。

默认情况下,JMX 身份验证未启用。您可以为所有组件启用 JMX 身份验证。对于 Cassandra,请按照为 Cassandra 启用 JMX 身份验证中的说明操作。

启用 JMX

默认情况下,只有 Cassandra 会启用 JMX,而对于所有其他 Edge 组件,JMX 默认处于停用状态。本部分介绍了如何为其他 Edge 组件启用 JMX。

如需启用 JMX,请执行以下操作

  1. 修改组件的配置文件。此文件位于 opt/apigee/edge-component_name/bin/start。在生产环境中,这些配置文件将位于不同的机器上。

    请从每台服务器上的以下文件位置中进行选择:

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

    例如,管理服务器在其服务器上的配置文件位于 /opt/apigee/edge-management-server/bin/start

  2. 将以下 com.sun.management.jmxremote 选项添加到启动组件的 exec 行中:
    -Dcom.sun.management.jmxremote \
      -Dcom.sun.management.jmxremote.port=port_number \
      -Dcom.sun.management.jmxremote.local.only=false \
      -Dcom.sun.management.jmxremote.authenticate=false \
      -Dcom.sun.management.jmxremote.ssl=false

    其中,port_number 是服务的 JMX 端口。如需获取服务的 JMX 端口号,请参阅 JMX 和 Management API 监控端口

    例如,要在管理服务器上启用 JMX,请将以下代码添加到管理服务器的配置文件中:

    exec $JAVA -classpath "$classpath" -Xms$min_mem -Xmx$max_mem $xx_opts \
      -Djava.security.auth.login.config=$conf_path/jaas.config \
      -Dinstallation.dir=$install_dir $sys_props -Dconf.dir=$conf_path \
      -Ddata.dir=$data_dir \
      -Dcom.sun.management.jmxremote \
      -Dcom.sun.management.jmxremote.port=1099 \
      -Dcom.sun.management.jmxremote.local.only=false \
      -Dcom.sun.management.jmxremote.authenticate=false \
      -Dcom.sun.management.jmxremote.ssl=false \
       $* $debug_options com.apigee.kernel.MicroKernel

    此示例为管理服务器指定了端口 1099。如前所述,每项服务都有自己的端口号。

    配置文件中经过修改的行如下所示:

    exec $JAVA -classpath "$classpath" -Xms$min_mem -Xmx$max_mem $xx_opts -Djava.security.auth.login.config=$conf_path/jaas.config -Dinstallation.dir=$install_dir $sys_props -Dconf.dir=$conf_path -Ddata.dir=$data_dir -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false $* $debug_options com.apigee.kernel.MicroKernel
  3. 保存配置文件。
  4. 使用 restart 命令重启组件。

    例如,要重新启动 Management Server,请执行以下命令:

    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart

默认情况下,JMX 身份验证未启用。您可以为所有组件启用 JMX 身份验证,如启用 JMX 身份验证中所述。如需为 Cassandra 启用 JMX 身份验证,请参阅为 Cassandra 启用 JMX 身份验证

启用 JMX 身份验证

默认情况下,JMX 身份验证未启用。您可以为所有组件启用 JMX 身份验证。对于 Cassandra,请按照为 Cassandra 启用 JMX 身份验证中的说明操作

如需启用 JMX 身份验证,请在所有节点上执行以下 change_jmx_auth 操作:

/opt/apigee/apigee-service/bin/apigee-service component_name change_jmx_auth [options|-f config_file]

其中:

  • component 可为以下项之一:
    • edge-management-server
    • edge-message-processor
    • edge-postgres-server
    • edge-qpid-server
    • edge-router
  • options 指定以下内容:
    • -u username
    • -p password
    • -e [y|n](启用或停用)
  • config_file 指定配置文件的位置,该文件中需要定义以下内容:
    • JMX_USERNAME=username
    • JMX_ENABLED=y|n
    • JMX_PASSWORD=password(如果未设置或未使用 -p 传入,系统会提示您)

您可以使用命令行选项或配置文件来定义用户名、密码和启用/停用状态。您无需同时指定一组选项和配置文件。

以下示例使用命令行选项为管理服务器启用 JMX 身份验证:

/opt/apigee/apigee-service/bin/apigee-service edge-management-server
    change_jmx_auth -u foo -p bar -e y

以下示例使用配置文件而不是命令行选项:

/opt/apigee/apigee-service/bin/apigee-service edge-management-server
    change_jmx_auth -f /tmp/my-config-file

如果您在多个节点上运行 Edge,请在所有节点上运行该命令,指定相同的用户名和密码。

要在命令行上停用 JMX 身份验证,请使用“-e n”选项,如以下示例所示:

/opt/apigee/apigee-service/bin/apigee-service edge-management-server
    change_jmx_auth -e n

使用 JConsole 进行监控

使用 JConsole(一种符合 JMX 标准的工具)来管理和监控健康检查,并处理统计信息。借助 JConsole,您可以使用服务器公开的 JMX 统计信息,并将其显示在图形界面中。如需了解详情,请参阅使用 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,即 Management Server JMX 端口。如需了解其他端口,请参阅 JMX 和 Management API 监控端口

下表显示了一般 JMX 统计信息:

JMX MBean JMX 属性

内存

HeapMemoryUsage

NonHeapMemoryUsage

用法

使用 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 是您要检查的服务器的 Management API 端口。对于每种类型的组件,这是一个不同的端口。例如,Management Server 的 Management API 端口为 8080。如需查看要使用的 Management API 端口号列表,请参阅 JMX 和 Management 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 发出以下命令,以监控 Management Servers 和消息处理器上代理的用户、组织和部署状态:

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 命令检查状态

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

如需使用 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 Server 上加入的组织和环境名称:

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,并且通过 JMX 远程访问 Cassandra 时不需要密码。

为 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}/data/apigee-cassandra/jmxremote.password
      conf_cassandra-env_com.sun.management.jmxremote.access.file=${APIGEE_ROOT}/data/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/data/apigee-cassandra/
      cp ${JAVA_HOME}/lib/management/jmxremote.password.template $APIGEE_ROOT/data/apigee-cassandra/jmxremote.password
    2. 修改 jmxremote.password 文件,使用以下语法添加 JMX 用户名和密码:
      JMX_USERNAME JMX_PASSWORD

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

    3. 确保文件归“apigee”所有,并且文件模式为 400:
      chown apigee:apigee /opt/apigee/data/apigee-cassandra/jmxremote.password
      chmod 400 /opt/apigee/data/apigee-cassandra/jmxremote.password
  4. 复制并修改 jmxremote.access 文件:
    1. 将以下文件从 $JAVA_HOME 目录复制到 /opt/apigee/data/apigee-cassandra/
      cp ${JAVA_HOME}/lib/management/jmxremote.access $APIGEE_ROOT/data/apigee-cassandra/jmxremote.access
    2. 修改 jmxremote.access 文件并添加以下角色:
      JMX_USERNAME readwrite
    3. 确保文件归“apigee”所有,并且文件模式为 400:
      chown apigee:apigee /opt/apigee/data/apigee-cassandra/jmxremote.access
      chmod 400 /opt/apigee/data/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. 在文件中取消注释以下几行代码:
    • JVM_OPTS="$JVM_OPTS -Djava.security.auth.login.config={T}conf_cassandra-env_java.security.auth.login.config{/T}"
    • JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.login.config=ApigeeSecureFileLoginModule"
  3. 在命令行中,输入 echo -n 'Secret' | openssl dgst -sha1,生成所需密码的 SHA1 哈希值
  4. 针对 jmxremote.password 中的用户名设置密码。
  5. 更新后,将文件 cassandra-env.sh 重新更改为只读。

为 Cassandra 启用使用 SSL 的 JMX

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

支持 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 生成密钥时的默认值)。

    • Truststore 应仅包含证书,供客户端(基于 apigee-service 的命令或 Nodetool)用于通过 JMX 连接。

    验证上述要求后:

    1. 将密钥库文件放在 /opt/apigee/data/apigee-cassandra 中。
    2. 通过输入
      chown apigee:apigee /opt/apigee/data/apigee-cassandra/keystore.node1
      chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node1
      ,确保只有 Apigee 用户才能读取密钥库文件
  4. 使用 SSL 为 JMX 配置 Cassandra,具体步骤如下:
    1. 通过输入
      apigee-service apigee-cassandra stop
      停止 Cassandra 节点
    2. 打开 /opt/apigee/customer/application/cassandra.properties 文件并添加以下行,在 Cassandra 中启用 SSL:
      conf_cassandra-env_com.sun.management.jmxremote.ssl=true

      文件应归 apigee:apigee 所有。

    3. 在 Cassandra 中启用 SSL 相关配置,如下所示。 打开文件 /opt/apigee/apigee-cassandra/source/conf/cassandra-env.sh,取消注释以下行,并根据需要更改路径 /opt/apigee/data/apigee-cassandra/keystore.node1 和密钥库密码。
      JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/opt/apigee/data/apigee-cassandra/keystore.node1"
      JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=keystore-password"
      JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true"
      确保文件归 apigee:apigee 所有。
    4. 输入
      apigee-service apigee-cassandra start
      以启动 Cassandra 节点
  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

    确保 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>

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

    apigee-service apigee-cassandra ring

    方法 3(直接将 SSL 参数传递给 apigee-service

    运行任何如下所示的 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> /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra ring
  6. 设置 nodetool。Nodetool 需要向其传递 JMX 参数。您可以通过以下两种方式将 nodetool 配置为使用启用了 SSL 的 JMX 运行,如下面的配置选项中所述:

    这些选项在向 Nodetool 传递 SSL 相关配置的方式上有所不同。在这两种情况下,运行 nodetool 的用户都应具有 READ 权限。根据易用性和安全做法选择合适的选项。

    如需详细了解 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

    上面指定的信任库路径应该可供任何运行 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 -Dssl.enable=true -u <jmx-user-name> -pw <jmx-user-password> -h localhost ring

还原 SSL 配置

如果您需要还原上述步骤中所述的 SSL 配置,请按以下步骤操作:

  1. 输入
    apigee-service apigee-cassandra stop
    停止apigee-cassandra
  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. 停止将 --ssl 开关与 nodetool 搭配使用

为 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

“家庭/审核/审计”列

列家庭/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. 旧服务器的状态(服务客户端 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 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 四字母单词

可以通过使用 netcat (nc) 或 telnet 将一小组命令(由四个字母的单词)发送到端口 2181 来监控 ZooKeeper。

如需详细了解 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 级别测试

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

  1. 使用 ldapsearch (yum install openldap-clients) 查询系统管理员的条目。此条目用于对所有 API 调用进行身份验证。
    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"
    }

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