前言
在使用微服務架構時,客戶的一個請求可能會經過多個微服務、模塊、中間件,那么如何確定客戶端的一次操作背后調用了哪些微服務、模塊、中間件,調用的先后順序是怎樣的,每個服務的性能如何?隨着業務系統日趨復雜,系統中需要調用鏈的監控來解決這個問題。
Pinpoint是一個開源的 APM (Application Performance Management/應用性能管理)工具。一個分布式跟蹤系統,基於google Dapper實現,用於基於java的大規模分布式系統,通過跟蹤分布式應用之間的調用來提供解決方案,以幫助分析系統的總體結構和內部模塊之間如何相互聯系。pinpoint 有3個主要組件組成:Collector、Web、Agent,采用HBase進行存儲。 Collector和Web都是WAR包,Agent采用一個JAVA應用程序加載。
安裝部署
這里采用docker的方式部署pinpoint。相關的Dockerfile及docker-compose.yml參見https://gitee.com/tinylk/docker-pinpoint 。
構建docker鏡像
- 進入 pinpoint-web目錄 執行
docker build -t tinylk/pinpoint-web:1.8.2 .命令構建鏡像 - 進入 pinpoint-hbase目錄 執行
docker build -t tinylk/pinpoint-hbase:1.8.2 .命令構建鏡像 - 進入 pinpoint-collector目錄 執行
docker build -t tinylk/pinpoint-collector:1.8.2 .命令構建鏡像 - 進入 pinpoint-mysql
docker build -t tinylk/pinpoint-mysql:1.8.2 .命令構建鏡像
- 進行構建時會下載hbase與pinpoint的war包,如果需要加快速度可以實現下載好hbase與pinpoint放在本地web服務器上,然后修改Dockerfile中PINPOINT_REPOSITORY與HBASE_REPOSITORY的地址從本地服務器下載。pinpoint的下載地址為:https://github.com/naver/pinpoint/releases,hbase的下載地址為:http://archive.apache.org/dist/hbase,下載的版本請保持與Dockerfile中一致。
- pinpoint如果需要使用報警功能需要使用mysql,pinpoint-mysql中的建表sql文件來自於:https://github.com/naver/pinpoint/blob/master/doc/alarm.md。
- pinpoint的報警時發送郵件功能需要自己實現代碼,pinpoint-web中的mail.zip為發送郵件功能實現。文件來自於https://github.com/naver/pinpoint-docker/tree/master/pinpoint-web/build
運行容器
運行docker-compose命令啟動pinpoint。啟動后使用瀏覽器打開http://localhost:58080地址訪問pinpoint界面。
docker-compose up -d
- docker-compose.yml中pinpoint-web里面email相關配置請修改為自己的郵箱配置。
使用Pinpoint Agent收集調用信息
部署好pinpoint服務端后,就可以通過pinpoint agent來收集java應用信息。Pinpoint Agent采用javaagent無侵入的方式實現了應用調用信息的收集,原應用程序無需做任何改動。只需要在啟動時增加javaagent參數。啟動時參數如下:
Java -javaagent:/opt/pinpoint-agent-1.8.2/pinpoint-bootstrap-1.8.2.jar -Dpinpoint.agentId=demo1 -Dpinpoint.applicationName=demo –jar demo.jar
說明:
- javaagent 參數必須在 jar參數之前;
- pinpoint.agentId 應用實例的唯一標識(可以采用主機名+應用名);
- pinpoint.applicationName 相同的名稱表示相同服務的一組應用實例;
- 啟動前需要修改pinpoint.config 文件中的相應配置:
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(數據采樣率,搜集數據的比率,默認為20即為1/20 5%,如想改為100%即設為1)
pinpoint的web界面
ServerMap – 可視化的方式顯示服務的依賴關系及調用計數。.
CallStack – 每次請求的調用過程,查看故障點及瓶頸。
Inspector - 查看應用程序的其他詳細信息,如CPU使用情況,內存/垃圾收集,TPS和JVM參數。
pinpoint的CallStack 界面需要從ServerMap界面右上角圖表中用鼠標拖拽矩形框選擇后進入。
報警郵件通知配置
Pinpoint-web會定期檢查應用程序的狀態,如果滿足某些預先配置的規則時會觸發警報。
Web模塊中的后台批處理程序默認情況每3分鍾檢查一次預定義規則。 滿足規則后,批處理程序將向注冊到用戶組的用戶發送短信/電子郵件。
一.配置用戶及規則
-
點擊主界面右上角配置按鈕,進入配置界面
-
注冊用戶
-
創建用戶組
-
添加用戶及用戶組
-
設置報警通知規則
二.實現郵件發送代碼及配置
為了使用報警功能,必須實現com.navercorp.pinpoint.web.alarm.AlarmMessageSender類的發送郵件和SMS的方法,並配置將其注冊至Spring中。當警報觸發時, AlarmMessageSender#sendEmail和 AlarmMessageSender#sendSms 方法將會被調用。(本部分已經在前面docker安裝部署中配置好)
報警通知的詳細內容介紹請參見:https://github.com/naver/pinpoint/blob/master/doc/alarm.md
參考地址
作者:tinylk
鏈接:https://www.jianshu.com/p/5a6dc609acea
來源:簡書
