Kafka 和 Pulsar 都使用了 Zookeeper 做元数据管理服务。这些组件都提供了服务本身的可视化监控,但是对 Zookeeper 的监控,并没有受到应有的重视。这篇文章分享一种实现 Zookeeper 集群监控的方法,期望能起到抛砖引玉的效果。
方案概述
目前 prometheus 是企业内部监控方案的事实标准。因此 zookeeper 监控的关键就是:如何将Zookeeper内部的指标,通过 HTTP 协议暴露出来,并且是 prometheus 的标准格式,这样 prometheus 就可以主动采集这些指标了。
Zookeeper 服务内部健康指标有3种方式获取:[1]
- 在 3.6 版本以后,zookeeper 支持 :7000/metric 接口,直接返回 prometheus 格式
- 采集 JMX MBeans,依赖 jmx_exporter 服务,将 JMX 转化成 prometheus 格式并暴露 HTTP 接口
- zookeeper 四字命令。通过 nc 向 zookeeper 发送命令,zookeeper 会返回指标数据。
对于低版本的 Zookeeper,监控方案只能在下面2种里面选了。方案2 与 Kafka 的监控方案实现相同,不再赘述,下面介绍下如何用 zookeeper 四字命令实现。
四字命令用法
登陆到 zookeeper 节点所在服务器上,执行以下命令:
echo 'mntr' | nc localhost 2181
输出的指标含义:
| 标题 | 指标名称 | 指标单位 | 指标含义 |
|---|---|---|---|
| 版本信息 | zk_version | - | 3.4.8–1, built on 02/06/2016 03:18 GMT |
| 平均延迟 | zk_avg_latency | ms | zk 处理平均延迟 |
| 最大延迟 | zk_max_latency | ms | zk 处理最大时延 |
| 最小延迟 | zk_min_latency | ms | zk 处理最小时延 |
| 接收数据包速率 | zk_packets_received | 个/s | zk 接收的数据包速率 |
| 发送数据包速率 | zk_packets_sent | 个/s | zk 发送的数据包速率 |
| 当前连接数 | zk_num_alive_connections | - | 当前连接数 |
| 排队请求数 | zk_outstanding_requests | - | 排队请求数 |
| 节点类型 | zk_server_state | - | zk 节点类型(leader/follower) |
| znode 数量 | zk_znode_count | - | zk 的 znode 数量 |
| watch 数目 | zk_watch_count | - | zk 的 watch 数目 |
| 临时节点数目 | zk_ephemerals_count | - | zk 的临时节点数目 |
| 存储数据量 | zk_approximate_data_size | 字节 | zk 存储数据量 |
| 打开文件描述符数 | zk_open_file_descriptor_count | - | 打开文件描述符数 |
| 最大文件描述符数 | zk_max_file_descriptor_count | - | 最大文件描述符数 |
| 从节点数量 | zk_followers | - | 从节点数量 |
| 同步从节点数量 | zk_synced_followers | - | 与主节点保持同步状态的从节点数量 |
| 等待同步请求数 | zk_pending_syncs | - | 当前等待同步的数据请求的数量 |
与 prometheus 集成
Telegraf 是一个用于收集、处理、聚合和写入指标的代理。支持 zookeeper 指标采集插件,内部采用发送 mntr 数据包,获得zookeeper指标的方式。
Telegraf 配置文件:
[[inputs.zookeeper]

最低0.47元/天 解锁文章
1261

被折叠的 条评论
为什么被折叠?



