11.9.7 可视化面板与仪表盘配置

可视化面板与仪表盘配置#

本节以 Grafana + Prometheus + ZooKeeper Exporter 为例,给出从安装、导入面板、关键图表配置到排错与练习的完整流程,确保仪表盘可直接落地。

原理草图(数据流与组件关系)

文章图片

1)安装与接入示例(Prometheus + Grafana + ZK Exporter)#

1.1 安装 Grafana(Linux)

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y grafana
sudo systemctl enable --now grafana-server

# 验证
curl -s http://127.0.0.1:3000/login | head -n 1
# 预期:返回 HTML 页面

1.2 启动 ZooKeeper Exporter

以 3.7.1 版本为例,监听 7071 端口导出 metrics

# 下载并运行(示例)
wget -q https://github.com/prometheus/jmx_exporter/releases/download/0.20.0/jmx_prometheus_httpserver-0.20.0-jar-with-dependencies.jar -O /opt/jmx_httpserver.jar

# 编写 exporter 配置
cat >/opt/zk_jmx.yaml <<'EOF'
lowercaseOutputName: true
rules:
  - pattern: "org.apache.ZooKeeperService<name0=ReplicatedServer_id(.*), name1=replica.(.*)><>(.*)"
EOF

# 启动(示例)
java -jar /opt/jmx_httpserver.jar 7071 /opt/zk_jmx.yaml &
# 预期:监听 http://127.0.0.1:7071/metrics

1.3 Prometheus 接入配置

# /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'zookeeper'
    static_configs:
      - targets:
          - '10.0.0.11:7071'
          - '10.0.0.12:7071'
          - '10.0.0.13:7071'
sudo systemctl restart prometheus
curl -s http://127.0.0.1:9090/targets | grep zookeeper -n
# 预期:目标状态为 UP

2)仪表盘设计与可视化示例(Grafana)#

2.1 新建数据源

# Grafana UI 操作路径(示例)
# Configuration -> Data Sources -> Add data source -> Prometheus
# URL: http://127.0.0.1:9090
# Save & Test -> Data source is working

2.2 导入示例仪表盘(JSON 模板)

# 假设已有 dashboard.json
curl -s -X POST http://admin:admin@127.0.0.1:3000/api/dashboards/db \
  -H 'Content-Type: application/json' \
  -d @dashboard.json
# 预期:{"status":"success","slug":"zookeeper-overview",...}

3)关键面板与 PromQL 示例(含图表类型)#

3.1 总览面板(Overview)
- 角色与存活(Stat/Gauge)

count by (role) (zk_server_state)
  • 连接数(Time series)
sum(zk_num_alive_connections)

3.2 核心性能面板(Performance)
- 平均延迟(Time series)

avg(zk_avg_latency) by (instance)
  • P95/P99(若 exporter 提供直方图)
histogram_quantile(0.95, sum(rate(zk_latency_bucket[5m])) by (le))

3.3 会话与连接(Sessions & Connections)

sum(zk_ephemerals_count) by (instance)

3.4 数据与持久化(Data & Persistence)

sum(zk_znode_count) by (instance)

3.5 一致性与同步(Consistency)

max(zk_follower_synced) by (instance)

4)告警联动与面板阈值#

Grafana 阈值示例(延迟)
- 绿:< 50ms
- 黄:50–100ms
- 红:> 100ms

告警链接示例(Dashboard → Alertmanager/工单)

# 面板面向“告警详情”URL(示例)
https://alert.example.com/#/alerts?cluster=${cluster}&instance=${instance}

5)常见排错(含命令)#

问题 1:Grafana 无数据

# 检查 Prometheus 是否抓取成功
curl -s http://127.0.0.1:9090/targets | grep -A3 zookeeper

# 检查 exporter 是否可访问
curl -s http://10.0.0.11:7071/metrics | head -n 5

问题 2:指标缺失或为 0

# 检查 ZooKeeper 端口与 JMX 是否开放
ss -lntp | grep 7071
# 检查 JVM 启动参数或 exporter 配置规则是否匹配

问题 3:延迟图波动异常

# 结合四字命令排查
echo mntr | nc 10.0.0.11 2181 | egrep 'avg_latency|max_latency|outstanding_requests'

6)练习(可操作)#

  1. 创建“节点对比”面板
    目标:同屏对比每个实例的 zk_num_alive_connections,图表类型为 Bar
    预期:能快速识别连接热点节点。

  2. 添加“容量趋势”面板
    目标:显示 zk_znode_count 的 30 天趋势。
    预期:用于容量规划与清理策略。

  3. 制作“告警汇总”面板
    目标:聚合 Alertmanager 告警数量(按 severity 统计)。
    预期:管理层一页概览当前风险等级。


7)仪表盘结构建议(可复用模板)#

  • 总览:角色分布、存活节点、平均延迟、连接数
  • 性能:请求吞吐、延迟 P95/P99、outstanding
  • 会话与连接:连接数、会话数、过期会话
  • 数据与持久化:znode、watch、快照大小、日志使用率
  • 一致性:follower 同步延迟、选举事件(如有)
  • 告警汇总:告警列表、趋势与处理链接