ZooKeeper 监控指南
新指标系统
该功能:New Metrics System 自3.6.0版本起可用,提供了丰富的指标来帮助用户监控ZooKeeper,涵盖以下主题:znode、网络、磁盘、仲裁、领导者选举、客户端、安全性、故障、监视/会话、requestProcessor等。
指标
所有指标都包含在ServerMetrics.java中。
普罗米修斯
- 运行Prometheus监控服务是采集和记录ZooKeeper指标的最简便方式。
- 前提条件:
- 在zoo.cfg中设置
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider来启用Prometheus MetricsProvider。 - 端口也可以通过设置
metricsProvider.httpPort进行配置(默认值:7000) - 安装Prometheus:前往官方网站下载页面,获取最新版本。
-
将Prometheus的抓取器目标设置为ZooKeeper集群端点:
cat > /tmp/test-zk.yaml < -
设置Prometheus处理器:
nohup /tmp/prometheus \ --config.file /tmp/test-zk.yaml \ --web.listen-address ":9090" \ --storage.tsdb.path "/tmp/test-zk.data" >> /tmp/test-zk.log 2>&1 & -
现在Prometheus将每10秒抓取一次zk指标。
使用Prometheus进行告警
-
我们建议您阅读Prometheus官方告警页面来了解一些告警原理
-
我们建议您使用Prometheus Alertmanager,它能帮助用户以更便捷的方式接收告警邮件或即时消息(通过webhook)
-
我们提供了一个需要特别关注这些指标的告警示例。注意:这仅供您参考,您需要根据实际情况和资源环境进行调整
使用 ./promtool check rules rules/zk.yml 检查配置文件的正确性 cat rules/zk.yml groups: - name: zk-alert-example rules: - alert: ZooKeeper服务器宕机 expr: up == 0 for: 1m labels: severity: critical annotations: summary: "实例 {{ $labels.instance }} ZooKeeper服务器宕机" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} ZooKeeper服务器已宕机: [{{ $value }}]." - alert: 创建过多znode节点 expr: znode_count > 1000000 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 创建过多znode节点" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 创建过多znode节点: [{{ $value }}]." - alert: 创建过多连接 expr: num_alive_connections > 50 # 假设我们使用默认的maxClientCnxns: 60 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 创建过多连接" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 创建过多连接: [{{ $value }}]." - alert: znode占用总内存过大 expr: approximate_data_size /1024 /1024 > 1 * 1024 # 超过1024 MB(1 GB) for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} znode占用总内存过大" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} znode占用总内存过大: [{{ $value }}] MB." - alert: 设置过多watch监控 expr: watch_count > 10000 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 设置过多watch监控" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 设置过多watch监控: [{{ $value }}]." - alert: 发生leader选举 expr: increase(election_time_count[5m]) > 0 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 发生leader选举" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 发生leader选举: [{{ $value }}]." - alert: 打开文件过多 expr: open_file_descriptor_count > 300 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 打开文件过多" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 打开文件过多: [{{ $value }}]." - alert: fsync时间过长 expr: rate(fsynctime_sum[1m]) > 100 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} fsync时间过长" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} fsync时间过长: [{{ $value }}]." - alert: 快照时间过长 expr: rate(snapshottime_sum[5m]) > 100 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 快照时间过长" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 快照时间过长: [{{ $value }}]." - alert: 平均延迟过高 expr: avg_latency > 100 for: 1m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} 平均延迟过高" description: "任务 {{$labels.job}} 的实例 {{ $labels.instance }} 平均延迟过高: [{{ $value }}]." - alert: JVM内存即将耗尽 expr: jvm_memory_bytes_used / jvm_memory_bytes_max{area="heap"} > 0.8 for: 5m labels: severity: warning annotations: summary: "JVM内存即将耗尽 (实例 {{ $labels.instance }})" description: "JVM内存即将耗尽 (> 80%)\n 标签: {{ $labels }} 值 = {{ $value }}\n"
Grafana
- Grafana内置支持Prometheus;只需添加一个Prometheus数据源:
Name: test-zk Type: Prometheus Url: http://localhost:9090 Access: proxy - 然后下载并导入默认的ZooKeeper仪表板模板并进行自定义。
- 用户如果有任何好的改进建议,可以通过发送邮件至dev@zookeeper.apache.org申请Grafana仪表盘账户。
InfluxDB
InfluxDB 是一款开源时间序列数据库,常用于存储来自Zookeeper的指标数据。您可以下载开源版本或在InfluxDB云端免费创建账户。无论哪种方式,都需要配置Apache Zookeeper Telegraf插件来开始从Zookeeper集群收集指标并存储到InfluxDB实例中。此外还有一个Apache Zookeeper InfluxDB模板,包含Telegraf配置和仪表盘,可帮助您快速完成设置。
JMX
更多详情请参阅此处
四字命令
更多详情请参阅此处
