Pulsar 监控与告警 是保障消息系统稳定、可运维、可诊断的核心能力。Pulsar 提供了丰富的内置指标(Metrics),结合 Prometheus + Grafana 可实现全面的可视化监控,再通过日志分析与告警规则,构建完整的可观测性体系。
📘 Pulsar 监控与告警详解
一、内置 Metrics:关键指标解析
Pulsar 各组件通过 HTTP 端点暴露 Prometheus 格式的指标,主要包括:
- Broker
- Bookie
- ZooKeeper
- JVM
1. ✅ Broker 关键指标
| 指标 | 说明 | 告警建议 |
|---|---|---|
pulsar_broker_producer_count | 生产者连接数 | 突增可能为异常流量 |
pulsar_broker_consumer_count | 消费者连接数 | 消失可能为消费中断 |
pulsar_broker_topic_in_bytes_total | 入流量(字节) | 监控吞吐变化 |
pulsar_broker_topic_out_bytes_total | 出流量(字节) | |
pulsar_broker_publish_latency_le_* | 发送延迟(P95/P99) | > 10ms 告警 |
pulsar_broker_subscription_backlog | 订阅积压(未消费消息数) | > 100万 告警 |
pulsar_broker_bundle_count | Bundle 数量(负载均衡单元) | 过多表示负载不均 |
pulsar_broker_connection_count | Broker 总连接数 | 接近上限时告警 |
pulsar_broker_rate_in | 每秒入消息数 | |
pulsar_broker_rate_out | 每秒出消息数 |
✅
backlog是核心指标,持续增长表示消费能力不足。
2. ✅ Bookie 关键指标
| 指标 | 说明 | 告警建议 |
|---|---|---|
bookkeeper_journal_force_write_latency | Journal 写入延迟 | > 10ms 告警 |
bookkeeper_client_bookie_write_latency | Bookie 写入延迟 | > 5ms 告警 |
bookkeeper_client_bookie_read_latency | Bookie 读取延迟 | > 10ms 告警 |
bookkeeper_ledger_num_under_replicated | 副本不足的 Ledger 数 | > 0 告警 |
bookkeeper_gc_pause_time | GC 暂停时间 | > 50ms 告警 |
bookie_disk_usage | 磁盘使用率 | > 80% 告警 |
bookkeeper_entry_memtable_count | 内存表数量 | 过高可能 OOM |
bookkeeper_compaction_rate | Compaction 速度 | 过低表示 GC 慢 |
✅
under_replicated表示数据有丢失风险,必须立即处理。
3. ✅ ZooKeeper 关键指标
| 指标 | 说明 |
|---|---|
zookeeper_avg_latency | 平均响应延迟 |
zookeeper_packets_received | 接收包数 |
zookeeper_packets_sent | 发送包数 |
zookeeper_num_alive_connections | 活跃连接数 |
jvm_memory_used | JVM 内存使用 |
ZooKeeper 延迟高会影响整个集群协调性能。
4. ✅ JVM 关键指标(所有组件)
| 指标 | 说明 |
|---|---|
jvm_memory_used | 各内存区使用量 |
jvm_gc_collection_seconds_count | GC 次数 |
jvm_gc_collection_seconds_max | GC 最大暂停时间 |
jvm_threads_current | 当前线程数 |
建议:GC 暂停 < 50ms,否则影响消息延迟。
二、Prometheus + Grafana:可视化监控
1. 启用 Pulsar 指标导出
在 broker.conf 和 bookkeeper.conf 中启用:
# broker.conf
metricsEnabled=true
monitoringServers=prometheus
# bookkeeper.conf
serverMetricsProviderClass=org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
指标端点:
- Broker:
http://broker:8080/metrics- Bookie:
http://bookie:8000/metrics
2. 部署 Prometheus
# prometheus.yml
scrape_configs:
- job_name: 'pulsar-broker'
static_configs:
- targets: ['broker1:8080', 'broker2:8080']
- job_name: 'pulsar-bookie'
static_configs:
- targets: ['bookie1:8000', 'bookie2:8000']
3. 部署 Grafana 并导入官方 Dashboard
Pulsar 官方提供了多个 Grafana Dashboard 模板:
| Dashboard | 说明 |
|---|---|
| Pulsar Broker | Broker 吞吐、延迟、连接数 |
| Pulsar Bookie | Bookie I/O、延迟、GC |
| Pulsar ZooKeeper | ZK 延迟、连接数 |
| Pulsar JVM | JVM 内存、GC |
导入方式:Grafana → Dashboard → Import → 输入 ID 或上传 JSON。
4. 关键可视化面板
| 面板 | 说明 |
|---|---|
| Broker Throughput | 入/出流量趋势 |
| Publish Latency (P99) | 发送延迟是否飙升 |
| Subscription Backlog | 各订阅积压情况 |
| Bookie Disk Usage | 磁盘使用率 |
| Journal Write Latency | Bookie 写入延迟 |
| Underreplicated Ledgers | 副本缺失告警 |
| JVM GC Pause | GC 是否影响性能 |
三、日志分析:定位问题
1. 日志位置
| 组件 | 日志路径 |
|---|---|
| Broker | $PULSAR_HOME/logs/pulsar-broker.log |
| Bookie | $PULSAR_HOME/logs/bookkeeper.log |
| ZooKeeper | $PULSAR_HOME/logs/zookeeper.log |
2. 常见问题与日志关键词
| 问题 | 日志关键词 | 解决方案 |
|---|---|---|
| 生产者发送失败 | Send timeout, Connection closed | 检查网络、Broker 负载 |
| 消费者无法连接 | Subscribe failed, Topic not found | 检查权限、Topic 是否存在 |
| 写入延迟高 | Slow write, Journal sync took | 检查 Bookie 磁盘 I/O |
| 副本缺失 | under-replicated, Autorecovery started | 检查 Bookie 是否宕机 |
| 磁盘满 | No space left, Disk full | 扩容或启用 Offload |
| ZooKeeper 超时 | Session expired, Connection loss | 检查 ZK 集群健康 |
3. 日志分析工具建议
- ELK(Elasticsearch + Logstash + Kibana)
- Loki + Promtail + Grafana
- Splunk
推荐:使用 Grafana 集成 Loki,统一监控与日志。
四、告警规则配置(Prometheus Alertmanager)
在 prometheus.yml 或独立 rules.yml 中定义告警规则:
groups:
- name: pulsar-broker
rules:
- alert: HighPublishLatency
expr: histogram_quantile(0.99, sum(rate(pulsar_broker_publish_latency_le[5m])) by (le)) > 0.01
for: 5m
labels:
severity: warning
annotations:
summary: "High publish latency on {{ $labels.instance }}"
description: "P99 publish latency is {{ $value }}s"
- alert: SubscriptionBacklogTooHigh
expr: pulsar_broker_subscription_backlog > 1000000
for: 10m
labels:
severity: critical
annotations:
summary: "Subscription backlog too high"
description: "Backlog is {{ $value }} on {{ $labels.topic }}"
- alert: BookieUnderReplicated
expr: bookkeeper_ledger_num_under_replicated > 0
for: 2m
labels:
severity: critical
annotations:
summary: "Bookie ledger under-replicated"
description: "Some ledgers are missing replicas"
- alert: BookieDiskFull
expr: bookie_disk_usage > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "Bookie disk usage > 80%"
description: "Disk usage is {{ $value }} on {{ $labels.instance }}"
- alert: JournalWriteLatencyHigh
expr: bookkeeper_journal_force_write_latency > 10
for: 5m
labels:
severity: warning
annotations:
summary: "Bookie journal write latency high"
description: "Journal write latency is {{ $value }}ms"
✅ 告警级别建议:
warning:需关注critical:立即处理
五、最佳实践总结
| 实践 | 建议 |
|---|---|
| ✅ 启用所有组件的 metrics | Broker、Bookie、ZK |
| ✅ 使用官方 Grafana Dashboard | 快速搭建可视化 |
| ✅ 重点监控 backlog 和延迟 | 最能反映系统健康 |
| ✅ 设置合理的告警阈值 | 避免误报和漏报 |
| ✅ 日志集中管理 | 使用 Loki 或 ELK |
| ✅ 定期演练告警响应 | 确保 SRE 能及时处理 |
| ✅ 监控 Autorecovery 状态 | 防止数据丢失 |
✅ 总结
| 层级 | 工具 | 目标 |
|---|---|---|
| Metrics | Prometheus | 采集性能数据 |
| 可视化 | Grafana + 官方 Dashboard | 直观展示系统状态 |
| 日志 | Loki / ELK | 定位具体问题 |
| 告警 | Alertmanager | 主动发现问题 |
📌 一句话总结:
Pulsar 的可观测性 = Prometheus(指标) + Grafana(看板) + 日志(诊断) + Alertmanager(告警) —— 构建这套体系,你就能像“医生”一样,实时掌握 Pulsar 集群的“心跳”与“血压”,及时发现并解决问题。
1219

被折叠的 条评论
为什么被折叠?



