使用Prometheus監(jiān)控Tomcat等java應(yīng)用的狀態(tài)
5月應(yīng)用服務(wù)出現(xiàn)問題,當(dāng)別的小伙伴問我,有沒有Tomcat等應(yīng)用狀態(tài)的監(jiān)控的時候,我有點兒尷尬。所以趕緊抽空部署一下。
在配置之前,就當(dāng)已經(jīng)會安裝jdk和tomcat了。
一、下載jmx_exporter
#linux下 cd /usr/local/prometheus wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar
二、配置jmx_exporter
其實配置的時候,可以很簡單的寫成下面的格式如下
#vim /usr/local/prometheus/jmx-exporter.yaml --- rules: - pattern: '.*'
不過,個人覺得上面這種配置,可以快速的上手,正式使用的時候,不推薦這樣,因為這樣會導(dǎo)致prometheus收集的指標(biāo)太多了,對于存儲和網(wǎng)絡(luò)都會有些許的影響,特別是手機(jī)的主機(jī)特別多的時候。
比較推薦官方給的配置,如下:
#官方推薦配置實例:https://github.com/prometheus/jmx_exporter/blob/master/example_configs/tomcat.yml
#將文件下載下來放到下面文件中/usr/local/prometheus/jmx-exporter.yaml
#cat /usr/local/prometheus/jmx-exporter.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三、配置tomcat
在配置Tomcat的時候,網(wǎng)上很多人給的都是下面這個配置:
修改文件:tomcat/bin/catalina.sh 或者win下修改tomcat/bin/catalina.bat
JAVA_OPTS=" -javaagent:/usr/local/prometheus/jmx_prometheus_javaagent-0.13.0.jar=20000:/usr/local/prometheus/jmx-exporter.yaml"
這個配置在tomcat8中挺好用的,centos6.9版本的tomcat7 和tomcat8 也都挺好用的。
但是centos6.5的tomcat7中,不好用。需要使用下面的配置
]# vim tomcat/bin/catalina.sh CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/prometheus/jmx_prometheus_javaagent-0.13.0.jar=20000:/usr/local/prometheus/jmx-exporter.yaml";exportCATALINA_OPTS # for win tomcat/bin/catalina.bat
恩,catalina_opts這個,在Tomcat7 和8 中都是好用的。
如果是java -jar的java包的話,啟動命令如下:
java -javaagent:/usr/local/prometheus/jmx_prometheus_javaagent-0.13.0.jar=20000:/usr/local/prometheus/jmx-exporter.yaml -jar yourJar.jar
啟動java應(yīng)用,然后使用ps -ef |grep java 命令來檢查啟動的java應(yīng)用中是否有 -javaagent。
如果有就表示正常,如果沒有,請自行排查問題所在,比如路徑不對等。
四、prometheus的配置
我的prometheus使用的是file_sd文件自動發(fā)現(xiàn)。
所以配置如下
- job_name: "jvm_monitor"
file_sd_configs:
- refresh_interval: 30s
files:
- ./conf/jvm_monitor/*.json - job_name: 'JVM/druid'
metrics_path: /metrics
honor_labels: true
file_sd_configs:
- files:
- targets/jvm/druid.yaml
[apps@HZPM004149096 jvm]$ pwd
/data/docker/prometheus/conf/targets/jvm
[apps@HZPM004149096 jvm]$ cat druid.yaml
- labels:
app: 中運系統(tǒng)
project: 大運系統(tǒng)
service: zto-sitefintask-export
team: 研發(fā)一部
env: 生產(chǎn)
developer: 聶青
maintainer: 陳\綱
targets:
- 192.168.17.15:8024
- labels:
app: 中運系統(tǒng)
project: 大運系統(tǒng)
service: zto-fintask-export
team: 研發(fā)一部
env: 生產(chǎn)
developer: 聶綠水青
maintainer: 陳振綱
targets:
- 192.168.72.19:8023當(dāng)然了,也可以使用一臺一臺的寫到prometheus配置文件里,如下:
// prometheus.yml 配置文件內(nèi)容
- job_name: 'jvm_monitor'
static_configs:
- targets: ['192.168.1.200:20000']
labels:
appname: 'tomcat_xxx'當(dāng)這些都配置的時候,重新加載prometheus的配置文件,使配置生效。
五、配置grafana
grafana的dashboards編號是8563,添加到grafana中即可。之后,就完成了tomcat的監(jiān)控,如下圖,稍微做了一點兒調(diào)整。

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java線程并發(fā)工具類CountDownLatch原理及用法
這篇文章主要介紹了Java線程并發(fā)工具類CountDownLatch原理及用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
詳解JDK 5 Annotation 注解之@Target的用法介紹
這篇文章主要介紹了詳解JDK 5 Annotation 注解之@Target的用法介紹,需要的朋友可以參考下2016-02-02
Java實現(xiàn)十秒向MySQL插入百萬條數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Java如何實現(xiàn)十秒向MySQL插入百萬條數(shù)據(jù),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定借鑒價值,需要的可以參考一下2022-11-11
SpringBoot集成Swagger使用SpringSecurity控制訪問權(quán)限問題
這篇文章主要介紹了SpringBoot集成Swagger使用SpringSecurity控制訪問權(quán)限問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
JAVA對象和字節(jié)數(shù)組互轉(zhuǎn)操作
這篇文章主要介紹了JAVA對象和字節(jié)數(shù)組互轉(zhuǎn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java中Map與字符串的互轉(zhuǎn)實現(xiàn)過程
本文介紹了Map與String之間的轉(zhuǎn)換方法,包括默認(rèn)toString方法、自定義解析方法和JSON格式轉(zhuǎn)換,還比較了不同方法的性能,并提出了最佳實踐建議2026-01-01
SpringBoot Redis實現(xiàn)接口冪等性校驗方法詳細(xì)講解
這篇文章主要介紹了SpringBoot Redis實現(xiàn)接口冪等性校驗方法,近期一個老項目出現(xiàn)了接口冪等性校驗問題,前端加了按鈕置灰,依然被人拉著接口參數(shù)一頓輸出,還是重復(fù)調(diào)用了接口,通過復(fù)制粘貼,完成了后端接口冪等性調(diào)用校驗2022-11-11
SpringBoot之Helloword 快速搭建一個web項目(圖文)
這篇文章主要介紹了SpringBoot之Helloword 快速搭建一個web項目(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12

