You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:25:20