如何监控

适用于私有云的 Edge v4.18.05

本文档介绍了 Apigee Edge 在本地部署时支持的组件的监控方法。

概览

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

服务 JMX:*
内存用量
管理 API:
服务检查
管理 API:
用户/组织/ 部署状态
管理 API:
axstatus
数据库检查 apigee-service 状态
管理服务器
消息处理器
Postgres
Qpid
路由器
了解详情 了解详情 了解详情 了解详情 了解详情 了解详情
* 您必须先按照启用 JMX 中的说明启用 JMX,然后才能使用 JMX。

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 身份验证默认处于停用状态。您可以为 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 的身份验证处于停用状态。您可以为 Cassandra 以外的所有组件启用 JMX 身份验证,如启用 JMX 身份验证中所述。

启用 JMX 身份验证

JMX 身份验证默认处于停用状态。您可以为 Cassandra 以外的所有组件启用 JMX 身份验证。

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

/opt/apigee/apigee-service/bin/apigee-service component 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 对服务器执行服务检查,以及检查用户、组织和部署。本部分介绍了这些 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 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,这是一个 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

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

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

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

其中 IP_address 是 Cassandra 服务器的 IP 地址。

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

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 -h localhost ring

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

    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 -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 -h localhost statusthrift

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

    running

  4. 数据流式传输操作的状态:监控 Cassandra 节点的流量:
    nodetool -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 监控(界面)

请参阅 Datastax OpsCenter 网址:http://www.datastax.com/products/opscenter

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