如何监控

Edge for Private Cloud v4.18.05

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

概览

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

服务 JMX:*
内存用量
管理 API:
服务检查
管理 API:
用户/组织/ 部署状态
管理 API:
axstatus
数据库检查 apigee-service 状态
管理服务器
消息处理器
Postgres
Qpid
路由器
了解详情 了解详情 了解详情 了解详情 了解详情 了解详情
* 您必须先启用 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。但是,默认情况下,JMX 仅对 Cassandra 启用,对所有其他 Edge 组件默认停用。因此,您必须先为每个组件单独启用 JMX,然后才能监控它们。

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

启用 JMX

默认情况下,JMX 仅对 Cassandra 启用,对所有其他 Edge 组件默认停用。本部分介绍如何为其他 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 监控端口。

    例如,如需在 Management Server 上启用 JMX,请将以下内容添加到 Management Server 的配置文件中:

    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 的身份验证处于停用状态。您可以为除 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 传入,系统会提示您)

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

以下示例使用命令行选项为 Management Server 启用 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 端口号。

例如,如需监控 Management Server,请发出如下命令(假设服务器的 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)上的 Router 的状态:

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

使用 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 节点):查找所有节点的“Up”和“Normal”。
    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) 以获取有关缓存的信息。