温馨提示×

怎样用Zookeeper监控Linux系统状态

小樊
36
2025-12-26 08:39:59
栏目: 智能运维

总体思路与适用场景

  • Zookeeper 更适合作为“服务状态与协调中枢”,而不是直接采集 Linux 主机 的 CPU、内存、磁盘等指标。常见做法有两类:
    • 直接对 Zookeeper 进程做健康检查与性能采集(四字命令、脚本、JMX)。
    • 让各主机把系统指标写到 Zookeeper 的 临时节点,由监控端订阅展示(服务发现 + 状态上报)。

快速健康检查与性能采集

  • 四字命令(需启用四字命令端口,默认 2181;可用 telnetnc 发送)
    • 基础健康:echo ruok | nc 127.0.0.1 2181(返回 imok 表示进程与四字命令通路正常,注意这不代表业务读写完全正常)
    • 服务状态:echo stat | nc 127.0.0.1 2181(版本、角色 Mode、连接数、节点数等)
    • 详细监控:echo mntr | nc 127.0.0.1 2181(延迟、收发包、连接、znode、watch、文件描述符等)
    • 其他常用:echo srvr | nc 127.0.0.1 2181(不含客户端列表的服务器信息)、echo envi | nc 127.0.0.1 2181(环境变量)、echo dump | nc 127.0.0.1 2181(会话与临时节点)、echo cons | nc 127.0.0.1 2181(客户端连接明细)
  • 脚本巡检示例(判断角色是否为 leader/follower)
    • ZK_CLUSTER=“192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181” RESULT=$(echo stat | nc $(echo $ZK_CLUSTER | cut -d’,’ -f1) 2181) if [[ $RESULT == “Mode: leader” || $RESULT == “Mode: follower” ]]; then echo “Zookeeper 集群状态正常” else echo “Zookeeper 集群状态异常” fi
  • JMX 与可视化
    • 启动参数开启 JMX(示例):-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
    • 使用 jconsole/jvisualvm 连接 9999 端口查看堆、线程、类加载、JMX 指标等。

用Zookeeper承载Linux主机监控数据

  • 上报模型
    • 约定根节点:/monitor/hosts/{hostname}
    • 每台主机以 临时节点 写入:/monitor/hosts/host1 {“cpu”:“12.3”,“mem”:“68.1”,“disk”:“45”,“ts”:1735200000}
    • 监控端(或编排系统)watch 该路径,实时获取新增/变更/离线(会话过期)事件。
  • 采集与写入示例(Python,需安装 kazoo)
    • from kazoo.client import KazooClient import os, time, json zk = KazooClient(hosts=os.getenv(“ZK_SERVERS”,“127.0.0.1:2181”)) zk.start() path = f"/monitor/hosts/{os.uname().nodename}" while True: cpu = os.popen(“top -bn1 | grep ‘Cpu(s)’ | awk ‘{print $2}’”).read().strip() mem = os.popen(“free | awk ‘/Mem/{printf "%.1f", $3/$2*100}’”).read().strip() disk = os.popen(“df / | awk ‘NR==2{print $5}’ | tr -d ‘%’”).read().strip() zk.ensure_path(“/monitor/hosts”) zk.set(path, json.dumps({“cpu”:cpu,“mem”:mem,“disk”:disk,“ts”:int(time.time())})) time.sleep(15)

      退出时临时节点会自动清除(会话关闭)

  • 展示与告警
    • 将监听到的数据送入 Prometheus(Pushgateway 或 Exporter 模式),用 Grafana 做可视化与阈值告警;或直接用自研服务消费 ZK 事件流展示。

第三方监控与告警集成

  • Prometheus + Grafana
    • Zookeeper 指标:通过 JMX Exporter 暴露 JMX 指标,Prometheus 抓取并入库,Grafana 展示常用大盘(延迟、连接、请求、zk_version、zk_server_state 等)。
  • Telegraf
    • 使用 inputs.zookeeper 插件定期采集四字命令或 JMX 指标,配置示例:
      • [[inputs.zookeeper]]
        • servers = [“192.168.20.103:2181”,“192.168.20.104:2181”,“192.168.20.105:2181”]
        • interval = “60s”
        • timeout = “5s”
  • 运维脚本与系统工具
    • 在主机上用 ps/topnetstat/ss 辅助排查进程与端口(如 2181),与 ZK 检查结果交叉验证。

关键指标与告警建议

  • Zookeeper 核心指标(mntr/stat/srvr)
    • 角色与健康:zk_server_state(leader/follower)、ruok 返回 imok
    • 延迟与吞吐:zk_avg_latency、zk_min_latency、zk_max_latency、zk_packets_received、zk_packets_sent
    • 连接与会话:zk_num_alive_connections、zk_outstanding_requests
    • 数据与结构:zk_znode_count、zk_watch_count、zk_ephemerals_count、zk_approximate_data_size
    • 资源与稳定性:zk_open_file_descriptor_count、zk_max_file_descriptor_count
  • Linux 主机建议指标
    • CPU 利用率、内存使用率、磁盘使用率与 inode、网络 rx/tx、系统 load、关键进程存活
  • 常见告警阈值示例
    • zk_avg_latency 持续高于 100ms 或 zk_outstanding_requests 突增
    • zk_num_alive_connections 接近 maxClientCnxns
    • 主机 CPU > 80%可用内存 < 10%根分区使用率 > 85%
    • 节点在 ZK 中的 临时节点消失(会话过期/进程异常)

0