资讯动态

Apache Pulsar 集群监控指南:Prometheus 指标采集、Grafana 可视化与告警配置

发布时间:2026/9/29 5:21:11 来源:尧图企业网站定制
消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载本指南以 Apache Pulsar 官方文档version-2.3.1 的 deploy-monitoring.md为骨架系统讲解如何对 Pulsar 集群进行监控从 Broker、ZooKeeper、BookKeeper、Functions Worker 四大组件的指标采集到 Prometheus 抓取配置、Grafana 仪表盘搭建与告警规则设置。读完本文你将掌握通过pulsar-admin命令和 HTTP 端点获取 JSON/Prometheus 格式指标的方法并能在裸机与 Kubernetes 两种部署形态下完成一套完整的可观测性闭环。概述Pulsar 监控的两个层面监控一个 Pulsar 集群需要同时关注两类信息主题Topic的使用情况和集群各组件的整体健康状况。Pulsar 的指标体系覆盖 Broker、ZooKeeper、BookKeeper 与 Functions Worker 等核心组件并通过两种格式对外暴露JSON 格式适合通过pulsar-admin命令按需、交互式地查询快照数据Prometheus 格式适合被 Prometheus 定时抓取形成时间序列数据库再交给 Grafana 渲染仪表盘。需要特别说明的是所有消息速率message rate类指标每分钟更新一次在设计告警阈值和 Grafana 面板的时间粒度时需留意这一点。采集组件指标Broker 指标Broker 指标通过pulsar-admin的broker-stats命令组采集主要分为两类1目的地转储Destination dumps——包含每个独立主题的统计信息bin/pulsar-admin broker-stats destinations2Broker 指标Broker metrics——包含 Broker 自身信息以及按 namespace 聚合的主题统计bin/pulsar-admin broker-stats monitoring-metrics从 CmdBrokerStats.java 的源码可以看到broker-stats命令组实际注册了 5 个子命令除了文档提到的两个还有mbeans转储 JMX MBean 统计topics别名destinations转储主题统计allocator-stats转储指定分配器的内存统计load-report转储 Broker 负载报告。monitoring-metrics子命令还支持-i/--indent参数用于输出带缩进的、更易读的 JSON 结果。这些命令底层均通过PulsarAdmin.brokerStats()客户端接口实现可在脚本中调用broker-stats monitoring-metrics -i定期抓取 JSON 快照。此外聚合后的 Broker 指标还会以 Prometheus 格式暴露在 HTTP 端点http://$BROKER_ADDRESS:8080/metrics/这个端点由 PulsarPrometheusMetricsServlet.java 提供它在生成指标时支持按配置决定是否导出主题级、消费者级、生产者级指标并支持将 topic 与 partition 拆分为独立标签splitTopicAndPartitionLabel。生产环境中建议按 namespace 粒度聚合采集以控制时间序列数量详见下文「Dashboards」小节。ZooKeeper 指标Pulsar 自带的本地 ZooKeeper、配置存储configuration store服务器及其客户端均可以通过 Prometheus 暴露详细统计http://$LOCAL_ZK_SERVER:8000/metrics http://$GLOBAL_ZK_SERVER:8001/metrics本地 ZooKeeper 默认端口为8000配置存储global ZooKeeper默认端口为8001。如需修改默认端口可通过指定系统属性stats_server_port来调整例如-Dstats_server_port9000。BookKeeper 指标BookKeeper 的统计框架stats framework通过修改 conf/bookkeeper.conf 中的statsProviderClass来配置。仓库自带的默认配置已启用 Prometheus 导出器http://$BOOKIE_ADDRESS:8000/metrics对应的配置片段如下见 conf/bookkeeper.conf# Whether statistics are enabled # enableStatisticstrue # Stats Provider Class (if statistics are enabled) statsProviderClassorg.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider # Default port for Prometheus metrics exporter prometheusStatsHttpPort8000bookie 的默认 Prometheus 端口同为8000可通过修改conf/bookkeeper.conf中的prometheusStatsHttpPort变更。值得注意的是Presto 目录配置 conf/presto/catalog/pulsar.properties 中也出现了同类的pulsar.stats-provider-configs参数含prometheusStatsHttpPort、prometheusStatsHttpEnable等键说明这套 Stats Provider 机制在 Pulsar SQL 侧同样适用可按需开关 HTTP 服务与端口。Managed Cursor 确认状态的持久化指标Pulsar 的确认状态acknowledgment state优先持久化到 Ledger当写入 Ledger 失败时则回退持久化到 ZooKeeper。要跟踪确认过程的状态可以为 managed cursor 配置以下指标这些指标已加入 Prometheus 接口可在 Grafana 中监控查看brk_ml_cursor_persistLedgerSucceed(namespace, ledger_name, cursor_name:) brk_ml_cursor_persistLedgerErrors(namespace, ledger_name, cursor_name:) brk_ml_cursor_persistZookeeperSucceed(namespace, ledger_name, cursor_name:) brk_ml_cursor_persistZookeeperErrors(namespace, ledger_name, cursor_name:) brk_ml_cursor_nonContiguousDeletedMessagesRange(namespace, ledger_name, cursor_name:)这些指标由 ManagedCursorMetrics.java 生成。从源码可见其聚合逻辑遍历每个 ManagedLedger解析出namespace再遍历该 ledger 的全部 cursor以namespace、ledger_name、cursor_name三个维度组装成指标其中还额外包含brk_ml_cursor_writeLedgerSize、brk_ml_cursor_writeLedgerLogicalSize、brk_ml_cursor_readLedgerSize等读写大小指标。当brk_ml_cursor_persistLedgerErrors持续增长而brk_ml_cursor_persistZookeeperSucceed同时升高时说明确认状态正在频繁回退到 ZooKeeper通常意味着 Ledger 持久化路径存在异常值得告警关注。Functions Worker 指标Functions Worker 的指标同样以 JSON 格式导出其中包含 Functions Worker 的JVM 指标pulsar-admin functions-worker monitoring-metricsFunctions 与 Connectors 的指标可通过以下命令采集pulsar-admin functions-worker function-stats聚合后的 Functions/Connectors 指标以 Prometheus 格式暴露在http://$FUNCTIONS_WORKER_ADDRESS:$WORKER_PORT/metrics:其中FUNCTIONS_WORKER_ADDRESS与WORKER_PORT可在 conf/functions_worker.yml 中获取——仓库默认配置里workerPort: 6750TLS 端口workerPortTls: 6751见 conf/functions_worker.yml。从源码看Functions 的 Prometheus 采集链路由 FunctionsStatsGenerator.java 汇聚各 function runtime 的 Prometheus 指标JVM 指标则通过 Prometheus hotspot 默认导出见 WorkerStatsManager.java。在 Kubernetes runtime 下还可在 conf/functions_worker.yml 中为每个 function Pod 配置独立的metricsPort示例为9094留空则禁用该 Pod 的 Prometheus 暴露。配置 Prometheus采集到上述组件指标后使用Prometheus统一收集所有组件暴露的指标再通过Grafana仪表盘进行展示和监控。基本工作流为为各组件配置 Prometheus 抓取任务scrape job目标分别指向 Broker 的:8080/metrics、本地/全局 ZooKeeper 的:8000/:8001/metrics、Bookie 的:8000/metrics与 Functions Worker 的:6750/metrics设置合理的抓取间隔如 15s/30s与超时时间并利用组件节点列表实现自动发现将 Prometheus 作为数据源接入 Grafana导入仪表盘模板。部署形态差异裸机部署需要手动提供要被抓取的节点列表即把各 Broker、Bookie、ZooKeeper 节点逐一写入 Prometheus 的scrape_configsKubernetes 部署监控会自动配置Pulsar Helm chart 内置了监控相关组件与抓取配置。仪表盘Dashboards当收集时间序列统计时最大的挑战是防止数据附加的维度数量爆炸。因此实践中应只采集在 namespace 级别聚合的指标时间序列避免为主题下的每个 partition、每个 consumer 都保留独立序列否则 Prometheus 存储与查询开销会随集群规模急剧放大。Pulsar per-topic 仪表盘面向单主题维度的仪表盘说明参见 Pulsar Manager 管理指南仓库内对应文档。GrafanaGrafana 可基于 Prometheus 中存储的数据创建仪表盘。在 Kubernetes 上部署 Pulsar 时pulsar-grafanaDocker 镜像默认启用并内置了主要仪表盘。如需手动启动该镜像docker run -p3000:3000 \ -e PROMETHEUS_URLhttp://$PROMETHEUS_HOST:9090/ \ apachepulsar/pulsar-grafana:latest仓库的 grafana/dashboards 目录中自带一组可直接导入的仪表盘 JSON 模板覆盖了主要组件bookkeeper.json、jvm.json、namespace.json、prometheus.json、topic.json、zookeeper.json可作为裸机或现有 Kubernetes 集群导入 Grafana 的起点。常用的 Grafana 仪表盘示例包括pulsar-grafana展示运行在 Kubernetes 上的 Pulsar 集群在 Prometheus 中采集到的指标apache-pulsar-grafana-dashboard一套面向不同 Pulsar 组件同时支持 Kubernetes 与本地机器部署的 Grafana 仪表盘模板合集。告警规则Alerting Rules根据自身 Pulsar 环境的业务要求可以针对上述指标设置告警规则。告警规则基于 Prometheus 的规则引擎定义典型的告警维度包括Broker 层面brk_ml_cursor_persistLedgerErrors突增、pulsar_broker_topics_count逼近容量阈值、namespace 级消息速率异常BookKeeper 层面bookie 磁盘使用率、写入失败率、journal 延迟ZooKeeper 层面节点存活数、请求延迟Functions 层面function 实例重启次数、处理失败率。配置告警规则时请遵循 Prometheus 告警规则语法为每条规则设置合理的expr、for持续时间与labels/annotations并通过 Alertmanager 路由到邮件、Webhook 或即时通讯工具。小结与最佳实践按 namespace 聚合采集指标控制时间序列基数是 Pulsar 监控可扩展性的关键消息速率指标每分钟更新一次告警与面板的时间窗口应留出足够余量Managed cursor 指标是定位确认状态持久化问题的重要信号建议纳入默认监控面板裸机与 Kubernetes 的抓取配置方式不同前者手动提供节点列表后者由部署组件自动完成Grafana 仪表盘可复用Kubernetes 场景直接用pulsar-grafana镜像裸机场景可导入仓库 grafana/dashboards 中的 JSON 模板二次调整。本文涉及的配置与源码均在当前仓库中可查命令实现见 CmdBrokerStats.javaPrometheus 端点实现见 PulsarPrometheusMetricsServlet.java 与 ManagedCursorMetrics.java配置文件见 conf/bookkeeper.conf 与 conf/functions_worker.yml仪表盘模板见 grafana/dashboards。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐Apache Pulsar 集群监控部署指南指标采集、Prometheus 配置与 Grafana 可视化Apache Pulsar 集群监控部署指南指标采集、Prometheus 配置与 Grafana 可视化 Apache Pulsar 是一个分布式 pub消息队列后端流处理Apache Pulsar 集群监控实战指南从指标采集到 Prometheus 与 Grafana 告警配置Apache Pulsar 集群监控实战指南从指标采集到 Prometheus 与 Grafana 告警配置 本文是 Apache Pulsar 集群监控的完消息队列后端流处理Apache Pulsar 集群监控部署指南指标采集、Prometheus 集成与 Grafana 可视化Apache Pulsar 集群监控部署指南指标采集、Prometheus 集成与 Grafana 可视化 导读 本文基于 Apache Pulsar 官方消息队列后端流处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑