一、前言
當前所測試業(yè)務需求為集成在業(yè)務系統(tǒng)WMS的jar包,jar包測試主要集中在本地拉取開發(fā)編寫的代碼做單元測試,因為jar包沒有單獨的應用,每當大促壓測或日常壓測,架構師或開發(fā)同事問道:這個jar包的JVM指標如何?jar包的火焰圖是什么樣的?對此,只能望洋興嘆?;谝陨媳尘埃瑢ar監(jiān)控做了一些調研和實戰(zhàn)。
?
二、調研過程
1.forcebot平臺
forcebot平臺是泰山上一款支持Groovy腳本編寫的壓測平臺,通過將jar包上傳,編寫腳本,便可看到當前壓測的響應時間、TP99等監(jiān)控信息。forcebot平臺也支持抓取火焰圖信息,抓取到的火焰圖結果如下,但是此信息為Groovy腳本進程火焰圖信息,而并非Groovy腳本調用jar的火焰圖信息。

2.jconsole/jvisualvm+Grafana監(jiān)控
jconsole
jconsole是JDK自動的、基于jmx協(xié)議的、對JVM進行可視化監(jiān)視和管理的工具。jconsole支持連接本地進程和遠程進程,如果需要連接遠程進程,那么遠程進程必須開啟jmx協(xié)議。

jvisualvm
jvisualvm也是JVM自帶的一個類似于jconsole的可視化監(jiān)控工具,jvisualvm也支持本地進程和遠程進程。


遠程監(jiān)控的其他監(jiān)控信息可以在易維平臺查看到Grafana監(jiān)控情況,但是對于相同指標比如CPU使用率信息的記錄,jvisualvm和Grafana對指標的描述結果有偏差,初步分析是兩個監(jiān)控看板對于指標數(shù)據(jù)的采集及統(tǒng)計有偏差。

通過以上監(jiān)控信息我們可以明確的看到當前jar包的JVM、CPU以及相應方法的耗時情況。但是現(xiàn)有易維平臺提供的Grafana看板指標數(shù)據(jù)有限,無法詳細看到TP99、TPS等數(shù)據(jù),且通過visuals拿到的數(shù)據(jù)和Grafana拿到的數(shù)據(jù)對于相同指標來說數(shù)據(jù)值有差異,搭建一套統(tǒng)一的看板勢在必行。經(jīng)調研易維平臺沒有用influxdb來存儲數(shù)據(jù),用的是ES,易維grafana中展示的數(shù)據(jù)是在ES中出的,ES中就沒有JVM相關的監(jiān)控信息,遂探究了如何自建性能測試工具進行監(jiān)控看板的搭建。
三、性能測試平臺搭建

1.jmeter
常用的壓力測試軟件有:LoadRunner、ApacheJMeter、NeoLoad、WebLOAD、Loadster、Load impact、CloudTest、Loadstorm、阿里云PTS等等,jmeter是一款使用Java開發(fā)的,開源免費的測試工具, 主要用來做功能測試和性能測試(壓力測試/負載測試),且簡單易用,本文便使用了jmeter壓測工具。
?
jmeter可以對http請求做壓測,但是做jar包的壓測,需要對jmeter做二次開發(fā)進行定制化編寫,對于以上jemter的二次開發(fā)之前已有文章發(fā)表對此不做過多贅述,詳見 jmeter二次開發(fā)發(fā)送java請求
?
我們可以通過使用插件等方式設置線程數(shù)、循環(huán)次數(shù)等信息定制化監(jiān)控我們我們壓測的需要監(jiān)控的指標數(shù)據(jù)。
2.telegraf
1.1.Telegraf是什么
Telegraf是一個Go語言編寫的代理程序,可收集系統(tǒng)和服務的統(tǒng)計數(shù)據(jù),并寫入到InfluDB數(shù)據(jù)庫。內存占用小,通過插件系統(tǒng)可輕松添加支持其他服務的擴展。是一個輕量級數(shù)據(jù)采集系統(tǒng)。
?
Telegraf metric是用于在處理期間對數(shù)據(jù)建模的內部表示。這些指標完全基于InfluxDB的數(shù)據(jù)模型,包含四個主要組件:
?度量名稱(Measurement)
?標簽(tags)
?字段(Field)
?時間戳(time)
1.2.為什么要用Telegraf
?可以采集多種組件的運行信息,不需要自己手動寫定時腳本,降低了數(shù)據(jù)獲取的難度
?CPU
?內存
?不需要自己手動寫定時腳本,降低了數(shù)據(jù)獲取的難度
?配置簡單
?與InfluxDB完美結合,按照時間序列采集數(shù)據(jù)
?輕量級,占用內存小
3.influxdb
3.1.InfluxDB簡介
是一個由InfluxData開發(fā)的開源時序型數(shù)據(jù)庫。它由Go語言寫成,著力于高性能地查詢與存儲時序數(shù)據(jù)。InfluxDB被廣泛應用于存儲系統(tǒng)的監(jiān)控數(shù)據(jù),IoT行業(yè)的實時數(shù)據(jù)等場景。
Influxdb有如下三大特性
?基于時間序列
?可度量性
?基于事件
相應的,我們也可以使用prometheus數(shù)據(jù)庫采集數(shù)據(jù),Prometheus也是由go語言開發(fā)的,是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合。
3.2.InfluxDB使用
InfluxDB數(shù)據(jù)模型包括Measurement(表)、Tags(維度列)組件、Field(數(shù)值列)以及point。
InfluxDB數(shù)據(jù)保留策略操作
創(chuàng)建數(shù)據(jù)庫保留策略
?:保留策略的名稱
?:為哪個數(shù)據(jù)庫創(chuàng)建保留策略
?:該保留策略對應的數(shù)據(jù)過期時間
?REPLICATION:副本因子:幾個副本
?SHARD DURATION:分片組的默認時長
?[DEFAULT]:是否為默認策略
CREATE RETENTION POLICY "influx_retention" ON "telegraf" DURATION 30d REPLICATION 1 DEFAULT;
查看數(shù)據(jù)庫保留策略
SHOW RETENTION POLICIES ON telegraf;
使用telegraf+InfluxDB搭建的數(shù)據(jù)資源管理看板。

4.Grafana
4.1.Grafana是什么?
Grafana是開源的、炫酷的可視化監(jiān)控、分析工具,它主要包含以下特點:
?多種展示方式
?支持多數(shù)據(jù)源:
?Graphite:時間序列 圖形系統(tǒng)
?InfluxDB
?Opentsdb:基于HBase
?Prometheus:開源 服務監(jiān)控系統(tǒng)和時序數(shù)據(jù)庫
?ElasticSearch,elk:
?多種通知提醒
?Email、SMS、
?混合展示
?同一個圖表中,混合使用不同的數(shù)據(jù)源
4.2.為什么要用Grafana?
Grafana主流數(shù)據(jù)庫:ElasticSearch、InfluxDB、MySQL、Opentsdb、Postgresql。涵蓋了大部分數(shù)據(jù)庫,并且有很炫酷的圖表庫,開源、可以進行二次開發(fā)、漢化、可以做前端開發(fā)。
搭建的Grafana看板如下

?
四、特別提醒
1.jmeter與telegraf的銜接需要使用Jolokia工具,此工具的作用為作為JMX的HTTP橋接器,使得Telegraf能夠通過HTTP協(xié)議輕松地訪問JMX管理的Java應用程序的數(shù)據(jù)。關于Jolokia的官網(wǎng)及簡介鏈接如下:
jolokia詳細文檔: jolokia官網(wǎng)?
2. 指標的采集及監(jiān)控數(shù)據(jù)對齊可以參考MDC監(jiān)控 監(jiān)控指標簡介
3. 火焰圖數(shù)據(jù)的采集可以使用arthas工具,安裝過程可參考神燈文章 JVM虛擬機之字節(jié)碼文件詳解
五、總結與展望
千里之行,始于足下,本次從0到1搭建監(jiān)控性能指標看板的歷程中得到了深刻的體現(xiàn)。從最初的設想、規(guī)劃,到一步步實施、調試,再到最終的呈現(xiàn)與優(yōu)化,每一步都凝聚了搭建者的心血與智慧。在這個過程中,不僅成功搭建了一個功能完善的監(jiān)控性能指標看板,更重要的是,學會了如何在壓測過程中,根據(jù)指標情況提出合理的優(yōu)化建議,為開發(fā)團隊提供了有力的數(shù)據(jù)支持,幫助他們更好地優(yōu)化代碼,提升系統(tǒng)性能。這一成果不僅是對自我技術能力的肯定,更是對團隊協(xié)作精神的最好詮釋。
同時,這次經(jīng)歷也讓我深刻感受到了自我技術成長的巨大飛躍。在解決問題的過程中,我不斷挑戰(zhàn)自我,學習新知識,掌握新技能,逐漸形成了自己的技術體系和方法論。這些寶貴的經(jīng)驗和收獲,將成為我未來職業(yè)生涯中不可或缺的財富。
最后,特別感謝在搭建看板過程中給予我無私幫助和支持的同學們!
審核編輯 黃宇
-
監(jiān)控
+關注
關注
6文章
2369瀏覽量
59233 -
JVM
+關注
關注
0文章
161瀏覽量
12996 -
JMX
+關注
關注
0文章
3瀏覽量
5747
發(fā)布評論請先 登錄
阿里云容器Kubernetes監(jiān)控(二) - 使用Grafana展現(xiàn)Pod監(jiān)控數(shù)據(jù)
NodeMCU+Influxdb+Grafana主要由哪幾部分構成
三步搭建RK3568編譯OpenHarmony一站式開發(fā)環(huán)境
influxdb+grafana+nodemcu
業(yè)務監(jiān)控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
評論