wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.0/jmx_prometheus_javaagent-0.17.0.jar -O /opt/jmx_exporter/jmx_prometheus.jar
创建/opt/jmx_exporter/tomcat.yml
文件,内容如下:
---
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 thread pool $3
type: GAUGE
- pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(activeSessions|expiredSessions|rejectedSessions|sessionCounter):'
name: tomcat_session_$3_total
labels:
context: "$2"
host: "$1"
help: Tomcat session $3 total
type: COUNTER
修改Tomcat启动脚本(通常是catalina.sh
或setenv.sh
),在JAVA_OPTS中添加:
JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/jmx_exporter/jmx_prometheus.jar=9090:/opt/jmx_exporter/tomcat.yml"
其中9090
是JMX Exporter暴露指标的端口,可根据需要修改。
systemctl restart tomcat
访问http://<tomcat-server>:9090/metrics
,应该能看到Prometheus格式的指标数据。
在Prometheus的配置文件prometheus.yml
中添加以下内容:
scrape_configs:
- job_name: 'tomcat'
static_configs:
- targets: ['<tomcat-server>:9090']
metrics_path: /metrics
curl -X POST http://localhost:9090/-/reload
或重启Prometheus服务。
访问Prometheus的Web界面,查询tomcat_
开头的指标,确认数据是否正常。
tomcat_threadpool_currentThreadsBusy
tomcat_servlet_processingTime_total
tomcat_session_activeSessions_total
tomcat_global_processingTime_total
指标未暴露:
/metrics
端点是否可访问Prometheus无法采集:
指标不全:
通过以上步骤,您可以成功配置Prometheus监控Tomcat的运行状态,获取线程池、会话、请求处理等关键指标。