Prometheus 监控 Apache Pulsar 全栈实战:从租户吞吐到 Bookie 延迟的分布式可观测性
Prometheus 监控 Apache Pulsar 全栈实战从租户吞吐到 Bookie 延迟的分布式可观测性Apache Pulsar 作为下一代云原生消息和流处理平台其分层架构Broker BookKeeper ZooKeeper带来了极高的扩展性同时也增加了运维复杂度。Prometheus原生集成是 Pulsar 的亮点之一——每个组件都内建了 HTTP 指标端点无需任何外部导出器。本文将带你从零开启 Pulsar 的 Prometheus 端点统一收集 Broker、Bookie、ZooKeeper、Proxy 的指标结合 Grafana 大屏与告警规则构建贯穿整个消息生命周期的可观测体系。1. Pulsar 原生 Prometheus 支持概述组件默认 Metrics 端口关键指标范围Broker8080(默认)消息进出速率、订阅、消费者、生产者、存储大小、延迟、连接数Bookie8000写入/读取延迟、日志大小、磁盘用量、Journal 队列、复制ZooKeeper8000(若启用)会话数、延迟、数据大小Proxy8080(Pulsar Proxy)前端连接、代理延迟、限流Function Worker8080(若独立部署)函数实例、处理延迟、错误数Pulsar 的指标格式完全符合 Prometheus 文本规范只需在组件的配置中确认exposeTopicLevelMetricsInPrometheus等参数然后让 Prometheus 直接抓取对应端口即可零额外 Agent。2. 启用 Pulsar 的 Prometheus 端点2.1 Broker 配置编辑conf/broker.conf确保以下设置# 开启 Prometheus 指标暴露 exposeTopicLevelMetricsInPrometheustrue # 暴露主题级指标 exposeConsumerLevelMetricsInPrometheustrue # 暴露消费者级指标 exposeProducerLevelMetricsInPrometheustrue # 暴露生产者级指标Pulsar 2.10 # 指标端口默认 8080与 admin 端口共用也可以拆分开 metricsPort8080 metricsServletPath/metrics注意如果担心指标量爆炸可在生产环境仅暴露topic和consumer级别或通过prometheusMetricsServletExclude排除不需要的指标。重启 Broker。2.2 Bookie 配置编辑conf/bookkeeper.conf# 启用 Prometheus HTTP 端点 prometheusStatsHttpPort8000Bookie 会自动暴露详细的读写、Journal、Ledger 指标。2.3 ZooKeeper 配置虽然 Pulsar 自带 ZK但若你使用独立的 ZooKeeper 集群版本 3.6可启用 Prometheus 指标。在zoo.cfg中增加metricsProvider.classNameorg.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort70002.4 Proxy 与 Function WorkerProxy通常复用 Broker 的配置通过proxy.conf设置metricsPort为独立端口如 8081以避免冲突。Function Worker若以pulsar-admin functions-worker或 K8s 部署Worker 也会暴露/metrics端点。3. 配置 Prometheus 抓取在prometheus.yml中按组件分组以便管理scrape_configs:# Pulsar Broker-job_name:pulsar-brokerscrape_interval:30sstatic_configs:-targets:-broker1:8080-broker2:8080-broker3:8080labels:cluster:pulsar-prodcomponent:broker# Pulsar Bookie-job_name:pulsar-bookiescrape_interval:30sstatic_configs:-targets:-bookie1:8000-bookie2:8000-bookie3:8000labels:cluster:pulsar-prodcomponent:bookie# ZooKeeper (如果启用了 Prometheus)-job_name:pulsar-zookeeperscrape_interval:30sstatic_configs:-targets:-zk1:7000-zk2:7000-zk3:7000labels:cluster:pulsar-prodcomponent:zookeeper# Pulsar Proxy (如有)-job_name:pulsar-proxyscrape_interval:30sstatic_configs:-targets:-proxy1:8081-proxy2:8081labels:cluster:pulsar-prodcomponent:proxy如果启用 TLS/认证Prometheus 支持bearer_token或tls_config可在抓取配置中声明。4. 核心监控指标与 PromQLPulsar 的指标命名规范为pulsar_component_metric_name常用 Broker 和 Bookie 指标如下分类关键指标Broker含义PromQL 示例消息速率pulsar_rate_inpulsar_rate_out消息入/出速率条/秒直接用或rate(pulsar_rate_in[1m])吞吐量pulsar_throughput_inpulsar_throughput_out入/出字节速率字节/秒rate(pulsar_throughput_in[1m])订阅与主题pulsar_subscriptions_countpulsar_topics_count订阅数/主题数聚合看趋势消息确认pulsar_entry_ack_rate消息确认速率观察消费速度存储大小pulsar_storage_sizepulsar_storage_write_rate存储空间使用 / 写速率结合磁盘告警连接数pulsar_active_connections活跃客户端连接数高水位告警延迟 (Pulsar 2.9)pulsar_storage_write_latency_le_*(Histogram)存储写入延迟分布histogram_quantile(0.99, rate(pulsar_storage_write_latency_bucket[5m]))未确认消息pulsar_msg_backlog积压消息总数各主题 阈值告警Bookie 关键指标指标含义PromQL 示例bookie_ADD_ENTRY_REQUEST/READ_ENTRY_REQUEST计数器写入/读取请求数rate(bookie_ADD_ENTRY_REQUEST[1m])bookie_ADD_ENTRY_LATENCY/READ_ENTRY_LATENCY请求延迟直方图P99 写入延迟histogram_quantile(0.99, rate(bookie_ADD_ENTRY_LATENCY_bucket[5m]))bookie_journal_JOURNAL_SYNC_TIMEJournal 同步耗时高表示磁盘压力bookie_SERVER_STATUSBookie 是否可写1可写0只读告警bookie_SERVER_STATUS 0bookie_LEDGER_CACHE_HIT_RATE读缓存命中率低于 90% 需关注bookie_NUM_LEDGERS本机 Ledger 数量过大可能负载不均实际指标名可通过/metrics端点查询确认。Pulsar 版本不同可能有细微差别。重要计算整体消息吞吐 (MB/s)rate(pulsar_throughput_in[1m]) / 1024 / 1024某主题的未确认消息数pulsar_msg_backlog{namespace..., topic...}Bookie 写 P99 (ms)histogram_quantile(0.99, rate(bookie_ADD_ENTRY_LATENCY_bucket[5m])) * 10005. Grafana 仪表盘推荐Pulsar 社区提供了优质的官方仪表盘可直接导入Pulsar Dashboard (Official)Dashboard ID14751适用于 Pulsar 2.8包含 Broker、Bookie、ZooKeeper 的综合面板基于 Prometheus 指标。这是首选。Pulsar BrokerID11196专注 Broker 侧消息速率、订阅等。Pulsar BookKeeper ClusterID2189覆盖 Bookie 读写延迟、Journal、磁盘。导入后选择数据源将变量cluster绑定到你的cluster标签即可。6. 告警规则实战groups:-name:pulsar_alertsrules:-alert:PulsarBrokerDownexpr:up{jobpulsar-broker} 0for:1mlabels:severity:criticalannotations:summary:Pulsar Broker {{ $labels.instance }} 宕机-alert:PulsarBookieReadOnlyexpr:bookie_SERVER_STATUS 0for:1mlabels:severity:criticalannotations:summary:Bookie {{ $labels.instance }} 进入只读状态可能磁盘满或错误-alert:PulsarHighMessageBacklogexpr:pulsar_msg_backlog1000000for:10mlabels:severity:warningannotations:summary:积压消息超过 100 万 (命名空间/主题: {{ $labels.namespace }}/{{ $labels.topic }})-alert:PulsarHighBookieWriteLatencyexpr:histogram_quantile(0.99,rate(bookie_ADD_ENTRY_LATENCY_bucket[5m]))0.5for:5mlabels:severity:warningannotations:summary:Bookie 写 P99 延迟超过 500ms-alert:PulsarStorageCapacityLowexpr:(pulsar_storage_size / pulsar_storage_allocated_size)0.85for:10mlabels:severity:criticalannotations:summary:Broker 存储使用率超过 85%-alert:PulsarNoActiveBrokerexpr:sum(up{jobpulsar-broker}) 0for:1mlabels:severity:criticalannotations:summary:所有 Pulsar Broker 均已下线服务完全不可用可根据业务特点增加 ZK 延迟、消费者数量为 0 等告警。7. 进阶多集群、安全与性能优化7.1 多集群 / 跨地域监控Pulsar 支持内置的跨地域复制。你只需为每个数据中心部署一套 Prometheus或在中央 Prometheus 中通过远程写入汇聚同时保持cluster标签区分。Grafana 面板中的变量可以切换集群。7.2 TLS 与认证Prometheus 抓取 Pulsar 的/metrics端点可以配置 TLSscrape_configs:-job_name:pulsar-brokerscheme:httpstls_config:ca_file:/path/to/ca-cert.pembasic_auth:username:prometheuspassword:monitoring_passPulsar 可以通过broker.conf配置metricsAuthentication以要求客户端证书或 token。生产环境务必开启。7.3 指标量控制Pulsar 的主题和消费者/生产者级指标会产生大量时间序列特别是多租户环境。可以使用 Prometheus 的metric_relabel_configs丢弃不关心的标签或在 Pulsar Broker 中配置prometheusMetricsServletInclude/exclude过滤。例如只保留特定命名空间metric_relabel_configs:-source_labels:[namespace]regex:public/default|myappaction:keep7.4 函数与连接器监控Pulsar Functions / Sink / Source 作为独立的 Worker 进程默认也暴露/metrics。为它们配置单独的抓取 Job指标前缀通常为pulsar_function_*。可以监控函数调用速率、错误数、处理延迟等。8. 安全与运维建议端口隔离Broker 的 8080 端口既提供 Admin API 也提供 Prometheus 指标通过防火墙或配置metricsServletPath与 admin 路径分离或仅限 Prometheus 服务器访问。Bookie 磁盘监控至关重要Bookie 磁盘满会立即转为只读直接导致写入失败。结合node_exporter的磁盘使用率告警双保险。定期升级Pulsar 新版本会持续优化指标命名、增加直方图建议保持版本在 2.9 以上。至此你的 Pulsar 全组件——从 Broker 消息速率、Bookie 写延迟到跨地域复制状态——都被统一接入 Prometheus 体系。任何消息堆积、存储不足或节点异常都会在 Grafana 上一目了然并实时告警真正实现云原生消息平台的可观测性闭环。结合已有的主机与应用监控你的数据管道将坚如磐石。