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

如何通过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

验证步骤

  1. 重启应用和JMX Exporter后,访问/metrics页面,搜索jvm_process_jdbc相关指标
  2. 如果还是没出现,打开JMX Exporter的debug日志(启动时添加-Djmxexporter.debug=true),查看是否正确识别了目标MBean
  3. 确认JConsole里的MBean属性名称和拼写完全一致(注意大小写)

内容的提问来源于stack exchange,提问作者Eljah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:34:59