我正在尝试公开我的一些 Spring 应用程序指标(Spring)。指标主要是数据库连接指标。为此,我首先配置 hikari 连接池,然后使用 jmx。要将指标导出到 prometheus,然后使用 Grafana 对其进行可视化,我尝试使用 jmx_prometheus_exporter [https://github.com/prometheus/jmx_exporter][1]
我下载了 jmx_exporter jar,然后在我的 Tomcat8 服务中添加了这一行(在文件夹 init.d 中)
导出 JAVA_OPTS="$JAVA_OPTS -javaagent:/home/monitoring/jmx_prometheus_javaagent-0.3.0.jar=9095:/home/monitoring/config-jmx-tomcat.yaml"
这是 tomcat 的配置文件(config-jmx-tomcat.yaml)
lowercaseOutputLabelNames: true lowercaseOutputName: true rules:
- pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):' name: tomcat_$3_total labels:
port: "$2"
protocol: "$1" help: Tomcat global $3 type: COUNTER
- pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount):' name: tomcat_servlet_$3_total labels:
module: "$1"
servlet: "$2" help: Tomcat servlet $3 total type: COUNTER
- pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):' name: tomcat_threadpool_$3 labels:
port: "$2"
protocol: "$1" help: Tomcat threadpool $3 type: GAUGE
- pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):' name: tomcat_session_$3_total labels:
context: "$2"
host: "$1" help: Tomcat session $3 total type: COUNTER
在我的应用程序中,这就是我定义连接池和 MbeanServer 的方式....
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (foo)");
HikariPoolMXBean poolProxy = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class);
int idleConnections = poolProxy.getIdleConnections();
当我尝试访问 localhost:9095/metrics 时,我什么也没找到,catalina 日志、tomcat 日志也没有显示任何内容。
我的问题是:
看看这个答案是否有帮助如何通过JMX导出导出Tomcat的连接池指标,例如NumActive,NumIdle,MaxTotal?
您必须定义连接池指标的对象名称和模式。首先,您必须知道 JMX 公开的 DataSource 或 ConnectionPool MBean。您可以通过使用 JConsole 或 jmxterm 浏览公开的 mbean 来获得该信息。然后你必须根据它设置规则模式。