通过在ZooKeeper中埋点来暴露数据,使用Prometheus监控抓取数据,并借助Prometheus Grafana大盘来展示数据,即可实现通过Prometheus监控ZooKeeper的目的。
简单的zk监控:
mntr 命令的输出:echo mntr | nc 192.168.229.161 2181
zk_version 3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency 0 -zk的平均延迟
zk_max_latency 565 -zk的最大延迟数据
zk_min_latency 0
zk_packets_received 95353
zk_packets_sent 95713
zk_num_alive_connections 3
zk_outstanding_requests 0 -zk的请求堆积数
zk_server_state leader -zk的角色
zk_znode_count 20 -zk的Znode节点数
zk_watch_count 12 -zk的watch数,跟zk的表数量有关系
zk_ephemerals_count 9
zk_approximate_data_size 1465
zk_open_file_descriptor_count 37
zk_max_file_descriptor_count 65535
zk_followers 2 - 只有leader进程才有此项输出
zk_synced_followers 2 - 只有leader进程才有此项输出
zk_pending_syncs 0 - 只有leader进程才有此项输出
命令 描述
conf zk服务配置的详细信息
stat 客户端与zk连接的简要信息
srvr zk服务的详细信息
cons 客户端与zk连接的详细信息
mntr zk服务目前的性能状况
wchs watch的简要信息
wchc watch的详细信息,客户端 -> watch的映射,线上环境要小心使用
wchp watch的详细信息, znode -> 客户端的映射,线上环境要小心使用
结合Prometheus监控ZooKeeper 如下
参考地址:https://help.aliyun.com/document_detail/141109.html?spm=5176.13910061.sslink.1.3f65222c9cQHO4
步骤一:启动JMX服务
首先需要在ZooKeeper中启用JMX服务以获取资源信息。
- 修改/opt/zk/zookeeper-3.4.10/bin/zkServer.sh,在第44行添加JMXPORT=8999。具体添加位置如下所示。
if [ "x$JMXLOCALONLY" = "x" ]
then
JMXLOCALONLY=false
fi
JMXPORT=8999 ## 添加在此处第44行if [ "x$JMXDISABLE" = "x" ] || [ "$JMXDISABLE" = 'false' ]
then
echo "ZooKeeper JMX enabled by default $JMXPORT ..." >&2
if [ "x$JMXPORT" = "x" ]
then
- 重启ZooKeeper。
/opt/zk/zookeeper-3.4.10/bin/zkServer.sh start /opt/zk/zookeeper-3.4.10/conf/zoo_sample.cfg &
步骤二:在ZooKeeper中启动jmx_exporter<相关包请去上面阿里云地址下载>
其次需要启动jmx_exporter,让JMX信息可以直接通过HTTP方式访问,以便Prometheus监控抓取。
- 下载zookeeper.yaml到/opt/exporter_zookeeper/目录下。
- 修改下载的/opt/exporter_zookeeper/zookeeper.yaml文件,在第一行添加hostPort: localhost:8999,将JMX服务运行的端口暴露给jmx_exporter。
- 下载jmx_exporter的可执行文件到opt/exporter_zookeeper/目录下。
- 启动jmx_exporter。
java -Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.authenticate=false -
Dcom.sun.management.jmxremote.port=8998 -cp /opt/exporter_zookeeper/jmx_prometheus_httpserver-0.12.0-jar-with-dependencies.jar
io.prometheus.jmx.WebServer 8997 /opt/exporter_zookeeper/zookeeper_exporter.yaml &
注意:端口不用改,就是8998,8997 ,8999端口是zk暴露出的端口
至此应用部分配置完成。可通过运行如下命令验证jmx_exporter是否可以正常工作。
curl http://<jmx_exporter所在机器的IP>:8997/metrics
转载至阿里云