【运维监控】Prometheus+grafana监控tomcat运行情况

发布于:2024-09-18 ⋅ 阅读:(139) ⋅ 点赞:(0)


  • 本示例通过jmx_exporter收集tomcat的运行情况,将数据收集到prometheus中,然后通过grafana的dashboard导入模板进行可视化。
  • 本示例分为四个部分,即prometheus、grafana部署、tomcat与jmx_exporter配置和最后的集成。
  • 说明:jmx_exporter需要与tomcat在同一台机器上部署,这个好理解,因为需要通过jmx代理运行tomcat服务。

关于java应用的监控本系列有文章如下:
【运维监控】influxdb 2.0+telegraf 监控tomcat 8.5运行情况
【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况
【运维监控】Prometheus+grafana监控tomcat运行情况
【运维监控】Prometheus+grafana监控spring boot 3运行情况

一、prometheus

参考:【运维监控】prometheus+node exporter+grafana 监控linux机器运行情况关于prometheus的部署。

二、grafana

参考:【运维监控】prometheus+node exporter+grafana 监控linux机器运行情况 关于grafana的部署。

三、tomcat与jmx_exporter配置

1、下载jmx_exporter

用于集成到tomcat实施监控指标采集,通过代理实现jmx信息的收集。
下载地址:https://github.com/prometheus/jmx_exporter/tree/release-1.0.1/docs
下载版本:jmx_prometheus_javaagent-1.0.1.jar

2、部署jmx_exporter

将下载的jmx_prometheus_javaagent-1.0.1.jar文件放在tomcat所在机器的任一位置即可,本示例放在/usr/local/apache-tomcat-8.5.30/jmx_exporter目录下。

3、添加tomcat的配置信息

可自己编写,也可以在下面地址下载(可直接使用)
https://github.com/prometheus/jmx_exporter/blob/main/example_configs/tomcat.yml
下载后的源码如下(文件名称随意,存放位置随意),本示例存放位置在/usr/local/apache-tomcat-8.5.30/jmx_exporter目录下。

# https://grafana.com/grafana/dashboards/8704-tomcat-dashboard/
---   
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem", "Catalina:*"]
blacklistObjectNames: []
rules:
  - pattern: 'Catalina<type=Server><>serverInfo: (.+)'
    name: tomcat_serverinfo
    value: 1
    labels:
      serverInfo: "$1"
    type: COUNTER
  - 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|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|connectionCount|acceptCount|acceptorThreadCount|pollerThreadCount|maxThreads|minSpareThreads):'
    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   

4、修改tomcat的启动文件

修改/usr/local/apache-tomcat-8.5.30/bin目录下的catalina.sh文件中的JAVA_OPTS变量,加入javaagent相关配置,增加内容“-javaagent:/usr/local/apache-tomcat-8.5.30/jmx_exporter/jmx_prometheus_javaagent-1.0.1.jar=12345:/usr/local/apache-tomcat-8.5.30/jmx_exporter/tomcat.yml”,路径需要写绝对路径,所以上述的jar和yml文件放在哪里都无所谓。12345是端口,可以随意设置。修改后的JAVA_OPTS变量属性如下。

JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask` -javaagent:/usr/local/apache-tomcat-8.5.30/jmx_exporter/jmx_prometheus_javaagent-1.0.1.jar=12345:/usr/local/apache-tomcat-8.5.30/jmx_exporter/tomcat.yml"

5、重启tomcat及验证

重启tomcat后,验证tomcat是否正常启动以及验证指标是否收集到即可。
在浏览器中输入地址http://server4:12345/,出现如下页面
在这里插入图片描述
点击“/metrics”链接(http://server4:12345/metrics)出现如下页面即成功。
在这里插入图片描述

6、其他

  • 如果是jar运行环境,执行命令如下
# jmx_prometheus_javaagent-1.0.1.jar和yml文件根据自己需要进行设置
java -javaagent:./jmx_prometheus_javaagent-1.0.1.jar=12345:tomcat.yml -jar yourJar.jar
  • 如果是war运行环境,参考tomcat的部署方式

四、集成prometheus与grafana监控tomcat

1、配置prometheus

/usr/local/bigdata/prometheus-2.54.0.linux-amd64/prometheus.yml配置文件增加关于jmx_exporter的配置,即如下:

  - job_name: "tomcat_node_10.44"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["server4:12345"]

关于本示例的完整配置文件示例如下。

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["server4:9090"]

  - job_name: "tomcat_node_10.44"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["server4:12345"]

完成以上配置后,重启prometheus即可。

验证prometheus是否配置成功比较简单,打开prometheus的web UI界面,点击“Status”下的“Targets”链接出现配置的job_name,点击job_name对应的“show more”按钮,再点击“Endpoints”对应的链接,如果有相应的监控指标数据即可。如下2个图所示。
prometheus targets页面
在这里插入图片描述

2、导入grafana模板

模板地址:https://grafana.com/grafana/dashboards/19532-apache-tomcat/
导入模板示例图如下:
在这里插入图片描述

3、验证

在grafana的dashboard中查看添加的“Apache Tomcat”dashboard,如下图。
在这里插入图片描述
以上,完成了集成操作。


网站公告

今日签到

点亮在社区的每一天
去签到