Pulsar JVM Dashboard中Zookeeper直接内存显示无数据问题咨询
可能原因及验证步骤
ZooKeeper未开启指标采集
检查ZooKeeper的zookeeper.conf配置,确认是否启用了Prometheus指标导出:- 确认
metricsProvider.className设置为org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider - 检查
metricsProvider.httpPort是否配置了有效端口(默认通常为7000,需匹配实际部署)
同时验证ZooKeeper启动参数是否包含JMX相关配置,比如-Dcom.sun.management.jmxremote,确保JVM指标能被正常采集。
- 确认
Prometheus抓取配置缺失或错误
查看Prometheus的配置文件,确认是否添加了ZooKeeper的抓取目标,示例配置片段:- job_name: 'zookeeper' static_configs: - targets: ['<zk-node-ip>:<metrics-port>']确认目标地址、端口与ZooKeeper实际暴露的metrics端口一致,并且Prometheus服务能正常访问该端口。
Grafana面板查询语句不匹配实际指标
访问ZooKeeper的metrics端点(如http://<zk-host>:<metrics-port>/metrics),查看是否存在直接内存相关指标(通常为jvm_direct_memory_used_bytes或jvm_direct_memory_max_bytes)。对比Grafana面板中的查询表达式,确认指标名称、标签过滤条件是否与实际暴露的指标一致。版本兼容性问题
Pulsar 2.9.2配套的Grafana面板可能基于特定ZooKeeper版本的指标定义,而ZooKeeper 3.5.5的指标输出可能存在差异。可以对比同版本Pulsar官方推荐的ZooKeeper版本(通常Pulsar 2.9.x推荐ZK 3.6.x),验证是否因版本差异导致指标未暴露。JVM参数限制
检查ZooKeeper的JVM启动参数,若未设置-XX:MaxDirectMemorySize,JVM可能不会暴露直接内存的有效指标;若设置了该参数但值为0,也会导致指标无数据。确认启动参数中是否包含合理的直接内存配置。
内容的提问来源于stack exchange,提问作者Lê Thế Dũng

