适用于私有云的 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,请执行以下操作:
- 修改组件的配置文件。此文件位于
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
。 - 管理服务器:
- 将以下
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
- 保存配置文件。
- 使用
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 |
返回有关服务的信息,包括:
此 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:passwordcurl 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。
此调用要求您使用系统管理员用户名和密码进行身份验证。
服务器应针对所有调用返回“已部署”状态。如果这些方法失败,请执行以下操作:
- 检查服务器日志中是否有错误。日志位于以下位置:
- 管理服务器:
opt/apigee/var/log/edge-management-server
- 消息处理器:
opt/apigee/var/log/edge-message-processor
- 管理服务器:
- 对服务器进行调用,检查其是否正常运行。
- 从 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
检查服务的状态,请执行以下操作:
- 登录服务器并运行以下命令:
/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
- 管理服务器:
- 如果服务未运行,请启动服务:
/opt/apigee/apigee-service/bin/apigee-service service_name start
- 重启服务后,请使用之前使用的
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。
运行脚本之前:
- 您必须在每个 Postgres 节点上安装 check_postgres.pl 脚本。
- 确保您已安装
perl-Time-HiRes.x86_64
,这是一个 Perl 模块,用于实现高分辨率闹钟、休眠、gettimeofday 和间隔计时器。例如,您可以使用以下命令进行安装:
yum install perl-Time-HiRes.x86_64
- CentOS 7:在 CentOS v7 上使用 check_postgres.pl 之前,请安装
perl-Data-Dumper.x86_64
RPM。
check_postgres.pl 输出
使用 check_postgres.pl
的 API 调用的默认输出与 Nagios 兼容。安装脚本后,请进行以下检查:
- 检查数据库大小:
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'
- 检查数据库的传入连接数,并与允许的连接数上限进行比较:
check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action backends
- 检查数据库是否正在运行且可用:
check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action connection
- 检查磁盘可用空间:
check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action disk_space --warning='80%' --critical='90%'
- 检查 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 服务,请参阅以下内容:
- http://www.postgresql.org/docs/9.0/static/monitoring.html
- http://www.postgresql.org/docs/9.0/static/diskusage.html
- http://bucardo.org/check_postgres/check_postgres.pl.html
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 集群节点上执行以下调用:
- 常规环形信息(也适用于单个 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
- 节点的一般信息(每个节点调用一次)
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
- Thrift 服务器的状态(提供客户端 API)
nodetool -h localhost statusthrift
上述命令的输出如下所示:
running
- 数据流式传输操作的状态:监控 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 状态
- 确保 ZooKeeper 进程正在运行。ZooKeeper 会将 PID 文件写入
opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
。 - 测试 ZooKeeper 端口,确保您可以与每个 ZooKeeper 服务器上的端口 2181 和 3888 建立 TCP 连接。
- 确保您可以从 ZooKeeper 数据库中读取值。使用 ZooKeeper 客户端库(或
/opt/apigee/apigee-zookeeper/bin/zkCli.sh
)进行连接,然后从数据库中读取值。 - 查看状态:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper status
使用 ZooKeeper 四字母字词
您可以通过使用 netcat (nc) 或 telnet 发送到端口 2181 的一小组命令(四个字母的单词)对 ZooKeeper 进行监控。
如需详细了解 ZooKeeper 命令,请参阅 Apache ZooKeeper 命令参考文档。
例如:
srvr
:列出服务器的完整详细信息。stat
:列出服务器和已连接客户端的简要详细信息。
可以向 ZooKeeper 端口发出以下命令:
- 运行四个字母的命令 ruok 以测试服务器是否在非错误状态下运行。成功的响应会返回“imok”。
echo ruok | nc host 2181
返回:
imok
- 运行四个字母的命令
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
- 如果 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,了解特定请求是否正常处理。换句话说,检查是否有特定搜索会返回正确的结果。
- 使用
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
- 使用以下命令检查管理服务器是否仍连接到 LDAP:
curl -u userEMail:password http://localhost:8080/v1/users/ADMIN
返回:
{ "emailId" : ADMIN, "firstName" : "admin", "lastName" : "admin" }
您还可以监控 OpenLDAP 缓存,这有助于减少磁盘访问次数,从而提高系统性能。在 OpenLDAP 服务器中监控并调整缓存大小可能会严重影响目录服务器的性能。您可以查看日志文件 (opt/apigee/var/log
) 以获取有关缓存的信息。