0%

ZooKeeper 监控指标


前言

ZooKeeper 是一个开放源码的分布式应用程序协调服务,很多分布式应用程序可以基于它实现同步服务,如 HDFS、HBase、Kafka

状态

ZooKeeper 提供了四字命令(The Four Letter Words),用来获取 ZooKeeper 服务的当前状态及相关信息

有哪些命令可以使用?

四字命令 功能描述
conf 打印配置
cons 列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括”接受/发送”的包数量、会话id、操作延迟、最后的操作执行等等信息
crst 重置所有连接的连接和会话统计信息
dump 列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用
envi 打印出服务环境的详细信息
reqs 列出未经处理的请求
ruok 即”Are you ok”,测试服务是否处于正确状态。如果确实如此,那么服务返回”imok”,否则不做任何相应
stat 输出关于性能和连接的客户端的列表
srst 重置服务器的统计
srvr 列出连接服务器的详细信息
wchs 列出服务器watch的详细信息
wchc 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
wchp 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径
mntr 输出可用于检测集群健康状态的变量列表

通过下列命令来获取这些监控信息 echo commands | nc ip port

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ echo mntr | nc 192.168.1.229 2181
zk_version 3.4.5-cdh6.3.1--1, built on 09/26/2019 09:28 GMT # 版本
zk_avg_latency 0 # 平均延时
zk_max_latency 51 # 最大延时
zk_min_latency 0 # 最小延时
zk_packets_received 825166 # 收包数
zk_packets_sent 844514 # 发包数
zk_num_alive_connections 10 # 连接数
zk_outstanding_requests 0 # 堆积请求数
zk_server_state leader # 状态
zk_znode_count 399 # znode 数量
zk_watch_count 74 # watch 数量
zk_ephemerals_count 9 # 临时节点(znode)
zk_approximate_data_size 28043 # 数据大小
zk_open_file_descriptor_count 59 # 打开的文件描述符数量
zk_max_file_descriptor_count 32768 # 最大文件描述符数量
zk_fsync_threshold_exceed_count 0
zk_followers 2 # follower 数量,leader角色才会有这个输出
zk_synced_followers 2 # 同步的 follower 数量
zk_pending_syncs 0 # 准备同步数,leader角色才会有这个输出
zk_last_proposal_size 32 # 最近一次 Proposal 消息大小
zk_max_proposal_size 1337 # 最大 Proposal 消息大小
zk_min_proposal_size 32 # 最小 Proposal 消息大小

还有很多信息可以获取,更多可以自行搜索。

监控

监控平台的话目前业界已经比较成熟的阿里开源 ZooKeeper 监控框架 TaoKeeper

TaoKeeper 同作原理通过SSH连接到ZooKeeper部署的机器上,再在上面执行 ZooKeeper 的四字命令来得到统计信息,再分析保存到 MySQL 数据库中。

当然也可以使用四字命令+nc写脚本去做告警也行,针对以下几个维度去

open_connections 单机打开连接连接数,建议超过平常的两倍就报警,这样就能知道比平常连接数激增

latency 响应一个客户端请求的时间,建议这个时间大于10个TickTime就报警

tickTime 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。默认是 2000 毫秒

outstanding_requests 排队请求的数量,当ZooKeeper超过了它的处理能力时,这个值会增大,建议设置报警阀值为10

zookeeper globalOutstandingLimit 配置指定了等待处理的最大请求数量的限制

open_file_descriptor_count 打开文件数量,当这个值大于允许值”zk_max_file_descriptor_count” 85% 时报警

Java Heap Size JVM 堆栈内存使用情况大于分配的最大内存 80% 时报警


参考链接