如何监控

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

概览

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

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

* 您必须先按照启用 JMX 中的说明启用 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 进行监控

管理服务器、消息处理器、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 命令重启组件。

    例如,如需重启管理服务器,请执行以下命令:

    /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,这是管理服务器 JMX 端口。如需了解其他端口,请参阅 JMX 和 Management API 监控端口

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

JMX MBean JMX 属性

内存

HeapMemoryUsage

NonHeapMemoryUsage

用法

使用 Management API 进行监控

Edge 包含多个 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 API 端口为 8080。如需查看要使用的 Management API 端口号列表,请参阅 JMX 和 Management API 监控端口

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

以下示例获取本地主机(端口 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 命令检查状态

在登录运行 Edge 服务的服务器后,您可以使用 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,这是一个 Perl 模块,用于实现高分辨率闹钟、休眠、gettimeofday 和间隔计时器。例如,您可以使用以下命令进行安装:
    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}/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 连接。您还需要为 nodetool(以及通过 JMX 与 Cassandra 通信的任何其他工具)配置 SSL。

启用了 SSL 的 JMX 同时支持纯文本 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 服务的命令或 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. 请按以下步骤为 Cassandra 配置 SSL 的 JMX:
    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 运行,如下面的配置选项所述:

    这两个选项在将 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

    上述信任库路径应可供运行 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 上运行 configure:
    /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 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 级别测试

您可以监控 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),以获取有关缓存的信息。