使用pinpoint進行SpringCloud服務鏈監控
前言
在使用微服務架構時,客戶的一個請求可能會經過多個微服務、模組、中介軟體,那麼如何確定客戶端的一次操作背後呼叫了哪些微服務、模組、中介軟體,呼叫的先後順序是怎樣的,每個服務的效能如何?隨著業務系統日趨複雜,系統中需要呼叫鏈的監控來解決這個問題。
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映象
docker build -t tinylk/pinpoint-web:1.8.2 . docker build -t tinylk/pinpoint-hbase:1.8.2 . docker build -t tinylk/pinpoint-collector:1.8.2 . 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– 視覺化的方式顯示服務的依賴關係及呼叫計數。.

ServerMap
CallStack– 每次請求的呼叫過程,檢視故障點及瓶頸。

CallStack
Inspector- 檢視應用程式的其他詳細資訊,如CPU使用情況,記憶體/垃圾收集,TPS和JVM引數。

Inspector
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