好看的 網(wǎng)站正在建設(shè)中源碼福州短視頻seo網(wǎng)站
前言
大家好,我是沐風(fēng)曉月,今天我們又來探討一款使用prometheus監(jiān)控tomcat的另外一種形式:Java agent模式。
如果你想使用http server模式,請參考:【云原生】prometheus結(jié)合jmx exporter 的http server模式采集tomcat監(jiān)控實戰(zhàn)
本文中的是prometheus已經(jīng)安裝好,如果你還未安裝,可以參考上一篇文章:prometheus安裝及使用入門
文章目錄
- 前言
- 一. 實驗環(huán)境
- 二. 安裝tomcat8
- 2.1 安裝jdk8
- 2.2 安裝tomcat8.5
- 2.2.1 下載tomcat8.5二進制安裝包
- 2.2.2 解壓tomcat8.5二進制安裝包
- 2.2.3 創(chuàng)建tomcat用戶
- 2.2.4 修改tomcat8目錄的文件所屬
- 2.2.5 查看tomcat的幫助
- 2.2.6 啟動tomcat
- 2.2.7 查看啟動情況
- 三、JMX exporter簡介
- 3.1 什么是jmx exporter?
- 3.2 下載jmx exporter
- 3.3 jmx exporter的啟動依賴
- 四、安裝JMX exporter
- 4.1 下載jmx exporter
- 4.2 添加config.yaml文件
- 4.3 jmx exporter集成到tomcat
- 4.4 修改jmx exporter的所屬
- 4.5 重新啟動tomcat
- 4.6 查看啟動情況
- 4.7 查看jmx exproter采集的數(shù)據(jù)
- 五、配置prometheus拉取jmx exporer采集的數(shù)據(jù)
- 5.1 修改prometheus配置文件
- 5.2 讓prometheus重新讀取配置文件
- 六.查看prometheus的監(jiān)控數(shù)據(jù)
- 6.1 到網(wǎng)頁端查看prometheus監(jiān)控目標
- 6.2 在prometheus網(wǎng)頁查詢結(jié)果
- 七、導(dǎo)入grafana模板
- 7.1 導(dǎo)入模板
- 7.2 查看模板效果
- 八、總結(jié)

一. 實驗環(huán)境
本次實驗環(huán)境見下表:
操作系統(tǒng) | 服務(wù)器IP | hostname |
---|---|---|
centos7.9 | 10.0.0.7 | mufengrow7 |
二. 安裝tomcat8
本次實驗使用tomcat8.5.87版本進行演示。
2.1 安裝jdk8
- 為什么要安裝jdk8呢?
我們可以從tomcat官方網(wǎng)站上得知,tomcat8.5版本需要在java7或者更高版本的java環(huán)境中運行。而且現(xiàn)在國內(nèi)普遍都是使用java8的環(huán)境,所以我們的環(huán)境也是安裝java8。
- 使用yum命令安裝jdk8
安裝jdk8有兩種方式,一種是到orcale官網(wǎng)上下載官方編譯好的jdk二進制安裝包,另一種是使用yum命令安裝centos7倉庫中的opnjdk8,本次使用的是第二種方式,安裝openjdk8。
[root@mufengrow7 apps]# yum install -y java-1.8.0-openjdk
- 查看jdk8版本
查看jdk版本
[root@mufengrow7 apps]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)
2.2 安裝tomcat8.5
2.2.1 下載tomcat8.5二進制安裝包
本次安裝的是taomcat8.5,所以我們到tomcat官方下載最新版的tomcat8.5.87的二進制安裝包
#創(chuàng)建tomcat安裝目錄
[root@mufengrow7 ~]# mkdir -p /apps
#進入安裝目錄
[root@mufengrow7 ~]# cd /apps
#使用wget命令下載tomcat8.5.87的二進制安裝包
[root@mufengrow7 apps]# wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.87/bin/apache-tomcat-8.5.87.tar.gz
代碼注釋:
--no-check-certificate
:下載文件不驗證安全證書
2.2.2 解壓tomcat8.5二進制安裝包
解壓tomcat8.5.87的二進制安裝包
[root@mufengrow7 apps]# tar zxvf apache-tomcat-8.5.87.tar.gz
代碼注釋:
zxvf
:這里可以拆分為z
,x
,v
,f
四個選項
z
:解壓的文件包含gzip屬性
x
:從歸檔中解壓文件
v
:列出解壓的文件
f
:指定解壓的文件
2.2.3 創(chuàng)建tomcat用戶
在公司的環(huán)境中,不會直接使用root
用戶啟動tomcat,所以我們創(chuàng)建一個用戶,用于啟動tomcat
[root@mufengrow7 apps]# useradd www
2.2.4 修改tomcat8目錄的文件所屬
既然要用新創(chuàng)建的www
用戶啟動tomcat,那么我們需要將tomcat文件夾和里面的文件的所屬都改為www
用戶,避免以后啟動出現(xiàn)權(quán)限拒絕的問題
[root@mufengrow7 apps]# chown -R www.www apache-tomcat-8.5.87
代碼注釋:
-R
:遞歸修改屬性
2.2.5 查看tomcat的幫助
對于不熟悉tomcat啟動的朋友來說,我們先查看一下tomcat的幫助文檔,看看tomcat是如何啟動的
#進入到tomcat文件夾下的bin目錄里
[root@mufengrow7 apps]# cd apache-tomcat-8.5.87/bin/#查看幫助
[root@mufengrow7 bin]# ./catalina.sh --help
為了更直觀一些,我們把常用的參數(shù)用表格來展示:
參數(shù) | 描述 |
---|---|
debug | 以調(diào)試的方式啟動tomcat |
run | 前臺啟動tomcat |
start | 后臺啟動tomcat |
stop | 停止tomcat,在5秒內(nèi)等待進程的結(jié)束 |
stop -force | 停止tomcat,如果5秒后進程不結(jié)束就直接把進程kill掉強制結(jié)束進程 |
configtest | 檢查server.xml文件的語法 |
version | 查看tomcat的信息 |
2.2.6 啟動tomcat
我們使用www用戶啟動tomcat
[root@mufengrow7 bin]# su - www -c "/apps/apache-tomcat-8.5.87/bin/catalina.sh start"
Using CATALINA_BASE: /apps/apache-tomcat-8.5.87
Using CATALINA_HOME: /apps/apache-tomcat-8.5.87
Using CATALINA_TMPDIR: /apps/apache-tomcat-8.5.87/temp
Using JRE_HOME: /
Using CLASSPATH: /apps/apache-tomcat-8.5.87/bin/bootstrap.jar:/apps/apache-tomcat-8.5.87/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
2.2.7 查看啟動情況
我們使用ps命令來查看tomcat的進程狀態(tài),使用ss命令來查看tomcat的端口
#使用ps命令來查看tomcat的進行狀態(tài)
#通過查看下面的結(jié)果,我們得知現(xiàn)在的tomcat的確是使用了“www”用戶進行啟動[root@mufengrow7 bin]# ps -ef | grep tomcat | grep -v grep#tomcat的啟動后的默認端口為8080,所以通過命令來查找8080端口確認tomcat的端口是否有啟動
[root@mufengrow7 bin]# ss -tnl | grep 8080
LISTEN 0 100 [::]:8080 [::]:*
代碼注釋:
-
-e
:顯示所有執(zhí)行程序的進程(除會話領(lǐng)導(dǎo)者與終端關(guān)聯(lián)的進程) -
-f
:顯示UID,PPIP,C與STIME欄位
三、JMX exporter簡介
3.1 什么是jmx exporter?
jmx exproter是prometheus官方提供的用于采集JVM數(shù)據(jù)的exporter。
其中jmx exporter有兩種監(jiān)控方式:
第一種:使用Java Agent進行監(jiān)控
該exporter可以集成在java服務(wù)里,并且在啟動后當做java的agent并且暴露出該exporter的端口,prometheus就可以通過HTTP服務(wù)來采集數(shù)據(jù)。
本文就是通過啟動jmx exporter的java agent模式進行采集數(shù)據(jù)。
第二種:使用HTTP Server進行監(jiān)控
這種方式是將exporter作為一個獨立的采集JMX數(shù)據(jù)的HTTP服務(wù)運行,通過HTTP服務(wù)程的方式來采集JVM的數(shù)據(jù)。
使用HTTP Server方式進行監(jiān)控,可以看【云原生】prometheus結(jié)合jmx exporter 的http server模式采集tomcat監(jiān)控實戰(zhàn)
3.2 下載jmx exporter
我們可以從prometheus官方的下載頁面上看到。prometheus官方并沒有提供這個exproter的下載地址。
既然官方的下載網(wǎng)頁沒有提供jmx exporter的下載地址,為什么說這個是prometheus官方提供的用于采集jmx數(shù)據(jù)的exporter呢?
其實,在prometheus官方的下載頁面里,有推薦給我們使用的exporter
點擊進入頁面,找到jmx exporter,點擊連接就可以進入jmx exporter的github頁面
Jmx exporter的github地址為:https://github.com/prometheus/jmx_exporter
3.3 jmx exporter的啟動依賴
通過瀏覽jmx exporter的github頁面我們可以看到j(luò)mx exporter的啟動依賴,通過下圖可以我們可以知道jmx exporter最低可以支持到j(luò)ava6版本。我們服務(wù)器的環(huán)境是安裝了jdk8的所以需要下載的是沒有“_java6”后綴的jar包
四、安裝JMX exporter
4.1 下載jmx exporter
在jmx exporter的github里點擊右方的“Releases”后選擇版本進行下載
我們這次下載最新版本的jmx exporter,進入到“Releases”頁面,找到最新的“1.18.0”版本,選擇“jmx_prometheus_javaagent-0.18.0.jar”進行下載。
#進入到tomcat的bin目錄下
[root@mufengrow7 ~]# cd /apps/apache-tomcat-8.5.87/bin/
#使用weget命令進行下載
[root@mufengrow7 bin]# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.18.0/jmx_prometheus_javaagent-0.18.0.jar
這里可能會有朋友問到,為什么jmx exporter的jar包要放在這里呢?
原因有兩個:
-
tomcat使用的jar包基本都是放在這里的,所以我也就下載到這里。
-
由于本次演示,只會啟動一個tomcat,放在這里比較好管理,如果有多個tomcat的話,那就把jmx exporter下載到一個公共目錄,供所有的tomcat一起使用。
4.2 添加config.yaml文件
我們在jmx exproter的github頁面的提示中可以看到啟動jmx exporter的時候需要有一個config.yaml的文件,然后在下面也提示了該文件在哪里可以找到范例
接著我們進入到存放config.yaml
范例的文件夾
找到tomcat.yaml
文件,點擊進去
在看到文件內(nèi)容后將內(nèi)容全部復(fù)制
[root@mufengrow7 bin]# vim config.yaml
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
rules:
- pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'name: tomcat_$3_totallabels:port: "$2"protocol: "$1"help: Tomcat global $3type: 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_totallabels:module: "$1"servlet: "$2"help: Tomcat servlet $3 totaltype: COUNTER
- pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'name: tomcat_threadpool_$3labels:port: "$2"protocol: "$1"help: Tomcat threadpool $3type: 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_totallabels:context: "$2"host: "$1"help: Tomcat session $3 totaltype: COUNTER
- pattern: ".*" #顯示所有的信息
4.3 jmx exporter集成到tomcat
把jmx exporter集成到tomcat里也很簡單,只需要修改啟動腳本,在啟動Tomact時也一起啟動jmx exporter即可。
我們修改tomcat的啟動腳本catalina.sh,內(nèi)容如下:
[root@mufengrow7 bin]# vim catalina.sh
.....
# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
JAVA_OPTS="-javaagent:/apps/apache-tomcat-8.5.87/bin/jmx_prometheus_javaagent-0.18.0.jar=38081:config.yaml" #添加這行內(nèi)容,放哪里都行。建議此處寫絕對路徑
......
代碼注釋:
-javaagent
:作為javaagent啟動
=38081
:設(shè)置javaagent的端口,可以根據(jù)需求進行修改端口。
:config.yaml
:設(shè)置讀取的yaml文件,可以根據(jù)需求修改文件名稱。
4.4 修改jmx exporter的所屬
由于我們是用root用戶將jmx exporter下載和添加config.yaml文件的,而我們啟動tomcat的用戶是www,所以我們需要將這兩個文件所屬修改為www用戶,避免啟動時出現(xiàn)權(quán)限拒絕的問題。
[root@mufengrow7 bin]# chown www.www jmx_prometheus_javaagent-0.18.0.jar config.yaml
4.5 重新啟動tomcat
#關(guān)閉tomcat
[root@mufengrow7 bin]# ./shutdown.sh #啟動tomcat
[root@mufengrow7 bin]# ./catalina.sh startTomcat started.
4.6 查看啟動情況
通過ps
命令來查找tomcat啟動時是否集成到“jmx_prometheus_javaagent”,同時通過ss命令查看java agent的端口
#通過ps命令查看
[root@mufengrow7 bin]# ps -ef | grep jmx_prometheus_javaagent | grep -v grep#通過ss命令查看
[root@mufengrow7 bin]# ss -tnl | grep 38081 | grep -v grep
LISTEN 0 3 [::]:38081 [::]:*
4.7 查看jmx exproter采集的數(shù)據(jù)
- 使用命令查看jmx exporter采集的數(shù)據(jù)
[root@mufengrow7 bin]# curl 10.0.0.7:38081/metrics
# HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
# TYPE jvm_memory_pool_allocated_bytes_total counter
jvm_memory_pool_allocated_bytes_total{pool="Code Cache",} 5475584.0
jvm_memory_pool_allocated_bytes_total{pool="PS Eden Space",} 1.09051904E8
jvm_memory_pool_allocated_bytes_total{pool="PS Old Gen",} 1.3875544E7
jvm_memory_pool_allocated_bytes_total{pool="PS Survivor Space",} 5454976.0
jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space",} 2042872.0
jvm_memory_pool_allocated_bytes_total{pool="Metaspace",} 1.86804E7
# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.
# TYPE jvm_memory_objects_pending_finalization gauge
jvm_memory_objects_pending_finalization 0.0
......
- 使用瀏覽器查看jmx exporter采集的數(shù)據(jù)
瀏覽器訪問:
10.0.0.7:38081/metrics
瀏覽器頁面顯示的結(jié)果如下:
五、配置prometheus拉取jmx exporer采集的數(shù)據(jù)
5.1 修改prometheus配置文件
修改的方式如圖:
其中job_name、prometheus讀取配置文件的方式、目標的ip和端口都可以根據(jù)需求自行修改。
5.2 讓prometheus重新讀取配置文件
- 檢查prometheus配置文件語法
[root@mufengrow7 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: prometheus.yml is valid prometheus config file syntax
- 重啟prometheus
通過重啟,讓prometheus重新讀取配置文件
[root@mufengrow7 prometheus]# systemctl restart prometheus
六.查看prometheus的監(jiān)控數(shù)據(jù)
6.1 到網(wǎng)頁端查看prometheus監(jiān)控目標
我們到prometheus的網(wǎng)頁端,查看prometheus采集數(shù)據(jù)的目標是否有tomcat,通過下圖,我們知道prometheus已經(jīng)連接上jmx exporter了。
6.2 在prometheus網(wǎng)頁查詢結(jié)果
接下來我們到prometheus的查詢面板查看prometheus有沒有采集到tomcat的數(shù)據(jù)
- 查看jmx exporter版本
- 查看JVM信息
七、導(dǎo)入grafana模板
本文中的grafana已經(jīng)安裝好了,如果你還未安裝,可以參考文章:promehtheus整合grafana實現(xiàn)可視化監(jiān)控實戰(zhàn)
7.1 導(dǎo)入模板
grafana推薦模板:8563、8704、8878、3066
以編號8563為例
- 輸入模板編號,點擊Load
- 修改job的名稱為prometheus配置文件里的“job_name”,點擊import
7.2 查看模板效果
以下為編號“8563”模板的效果,如果有什么問題可以自行修改。
注意:每個jmx模板需要的config.yaml文件可能有不同,所以我們可以到該模板的網(wǎng)頁查看要求。
八、總結(jié)
prometheus監(jiān)控tomcat的步驟為:
-
安裝prometheus
-
安裝java8環(huán)境和tomcat
-
下載jmx exporter和添加
config.yaml
并修改tomcat的啟動文件。
注意:添加的config.yaml
文件需要根據(jù)后面的grafana模板的添加而進行修改 -
修改prometheus的配置文件,添加tomcat實例,并重新讀取配置文件
-
進入prometheus的WEB頁面進行驗證