如何限制Prometheus JMX Exporter暴露的指标
解决JMX Exporter仅保留指定指标的问题
你的配置逻辑存在两个核心问题:
blacklistObjectNames: ["*:*"]仅排除了所有JMX MBean,但JMX Exporter默认会导出一批非MBean来源的内置指标(比如process_*、jmx_config_*这类),这些不受黑名单控制。- 你试图用
rules里的pattern匹配最终的Prometheus指标名,但这个pattern实际是用来匹配原始MBean的属性路径,而非转换后的指标名;同时黑名单已经排除了所有MBean,规则根本不会生效。
正确配置方案
要仅保留jvm_buffer_pool_used_bytes相关指标,需要结合白名单指定目标MBean+关闭默认内置指标+规则转换指标格式,配置示例如下:
lowercaseOutputLabelNames: true lowercaseOutputName: true # 关闭默认导出的process_*、jmx_config_*等非MBean指标 disableDefaultMetrics: true # 只允许采集JVM BufferPool的MBean whitelistObjectNames: ["java.lang:type=BufferPool,name=*"] rules: # 匹配BufferPool的Used属性,转换为目标指标名 - pattern: 'java.lang<type=BufferPool, name=(.+)><>Used' name: 'jvm_buffer_pool_used_bytes' labels: pool: "$1"
配置说明
disableDefaultMetrics: true:彻底关闭JMX Exporter自带的非MBean指标,避免无关数据干扰。whitelistObjectNames: ["java.lang:type=BufferPool,name=*"]:仅允许采集JVM中管理缓冲区池的MBean,精准缩小采集范围。- 规则部分:通过匹配MBean的属性路径,将原始JMX数据转换为你需要的
jvm_buffer_pool_used_bytes指标,并自动添加pool标签区分不同类型的缓冲区(比如direct、mapped)。
配置完成后重新启动应用,执行curl命令即可看到仅保留的目标指标:
$ k exec -it my-container -- curl localhost:5000 | grep -v '^#' jvm_buffer_pool_used_bytes{pool="direct"} 123456.0 jvm_buffer_pool_used_bytes{pool="mapped"} 789012.0
内容的提问来源于stack exchange,提问作者brandizzi
相关产品推荐
相关产品推荐

