前言
在使用微服務(wù)架構(gòu)時(shí),客戶的一個(gè)請(qǐng)求可能會(huì)經(jīng)過(guò)多個(gè)微服務(wù)、模塊、中間件,那么如何確定客戶端的一次操作背后調(diào)用了哪些微服務(wù)、模塊、中間件,調(diào)用的先后順序是怎樣的,每個(gè)服務(wù)的性能如何?隨著業(yè)務(wù)系統(tǒng)日趨復(fù)雜,系統(tǒng)中需要調(diào)用鏈的監(jiān)控來(lái)解決這個(gè)問(wèn)題。
Pinpoint是一個(gè)開源的 APM (Application Performance Management/應(yīng)用性能管理)工具。一個(gè)分布式跟蹤系統(tǒng),基于google Dapper實(shí)現(xiàn),用于基于java的大規(guī)模分布式系統(tǒng),通過(guò)跟蹤分布式應(yīng)用之間的調(diào)用來(lái)提供解決方案,以幫助分析系統(tǒng)的總體結(jié)構(gòu)和內(nèi)部模塊之間如何相互聯(lián)系。pinpoint 有3個(gè)主要組件組成:Collector、Web、Agent,采用HBase進(jìn)行存儲(chǔ)。 Collector和Web都是WAR包,Agent采用一個(gè)JAVA應(yīng)用程序加載。
安裝部署
這里采用docker的方式部署pinpoint。相關(guān)的Dockerfile及docker-compose.yml參見(jiàn)https://gitee.com/tinylk/docker-pinpoint 。
構(gòu)建docker鏡像
- 進(jìn)入 pinpoint-web目錄 執(zhí)行
docker build -t tinylk/pinpoint-web:1.8.2 .命令構(gòu)建鏡像 - 進(jìn)入 pinpoint-hbase目錄 執(zhí)行
docker build -t tinylk/pinpoint-hbase:1.8.2 .命令構(gòu)建鏡像 - 進(jìn)入 pinpoint-collector目錄 執(zhí)行
docker build -t tinylk/pinpoint-collector:1.8.2 .命令構(gòu)建鏡像 - 進(jìn)入 pinpoint-mysql
docker build -t tinylk/pinpoint-mysql:1.8.2 .命令構(gòu)建鏡像
- 進(jìn)行構(gòu)建時(shí)會(huì)下載hbase與pinpoint的war包,如果需要加快速度可以實(shí)現(xiàn)下載好hbase與pinpoint放在本地web服務(wù)器上,然后修改Dockerfile中PINPOINT_REPOSITORY與HBASE_REPOSITORY的地址從本地服務(wù)器下載。pinpoint的下載地址為:https://github.com/naver/pinpoint/releases,hbase的下載地址為:http://archive.apache.org/dist/hbase,下載的版本請(qǐng)保持與Dockerfile中一致。
- pinpoint如果需要使用報(bào)警功能需要使用mysql,pinpoint-mysql中的建表sql文件來(lái)自于:https://github.com/naver/pinpoint/blob/master/doc/alarm.md。
- pinpoint的報(bào)警時(shí)發(fā)送郵件功能需要自己實(shí)現(xiàn)代碼,pinpoint-web中的mail.zip為發(fā)送郵件功能實(shí)現(xiàn)。文件來(lái)自于https://github.com/naver/pinpoint-docker/tree/master/pinpoint-web/build
運(yùn)行容器
運(yùn)行docker-compose命令啟動(dòng)pinpoint。啟動(dòng)后使用瀏覽器打開http://localhost:58080地址訪問(wèn)pinpoint界面。
docker-compose up -d
- docker-compose.yml中pinpoint-web里面email相關(guān)配置請(qǐng)修改為自己的郵箱配置。
使用Pinpoint Agent收集調(diào)用信息
部署好pinpoint服務(wù)端后,就可以通過(guò)pinpoint agent來(lái)收集java應(yīng)用信息。Pinpoint Agent采用javaagent無(wú)侵入的方式實(shí)現(xiàn)了應(yīng)用調(diào)用信息的收集,原應(yīng)用程序無(wú)需做任何改動(dòng)。只需要在啟動(dòng)時(shí)增加javaagent參數(shù)。啟動(dòng)時(shí)參數(shù)如下:
Java -javaagent:/opt/pinpoint-agent-1.8.2/pinpoint-bootstrap-1.8.2.jar -Dpinpoint.agentId=demo1 -Dpinpoint.applicationName=demo –jar demo.jar
說(shuō)明:
- javaagent 參數(shù)必須在 jar參數(shù)之前;
- pinpoint.agentId 應(yīng)用實(shí)例的唯一標(biāo)識(shí)(可以采用主機(jī)名+應(yīng)用名);
- pinpoint.applicationName 相同的名稱表示相同服務(wù)的一組應(yīng)用實(shí)例;
- 啟動(dòng)前需要修改pinpoint.config 文件中的相應(yīng)配置:
profiler.collector.ip (collector的ip地址 xxx.xxx.xxx.xxx) profiler.collector.tcp.port (collector's collector.tcpListenPort - default: 9994) profiler.collector.stat.port (collector's collector.udpStatListenPort - default: 9995) profiler.collector.span.port (collector's collector.udpSpanListenPort - default: 9996) profiler.sampling.rate=1(數(shù)據(jù)采樣率,搜集數(shù)據(jù)的比率,默認(rèn)為20即為1/20 5%,如想改為100%即設(shè)為1)
pinpoint的web界面
ServerMap – 可視化的方式顯示服務(wù)的依賴關(guān)系及調(diào)用計(jì)數(shù)。.

CallStack – 每次請(qǐng)求的調(diào)用過(guò)程,查看故障點(diǎn)及瓶頸。

Inspector - 查看應(yīng)用程序的其他詳細(xì)信息,如CPU使用情況,內(nèi)存/垃圾收集,TPS和JVM參數(shù)。

pinpoint的CallStack 界面需要從ServerMap界面右上角圖表中用鼠標(biāo)拖拽矩形框選擇后進(jìn)入。
報(bào)警郵件通知配置
Pinpoint-web會(huì)定期檢查應(yīng)用程序的狀態(tài),如果滿足某些預(yù)先配置的規(guī)則時(shí)會(huì)觸發(fā)警報(bào)。
Web模塊中的后臺(tái)批處理程序默認(rèn)情況每3分鐘檢查一次預(yù)定義規(guī)則。 滿足規(guī)則后,批處理程序?qū)⑾蜃?cè)到用戶組的用戶發(fā)送短信/電子郵件。
一.配置用戶及規(guī)則
點(diǎn)擊主界面右上角配置按鈕,進(jìn)入配置界面
注冊(cè)用戶
創(chuàng)建用戶組
添加用戶及用戶組
設(shè)置報(bào)警通知規(guī)則
二.實(shí)現(xiàn)郵件發(fā)送代碼及配置
為了使用報(bào)警功能,必須實(shí)現(xiàn)com.navercorp.pinpoint.web.alarm.AlarmMessageSender類的發(fā)送郵件和SMS的方法,并配置將其注冊(cè)至Spring中。當(dāng)警報(bào)觸發(fā)時(shí), AlarmMessageSender#sendEmail和 AlarmMessageSender#sendSms 方法將會(huì)被調(diào)用。(本部分已經(jīng)在前面docker安裝部署中配置好)
報(bào)警通知的詳細(xì)內(nèi)容介紹請(qǐng)參見(jiàn):https://github.com/naver/pinpoint/blob/master/doc/alarm.md