使用Prometheus監(jiān)控Tomcat等java應(yīng)用的狀態(tài)
5月應(yīng)用服務(wù)出現(xiàn)問(wèn)題,當(dāng)別的小伙伴問(wèn)我,有沒(méi)有Tomcat等應(yīng)用狀態(tài)的監(jiān)控的時(shí)候,我有點(diǎn)兒尷尬。所以趕緊抽空部署一下。
在配置之前,就當(dāng)已經(jīng)會(huì)安裝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
其實(shí)配置的時(shí)候,可以很簡(jiǎn)單的寫成下面的格式如下
#vim /usr/local/prometheus/jmx-exporter.yaml --- rules: - pattern: '.*'
不過(guò),個(gè)人覺(jué)得上面這種配置,可以快速的上手,正式使用的時(shí)候,不推薦這樣,因?yàn)檫@樣會(huì)導(dǎo)致prometheus收集的指標(biāo)太多了,對(duì)于存儲(chǔ)和網(wǎng)絡(luò)都會(huì)有些許的影響,特別是手機(jī)的主機(jī)特別多的時(shí)候。
比較推薦官方給的配置,如下:
#官方推薦配置實(shí)例:https://github.com/prometheus/jmx_exporter/blob/master/example_configs/tomcat.yml #將文件下載下來(lái)放到下面文件中/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的時(shí)候,網(wǎng)上很多人給的都是下面這個(gè)配置:
修改文件: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"
這個(gè)配置在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這個(gè),在Tomcat7 和8 中都是好用的。
如果是java -jar的java包的話,啟動(dòng)命令如下:
java -javaagent:/usr/local/prometheus/jmx_prometheus_javaagent-0.13.0.jar=20000:/usr/local/prometheus/jmx-exporter.yaml -jar yourJar.jar
啟動(dòng)java應(yīng)用,然后使用ps -ef |grep java 命令來(lái)檢查啟動(dòng)的java應(yīng)用中是否有 -javaagent。
如果有就表示正常,如果沒(méi)有,請(qǐng)自行排查問(wèn)題所在,比如路徑不對(duì)等。
四、prometheus的配置
我的prometheus使用的是file_sd文件自動(dòng)發(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: 中運(yùn)系統(tǒng) project: 大運(yùn)系統(tǒng) service: zto-sitefintask-export team: 研發(fā)一部 env: 生產(chǎn) developer: 聶青 maintainer: 陳\綱 targets: - 192.168.17.15:8024 - labels: app: 中運(yùn)系統(tǒng) project: 大運(yùn)系統(tǒng) service: zto-fintask-export team: 研發(fā)一部 env: 生產(chǎn) developer: 聶綠水青 maintainer: 陳振綱 targets: - 192.168.72.19:8023
當(dāng)然了,也可以使用一臺(tái)一臺(tái)的寫到prometheus配置文件里,如下:
// prometheus.yml 配置文件內(nèi)容 - job_name: 'jvm_monitor' static_configs: - targets: ['192.168.1.200:20000'] labels: appname: 'tomcat_xxx'
當(dāng)這些都配置的時(shí)候,重新加載prometheus的配置文件,使配置生效。
五、配置grafana
grafana的dashboards編號(hào)是8563,添加到grafana中即可。之后,就完成了tomcat的監(jiān)控,如下圖,稍微做了一點(diǎn)兒調(diào)整。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線圖)
用Jfree實(shí)現(xiàn)條形柱狀圖表,java代碼實(shí)現(xiàn)??山?jīng)常用于報(bào)表的制作,代碼自動(dòng)生成后可以自由查看??梢宰杂膳渲脠D表的各個(gè)屬性,用來(lái)達(dá)到自己的要求和目的。本文給大家介紹使用java實(shí)現(xiàn)各種數(shù)據(jù)統(tǒng)計(jì)圖(柱形圖,餅圖,折線圖),需要的朋友可以參考下2015-10-10Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息
這篇文章主要給大家介紹了關(guān)于Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11java利用正則表達(dá)式處理特殊字符的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于java利用正則表達(dá)式處理特殊字符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Spring框架配置java web實(shí)現(xiàn)實(shí)例化
這篇文章主要介紹了Spring框架配置java web實(shí)現(xiàn)實(shí)例化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Java開(kāi)發(fā)環(huán)境配置JDK超詳細(xì)整理(適合新手入門)
這篇文章主要給大家介紹了關(guān)于Java開(kāi)發(fā)環(huán)境配置JDK超詳細(xì)整理的相關(guān)資料,非常適合新手入門,JDK是Java語(yǔ)言的軟件開(kāi)發(fā)工具包,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序,需要的朋友可以參考下2023-11-11SpringBoot中使用websocket出現(xiàn)404的解決方法
在Springboot中使用websocket時(shí),本地開(kāi)發(fā)環(huán)境可以正常運(yùn)行,但部署到服務(wù)器環(huán)境出現(xiàn)404問(wèn)題,所以本文小編講給大家詳細(xì)介紹一下SpringBoot中使用websocket出現(xiàn)404的解決方法,需要的朋友可以參考下2023-09-09Mybatis order by 動(dòng)態(tài)傳參出現(xiàn)的問(wèn)題及解決方法
今天,我正在愉快地CRUD,突然發(fā)現(xiàn)出現(xiàn)一個(gè)Bug,我們來(lái)看看是怎么回事吧!接下來(lái)通過(guò)本文給大家介紹Mybatis order by 動(dòng)態(tài)傳參出現(xiàn)的一個(gè)小bug,需要的朋友可以參考下2021-07-07idea?與?maven?使用過(guò)程中遇到的問(wèn)題及解決方案
最近將IDEA 升級(jí)到 IntelliJ IDEA 2021.3.2,在將maven項(xiàng)目導(dǎo)入IDEA后,maven build時(shí)報(bào)異常,這個(gè)問(wèn)題是IntelliJ IDEA 2021.3.2 不兼容導(dǎo)致的,下面小編給大家?guī)?lái)了idea?與?maven?使用過(guò)程中遇到的問(wèn)題及解決方案,感興趣的朋友一起看看吧2022-05-05