Java Web應(yīng)用服務(wù)器之一:Tomcat監(jiān)控選型及實(shí)踐

2021-02-06    分類(lèi): 網(wǎng)站建設(shè)

監(jiān)控選型

Tomcat Manager和Psi-probe是不錯(cuò)的可視化監(jiān)控工具,能夠很好地查看Tomcat狀態(tài)信息(比如單位時(shí)間請(qǐng)求數(shù),線(xiàn)程狀態(tài)等)。在生產(chǎn)環(huán)境中,隨著Tomcat實(shí)例的不斷增加,維護(hù)不同實(shí)例上的Manager控制臺(tái)會(huì)顯得有些繁瑣,同時(shí),為了與企業(yè)監(jiān)控系統(tǒng)、運(yùn)維儀表盤(pán)等結(jié)合,有必要選擇兼容性和適配性更好的監(jiān)控工具。

如今,企業(yè)微服務(wù)的流行和CI/CD的強(qiáng)需求性,要求我們的服務(wù)在易于開(kāi)發(fā)和維護(hù)的同時(shí),具有伸縮性強(qiáng)、快速交付等特點(diǎn)。在此環(huán)境下,Tomcat+Prometheus+Grafana能夠很好的與企業(yè)已有架構(gòu)適配,并能夠很好的與其他中間件服務(wù)監(jiān)控整合到一起。Prometheus作為新一代的云原生監(jiān)控系統(tǒng),鼓勵(lì)用戶(hù)監(jiān)控服務(wù)的內(nèi)部狀態(tài),讓用戶(hù)可以獲取服務(wù)和應(yīng)用內(nèi)部真正的運(yùn)行狀態(tài)。

容器環(huán)境下Tomcat+Prometheus+Grafana簡(jiǎn)圖如下:

在實(shí)際部署中,可以簡(jiǎn)單分為如下幾個(gè)步驟:

1、下載jmx_prometheus_javaagent (https://github.com/prometheus/jmx_exporter),若為容器環(huán)境,可將jmx_prometheus_javaagent與Tomcat一起打進(jìn)運(yùn)行鏡像。

2、Tomcat啟動(dòng)時(shí),JAVA_OPTS增加Javaagent和Tomcat config.yaml (https://github.com/prometheus/jmx_exporter/blob/master/example_configs/Tomcat.yml )配置,例如:JAVA_OPTS=”-javaagent:/var/tomcat/jmx_prometheus_javaagent-0.3.1.jar=port:/vat/tomcat/conf/config.xml”(port為實(shí)際端口)。

3、Prometheus添加Tomcat的job_name。

監(jiān)控指標(biāo)梳理

在《SRE: Google運(yùn)維解密》一書(shū)中指出,監(jiān)控系統(tǒng)需要能夠有效的支持白盒監(jiān)控和黑盒監(jiān)控。通過(guò)白盒監(jiān)控能夠了解其內(nèi)部的實(shí)際運(yùn)行狀態(tài),通過(guò)對(duì)監(jiān)控指標(biāo)的觀察能夠預(yù)判可能出現(xiàn)的問(wèn)題,從而對(duì)潛在的不確定因素進(jìn)行優(yōu)化。而黑盒監(jiān)控,常見(jiàn)的如HTTP探針,TCP探針等,可以在系統(tǒng)或者服務(wù)在發(fā)生故障時(shí)能夠快速通知相關(guān)的人員進(jìn)行處理。

監(jiān)控的四個(gè)黃金指標(biāo)可以在服務(wù)級(jí)別幫助我們更好地衡量終端用戶(hù)體驗(yàn)、服務(wù)中斷、業(yè)務(wù)影響等層面的問(wèn)題。主要關(guān)注以下四種類(lèi)型的指標(biāo):錯(cuò)誤,延遲,流量以及飽和度。

通過(guò)對(duì)黑盒、白盒監(jiān)控的理解,結(jié)合監(jiān)控的四個(gè)黃金指標(biāo),針對(duì)Tomcat的重要監(jiān)控指標(biāo),可以從以下幾個(gè)方面進(jìn)行考慮:

監(jiān)控實(shí)踐

錯(cuò)誤

錯(cuò)誤監(jiān)控關(guān)注的是當(dāng)前應(yīng)用或系統(tǒng)發(fā)生的錯(cuò)誤請(qǐng)求。針對(duì)Tomcat錯(cuò)誤監(jiān)控,主要監(jiān)控指標(biāo)為T(mén)omcat錯(cuò)誤請(qǐng)求數(shù)及與請(qǐng)求總數(shù)之間的比例,這些多為顯式的錯(cuò)誤。關(guān)于隱式的錯(cuò)誤(比如狀態(tài)碼響應(yīng)200,實(shí)際業(yè)務(wù)流程卻是失敗的),通常需要根據(jù)業(yè)務(wù)場(chǎng)景的不同,在服務(wù)中添加鉤子及業(yè)務(wù)邏輯監(jiān)控來(lái)實(shí)現(xiàn)。

圖1:某Tomcat實(shí)例在1000+qps下請(qǐng)求數(shù)和錯(cuò)誤數(shù)的比例

當(dāng)然,我們也可以借助ELK等工具,對(duì)Tomcat上游代理或LB進(jìn)行整體的錯(cuò)誤狀態(tài)碼統(tǒng)計(jì),方便我們更好的定位錯(cuò)誤,以及在發(fā)生5xx錯(cuò)誤時(shí)考慮如何“快速失敗”,來(lái)減少錯(cuò)誤對(duì)系統(tǒng)性能帶來(lái)的影響。

圖2:通過(guò)Tomcat上游代理采集的狀態(tài)碼統(tǒng)計(jì)

延遲

延遲監(jiān)控關(guān)注的是服務(wù)請(qǐng)求所需時(shí)間。針對(duì)Tomcat延遲監(jiān)控,主要監(jiān)控指標(biāo)為T(mén)omcat實(shí)例的Response time。同時(shí),我們也可以采用黑盒監(jiān)控中的HTTP語(yǔ)義探測(cè)來(lái)采集Tomcat對(duì)應(yīng)

圖3:某產(chǎn)品線(xiàn)下多個(gè)Tomcat實(shí)例整體的response time匯總

圖4:通過(guò)Tomcat上游代理采集的平均請(qǐng)求時(shí)間和Tomcat平均響應(yīng)時(shí)間

流量

流量監(jiān)控關(guān)注的是當(dāng)前系統(tǒng)或應(yīng)用的流量,以便更好地衡量服務(wù)的承載能力。針對(duì)Tomcat流量監(jiān)控,我們需要關(guān)注Tomcat實(shí)例發(fā)送和接收的流量。

圖5:某Tomcat實(shí)例發(fā)送和接收的流量

飽和度

飽和度監(jiān)控關(guān)注的是系統(tǒng)或應(yīng)用對(duì)資源的利用率,強(qiáng)調(diào)最能影響服務(wù)狀態(tài)的受限制的資源。

不同的系統(tǒng)或應(yīng)用對(duì)飽和度監(jiān)控的需求各不相同,但共性是在服務(wù)性能明顯下降時(shí),起決定性的狀態(tài)指標(biāo)。針對(duì)Tomcat飽和度監(jiān)控,可以從堆內(nèi)存、線(xiàn)程數(shù)、GC次數(shù)及耗時(shí)等方面出發(fā),在告警發(fā)生前后,通過(guò)查看各個(gè)指標(biāo)的變化曲線(xiàn),快速定位問(wèn)題原因。

Tomcat線(xiàn)程池

對(duì)于Tomcat線(xiàn)程池初始配置的采集,可以根據(jù)不同業(yè)務(wù)場(chǎng)景,不同實(shí)例的壓力,來(lái)進(jìn)行調(diào)整,比如maxThreads、acceptCount等。

圖6:某Tomcat實(shí)例線(xiàn)程池相關(guān)的默認(rèn)配置

JVM監(jiān)控

對(duì)于Tomcat JVM的監(jiān)控,通常我們需要關(guān)注堆內(nèi)存的使用情況、GC的次數(shù)和耗時(shí)、以及對(duì)JVM線(xiàn)程數(shù)的監(jiān)控。

JVM堆內(nèi)存監(jiān)控

Java Heap是JVM所管理的內(nèi)存中***的一塊,被所有線(xiàn)程所共享,用來(lái)存放對(duì)象實(shí)例。因此,堆內(nèi)存的使用情況至關(guān)重要。

圖7:某Tomcat實(shí)例堆內(nèi)存的使用情況

  • GC次數(shù)和耗時(shí)

通過(guò)查看單位時(shí)間內(nèi)GC次數(shù)和耗時(shí),能夠讓我們針對(duì)不同的業(yè)務(wù)場(chǎng)景,選擇不同的垃圾回收器,從而進(jìn)一步提高性能。

圖8:某Tomcat實(shí)例默認(rèn)垃圾回收器總GC次數(shù)曲線(xiàn)

圖9:某Tomcat實(shí)例默認(rèn)垃圾回收器總GC時(shí)間曲線(xiàn)

  • JVM線(xiàn)程數(shù)監(jiān)控

JVM線(xiàn)程數(shù)的曲線(xiàn)統(tǒng)計(jì),能夠讓我們更直觀的看到JVM線(xiàn)程當(dāng)前的運(yùn)行情況。

圖10:某Tomcat實(shí)例JVM線(xiàn)程相關(guān)的統(tǒng)計(jì)

寫(xiě)在***

通過(guò)對(duì)Tomcat重要監(jiān)控指標(biāo)的采集以及監(jiān)控,幫助我們更方便地完成日常巡檢,提高先于故障發(fā)現(xiàn)問(wèn)題的能力,提高故障發(fā)生時(shí)的定位效率,從而更好地提高穩(wěn)定性。

附:

jmx_prometheus_javaagent:

https://github.com/prometheus/jmx_exporter

Tomcat jmx_exporter:

https://github.com/prometheus/jmx_exporter/blob/master/example_configs/Tomcat.yml

京東云

應(yīng)用研發(fā)部

Tomcat是一款開(kāi)源的輕量級(jí)Web應(yīng)用服務(wù)器,廣泛應(yīng)用于云服務(wù)平臺(tái)及企業(yè)應(yīng)用系統(tǒng),是***的Java web應(yīng)用服務(wù)器之一。因此,對(duì)于Tomcat的監(jiān)控顯得尤為重要,能讓我們?cè)诓煌瑘?chǎng)景下了解Tomcat的運(yùn)行情況,進(jìn)而能夠更好的進(jìn)行調(diào)優(yōu)。

文章題目:Java Web應(yīng)用服務(wù)器之一:Tomcat監(jiān)控選型及實(shí)踐
本文來(lái)源:http://www.bm7419.com/news29/99479.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站收錄、ChatGPT、云服務(wù)器、網(wǎng)站設(shè)計(jì)公司小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)