为何配置全局匹配规则的JMX Exporter无法采集Tomcat相关指标
问题原因
你当前遇到的指标缺失问题核心由以下两个常见原因导致:
- JMX Exporter运行模式冲突
你在配置文件中填写了hostPort: localhost:5555参数,该参数是JMX Exporter远程抓取模式的配置项。但你是通过-javaagent参数将Exporter和目标Tomcat进程同进程启动的,该场景属于Java Agent模式,不需要配置hostPort、username、password三个参数。
添加远程模式参数后,Exporter会放弃同进程直接读取MBean的逻辑,转而通过网络连接本地5555 JMX端口抓取指标。而你配置的JMX端口参数和Javaagent是在同一条启动参数中生效的,Exporter启动时Tomcat的JMX端口、以及Catalina相关的MBean还没有完成初始化注册,就会出现全局匹配也抓不到Tomcat指标的问题。 - 版本兼容问题
你使用的0.15.0版本JMX Exporter存在已知的Catalina域MBean扫描遗漏Bug,部分场景下全局通配规则无法匹配到Tomcat注册的MBean。
修复方案
- 首先修改JMX Exporter配置文件
config.yaml,删除远程模式相关的三个配置项,仅保留匹配规则即可:
rules: - pattern: ".*"
- 可以同步优化启动参数,删除冗余的JMX远程端口配置,Java Agent模式不需要开放JMX远程端口即可直接读取同进程的所有MBean,优化后的启动参数参考:
JAVA_TOOL_OPTIONS="-javaagent:./jmx_prometheus_javaagent-0.15.0.jar=9404:config.yaml -Djava.security.egd=file:/dev/./urandom -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/camunda"
- 如果优化后仍未获取到Catalina相关指标,可以升级JMX Exporter到0.18.0及以上版本,或者在规则最前面新增Catalina域的专用匹配规则:
rules: - pattern: "Catalina.*" - pattern: ".*"
修复完成后重启进程,访问http://localhost:9404/metrics搜索Catalina前缀的指标即可验证是否采集成功。
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

