如何配置JMX Exporter过滤复合属性内的指定指标?
问题:JMX Exporter能否过滤复合属性内的特定子属性?
我正在使用JMX Exporter从JMX MBean tableau.health.jmx:name=vizqlservice 采集指标,该MBean包含一个名为PerformanceMetrics的复合属性,内部包含ActiveSession、SessionsInFlightCount、IdleSessionsIdleCount等数百个子属性。
我仅希望暴露其中选定的部分子属性,但从JMX Exporter 0.20文档中了解到,当前仅支持排除整个属性,而此处仅存在单个PerformanceMetrics属性。
以下是我使用的JMX Exporter配置:
# jmxexporter_vizqlserver1_config.yaml --- jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:8893/jmxrmi includeObjectNames: - "java.lang:type=Memory,*" - "tableau.health.jmx:*" excludeObjectNameAttributes: "java.lang:type=Memory": - NonHeapMemoryUsage - Verbose - ObjectPendingFinalizationCount
启动命令:
java -jar jmx_prometheus_httpserver-0.20.0.jar 12345 jmxexporter_vizqlserver1_config.yaml
验证命令:
curl -s http://localhost:12345|grep -e "^(tableau|java)_" # 输出的指标数量过多
请问是否可以直接通过JMX Exporter过滤复合属性内的特定子属性?
解决方案
JMX Exporter 0.20版本本身不支持直接过滤复合属性内的子属性,但可以通过以下两种方式实现需求:
1. 使用rules配置精准过滤指标
通过配置rules字段,匹配并保留你需要的子属性对应的Prometheus指标,其余指标自动被忽略。示例配置如下:
--- jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:8893/jmxrmi includeObjectNames: - "java.lang:type=Memory,*" - "tableau.health.jmx:*" excludeObjectNameAttributes: "java.lang:type=Memory": - NonHeapMemoryUsage - Verbose - ObjectPendingFinalizationCount rules: # 仅保留PerformanceMetrics下指定的三个子属性对应的指标 - pattern: 'tableau_health_jmx_name_vizqlservice_PerformanceMetrics_(ActiveSession|SessionsInFlightCount|IdleSessionsIdleCount)' action: keep
2. 自定义Collector扩展(进阶方案)
如果规则匹配的灵活性不足,可以编写自定义Java Collector,直接从JMX中读取PerformanceMetrics复合属性,只提取需要的子属性并转换为Prometheus指标,替换默认的采集逻辑。这种方式需要具备基础Java开发能力,但能实现更精准的控制。
内容的提问来源于stack exchange,提问作者RubenLaguna
相关产品推荐
相关产品推荐

