- 运维监控系列文章入口:【运维监控】系列文章汇总索引
文章目录
- 一、prometheus
- 二、grafana
- 三、tomcat与jmx_exporter配置
- 1、下载jmx_exporter
- 2、部署jmx_exporter
- 3、添加tomcat的配置信息
- 4、修改tomcat的启动文件
- 5、重启tomcat及验证
- 6、其他
- 四、集成prometheus与grafana监控tomcat
- 1、配置prometheus
- 2、导入grafana模板
- 3、验证
- 本示例通过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个图所示。
2、导入grafana模板
模板地址:https://grafana.com/grafana/dashboards/19532-apache-tomcat/
导入模板示例图如下:
3、验证
在grafana的dashboard中查看添加的“Apache Tomcat”dashboard,如下图。
以上,完成了集成操作。