如何监控

Edge for Private Cloud 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

Management Server、Message Processor、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 命令重启组件。

    例如,要重新启动 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 传入,系统会提示您)

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

以下示例使用命令行选项为管理服务器启用 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

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

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

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

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

默认情况下,系统会为 Cassandra 启用 JMX,并且通过 JMX 远程访问 Cassandra 时不需要密码。

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 -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. 旧服务器的状态(服务客户端 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) 以获取有关缓存的信息。