在 Linux 上监控 ZooKeeper 的运行状态,通常可以从 进程/服务层面、ZooKeeper 自带命令、日志、JMX、第三方监控 几个维度来做。下面按实用程度给你一个完整方案。
ps -ef | grep zookeeper
或
jps | grep QuorumPeerMain
如果是 systemd 管理的服务:
systemctl status zookeeper
设置开机自启:
systemctl enable zookeeper
查看日志:
journalctl -u zookeeper -f
ZooKeeper 提供了一些简单命令:
echo stat | nc localhost 2181
常见命令:
| 命令 | 作用 |
|---|---|
| stat | 查看节点状态和连接数 |
| ruok | 是否正常(imok 表示正常) |
| mntr | 详细监控指标(推荐) |
| conf | 配置信息 |
| cons | 客户端连接 |
| envi | JVM 环境 |
示例:
echo ruok | nc localhost 2181
# 返回 imok 表示正常
echo mntr | nc localhost 2181
⚠️ 注意:
mntr 需要在 zoo.cfg 中允许:
4lw.commands.whitelist=*
默认:
$ZOOKEEPER_HOME/logs/
常见日志:
zookeeper.logzookeeper.out实时查看:
tail -f $ZOOKEEPER_HOME/logs/zookeeper.log
重点看:
ERRORLeader electionConnection lostOutOfMemory在 zkServer.sh 或环境变量中加:
export JMXDISABLE=false
export JMXPORT=9999
或用:
-Dcom.sun.management.jmxremote
jconsoleVisualVMecho stat | nc node1 2181
echo stat | nc node2 2181
echo stat | nc node3 2181
关注:
jmx_exporter 暴露指标监控指标包括:
zookeeper-exporter
#!/bin/bash
result=$(echo ruok | nc localhost 2181)
if [ "$result" != "imok" ]; then
echo "ZooKeeper is DOWN"
# 发送告警或重启
fi
✅ 日常:ruok + mntr
✅ 排错:日志 + stat
✅ 生产:JMX + Prometheus + Grafana
如果你愿意,我可以: