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)练习(可操作)#
-
创建“节点对比”面板:
目标:同屏对比每个实例的zk_num_alive_connections,图表类型为 Bar。
预期:能快速识别连接热点节点。 -
添加“容量趋势”面板:
目标:显示zk_znode_count的 30 天趋势。
预期:用于容量规划与清理策略。 -
制作“告警汇总”面板:
目标:聚合 Alertmanager 告警数量(按 severity 统计)。
预期:管理层一页概览当前风险等级。
7)仪表盘结构建议(可复用模板)#
- 总览:角色分布、存活节点、平均延迟、连接数
- 性能:请求吞吐、延迟 P95/P99、outstanding
- 会话与连接:连接数、会话数、过期会话
- 数据与持久化:znode、watch、快照大小、日志使用率
- 一致性:follower 同步延迟、选举事件(如有)
- 告警汇总:告警列表、趋势与处理链接