插件窝 干货文章 通过prometheus监控Tomcat运行状态的操作流程

通过prometheus监控Tomcat运行状态的操作流程

Tomcat Prometheus Exporter JMX 58    来源:    2025-04-01

通过Prometheus监控Tomcat运行状态的完整操作流程

一、准备工作

1. 环境要求

  • 已安装运行的Tomcat服务器
  • 已部署的Prometheus服务
  • 可选:Grafana用于可视化展示

2. 所需组件

  • JMX Exporter:用于将Tomcat的JMX指标转换为Prometheus格式
  • Prometheus JMX Exporter配置文件

二、操作步骤

1. 下载JMX Exporter

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

2. 创建JMX Exporter配置文件

创建/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

3. 配置Tomcat使用JMX Exporter

修改Tomcat启动脚本(通常是catalina.shsetenv.sh),在JAVA_OPTS中添加:

JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/jmx_exporter/jmx_prometheus.jar=9090:/opt/jmx_exporter/tomcat.yml"

其中9090是JMX Exporter暴露指标的端口,可根据需要修改。

4. 重启Tomcat服务

systemctl restart tomcat

5. 验证JMX Exporter是否正常工作

访问http://<tomcat-server>:9090/metrics,应该能看到Prometheus格式的指标数据。

6. 配置Prometheus采集Tomcat指标

在Prometheus的配置文件prometheus.yml中添加以下内容:

scrape_configs:
  - job_name: 'tomcat'
    static_configs:
      - targets: ['<tomcat-server>:9090']
    metrics_path: /metrics

7. 重新加载Prometheus配置

curl -X POST http://localhost:9090/-/reload

或重启Prometheus服务。

8. 验证Prometheus是否成功采集数据

访问Prometheus的Web界面,查询tomcat_开头的指标,确认数据是否正常。

三、可选:Grafana可视化配置

  1. 在Grafana中导入Tomcat仪表板(如ID 8563)
  2. 或创建自定义仪表板,使用以下常用指标:
    • tomcat_threadpool_currentThreadsBusy
    • tomcat_servlet_processingTime_total
    • tomcat_session_activeSessions_total
    • tomcat_global_processingTime_total

四、常见问题排查

  1. 指标未暴露

    • 检查JMX Exporter是否正常启动
    • 验证/metrics端点是否可访问
    • 检查Tomcat日志是否有错误
  2. Prometheus无法采集

    • 检查网络连通性
    • 验证Prometheus配置中的目标地址是否正确
    • 检查Prometheus日志
  3. 指标不全

    • 检查JMX Exporter配置文件是否包含所需指标
    • 确认Tomcat的JMX中确实有这些指标

五、安全建议

  1. 限制对JMX Exporter端口的访问
  2. 考虑使用认证或TLS加密
  3. 在生产环境中使用专用监控账户

通过以上步骤,您可以成功配置Prometheus监控Tomcat的运行状态,获取线程池、会话、请求处理等关键指标。