Zookeeper自带的zkServer.sh和zkCli.sh是基础监控工具,无需额外安装。
/path/to/zookeeper/bin/zkServer.sh status,可返回节点角色(Leader/Follower/Standby)及运行状态。zkCli.sh -server <host>:<port>(默认端口2181)连接到Zookeeper,执行以下命令:
stat:查看节点状态(连接数、会话数、Znode数量等);cons:查看当前连接的客户端的详细信息;ruok:检查节点是否存活(返回“imok”表示正常);mntr(Zookeeper 3.4.0+支持):输出更全面的指标(平均延迟、最大延迟、数据包收发数等)。若Zookeeper通过systemd管理(如通过apt安装),可使用以下命令:
sudo systemctl status zookeeper,显示服务是否运行、最近日志片段及错误信息。sudo journalctl -u zookeeper -f,实时跟踪Zookeeper服务的日志输出,便于诊断问题。JMX(Java Management Extensions)可暴露Zookeeper内部指标,需配合可视化工具(如jconsole、VisualVM)使用:
zkServer.sh),添加JVM参数:export JVMFLAGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
jconsole或VisualVM,添加远程JMX连接(地址格式:service:jmx:rmi:///jndi/rmi://<zookeeper_host>:9999/jmxrmi),即可查看内存、线程、请求延迟等详细指标。适用于大规模集群,提供数据收集、存储、可视化及告警一体化解决方案:
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz),编辑prometheus.yml,添加Zookeeper Exporter抓取任务:scrape_configs:
- job_name: 'zookeeper'
static_configs:
- targets: ['<zookeeper_host>:9143'] # Zookeeper Exporter默认端口
wget https://github.com/carlpett/zookeeper_exporter/releases/download/v1.0.2/zookeeper_exporter-1.0.2.linux-amd64.tar.gz),配置zookeeper_exporter.yml(指定Zookeeper地址host:port),启动后暴露Prometheus格式的指标。sudo apt install grafana安装,启动后添加Prometheus作为数据源,导入Zookeeper监控面板(如Grafana官方提供的“Zookeeper Cluster Monitoring”面板),实现CPU使用率、内存占用、连接数、请求延迟等指标的可视化。使用Linux系统自带工具监控Zookeeper进程的资源消耗:
top -p $(cat /path/to/zookeeper/data/myid)(myid文件存储节点ID),显示CPU、内存占用;iostat -x 1,监控磁盘读写性能(Zookeeper对磁盘IO敏感);sudo netstat -tuln | grep 2181或sudo ss -tuln | grep 2181,确认Zookeeper默认端口(2181)是否在监听。通过脚本定期检查Zookeeper状态,实现自动告警(如邮件、Slack通知):
/path/to/zookeeper_monitor.sh):#!/bin/bash
STATUS=$(/path/to/zookeeper/bin/zkServer.sh status)
if echo "$STATUS" | grep -q "Leader"; then
echo "Zookeeper is running as Leader"
elif echo "$STATUS" | grep -q "Follower"; then
echo "Zookeeper is running as Follower"
else
echo "Zookeeper is DOWN!" | mail -s "Zookeeper Alert" admin@example.com # 替换为实际告警方式
fi
crontab -e,添加*/5 * * * * /path/to/zookeeper_monitor.sh,每5分钟运行一次。以上方法覆盖了从基础到高级的监控需求,可根据集群规模(单机/集群)、运维复杂度选择合适的方式。对于生产环境,推荐结合Prometheus+Grafana实现全面的监控与告警。