如何通过JMX Exporter导出Tomcat连接池NumActive等指标?
解决Tomcat连接池JMX指标无法被Prometheus抓取的问题
你的问题出在JMX Exporter的pattern配置格式错误,以下是修正方案和说明:
问题分析
原配置里的pattern写法不符合JMX Exporter的规则:
- 错误使用了
<>来连接MBean名称和属性,这不是JMX Exporter的语法 - 匹配逻辑没有正确对应MBean的ObjectName结构
正确配置示例
方式1:精确匹配指定数据源的指标
- pattern: 'Catalina:type=DataSource,class=javax.sql.DataSource,name="jdbc/postgres",connectionpool=connections' name: jvm_process_jdbc labels: datasource: "postgres" attrNameSnakeCase: true type: GAUGE
这个配置会把该MBean下的所有属性(比如NumIdle、NumActive、MaxTotal等)自动转为蛇形命名的指标,比如jvm_process_jdbc_num_idle{datasource="postgres"}。
方式2:正则匹配所有Tomcat数据源(更灵活)
如果有多个数据源,推荐用正则批量匹配:
- pattern: 'Catalina:type=DataSource,class=javax.sql.DataSource,name="(.*)",connectionpool=connections' name: jvm_process_jdbc labels: datasource: "$1" attrNameSnakeCase: true type: GAUGE
这样会自动提取数据源名称作为标签,同时把所有属性转为Prometheus格式的指标。
关键配置说明
pattern:匹配MBean的ObjectName,用正则时可以捕获分组作为标签值attrNameSnakeCase: true:自动将驼峰命名的JMX属性(比如NumIdle)转为Prometheus常用的蛇形命名(num_idle)labels:添加自定义标签,方便区分不同数据源的指标- 如果只想抓取特定属性(比如只抓NumIdle),可以在pattern后追加属性匹配:
- pattern: 'Catalina:type=DataSource,class=javax.sql.DataSource,name="jdbc/postgres",connectionpool=connections,attr=NumIdle' name: jvm_process_jdbc_num_idle labels: datasource: "postgres" type: GAUGE
验证步骤
- 重启应用和JMX Exporter后,访问
/metrics页面,搜索jvm_process_jdbc相关指标 - 如果还是没出现,打开JMX Exporter的debug日志(启动时添加
-Djmxexporter.debug=true),查看是否正确识别了目标MBean - 确认JConsole里的MBean属性名称和拼写完全一致(注意大小写)
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

