全鏈路監控
隨着微服務架構的流行,服務按照不同的維度進行拆分,一次請求 往往需要涉及到多個服務。這些服務可能不同編程語言開發,不同 團隊開發,可能部署很多副本。因此,就需要一些可以幫助理解系 統行為、用於分析性能問題的工具,以便發生故障的時候,能夠快 速定位和解決問題。全鏈路監控組件就在這樣的問題背景下產生了。
全鏈路性能監控 從整體維度到局部維度展示各項指標,將跨應用的 所有調用鏈性能信息集中展現,可方便度量整體和局部性能,並且 方便找到故障產生的源頭,生產上可極大縮短故障排除時間。
全鏈路監控解決什么問題
• 請求鏈路追蹤:通過分析服務調用關系,繪制運行時拓撲信息,可視化展示
• 調用情況衡量:各個調用環節的性能分析,例如吞吐量、響應時間、錯誤次數
• 容器規划參考:擴容/縮容、服務降級、流量控制
• 運行情況反饋:告警,通過調用鏈結合業務日志快速定位錯誤信息
全鏈路監控選擇依據
全鏈路監控系統有很多,應從這幾方面選擇:
• 探針的性能消耗
APM組件服務的影響應該做到足夠小,數據分析要快,性能占用小。
• 代碼的侵入性 即也作為業務組件,應當盡可能少入侵或者無入侵其他業務系統, 對於使用方透明,減少開發人員的負擔。
• 監控維度 分析的維度盡可能多。
• 可擴展性 一個優秀的調用跟蹤系統必須支持分布式部署,具備良好的可擴展 性。能夠支持的組件越多當然越好。
主流系統:zipkin、skywalking、pinpoint
Pinpoint 介紹
Pinpoint是一個APM(應用程序性能管理)工具,適用於用Java/PHP編寫的大型分布式系統。
特性:
服務器地圖(ServerMap)通過可視化分布式系統的模塊和他們之間的相互聯系來理解系統拓撲。點擊某個節點 會 展示這個模塊的詳情,比如它當前的狀態和請求數量。
實時活動線程圖 (Realtime Active Thread Chart) :實時監控應用內部的活動線程。
請求/響應分布圖( Request/Response Scatter Chart ) :長期可視化請求數量和應答模式來定位潛在問題。 通過在圖表上拉拽可以選擇請求查看 更多的詳細信息。
調用棧( CallStack ):在分布式環境中為每個調用生成代碼級別的可視圖,在單個視圖中定位瓶頸和失敗點。
檢查器( Inspector ) :查看應用上的其他詳細信息,比如CPU使用率,內存/垃圾回收,TPS,和JVM參數。
Pinpoint 部署
https://github.com/naver/pinpoint
https://github.com/naver/pinpoint-docker
安裝docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce -y curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io systemctl start docker systemctl enable docker 安裝Docker-compose # sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose # docker-compose --version docker-compose version 1.23.1, build b02f1306 安裝pinpoint git clone https://github.com/naver/pinpoint-docker.git cd pinpoint-docker docker-compose pull && docker-compose up -d # docker ps -a |awk '{print $2}' ID pinpointdocker/pinpoint-quickstart pinpointdocker/pinpoint-agent:1.8.5 pinpointdocker/pinpoint-web:1.8.5 pinpointdocker/pinpoint-collector:1.8.5 flink:1.3.1 flink:1.3.1 zookeeper:3.4 zookeeper:3.4 pinpointdocker/pinpoint-hbase:1.8.5 zookeeper:3.4 pinpointdocker/pinpoint-mysql:1.8.5
-
Pinpoint 主要由 3 個組件外加 Hbase 數據庫組成,三個組件分別為:Agent、Collector 和 Web UI
-
Agent組件:用於收集應用端監控數據,無侵入式,只需要在啟動命令中加入部分參數即可
-
Collector組件:數據收集模塊,接收Agent發送過來的監控數據,並存儲到HBase
-
WebUI:監控展示模塊,展示系統調用關系、調用詳情、應用狀態等,並支持報警等功能
-
Quickstart:官方提供了一個測試用的應用
-
Pinpoint-Mysql是使用“報警”功能所必需的。它的服務器在端口13306上運行,並包含用於注冊要發送的用戶,組和警報的數據結構。如果不需要可以不安裝
瀏覽器訪問PinPoint WEB
我們啟動pinpoint-quickstart演示實例,過一會數據采集完成,可以在瀏覽器看到數據。
Pinpoint Agent部署
Tomcat: # catalina.sh CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME" Jar: java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=$AGENT_ID -Dpinpoint.applicationName=$APPLICATION_NAME xxx.jar