服務痛點介紹
隨着微服務架構的流行,一些微服務架構下的問題也會越來越突出,比如一個請求會涉及多個服務,而服務本身可能也會依賴其他服務,整個請求路徑就構成了一個網狀的調用鏈,而在整個調用鏈中一旦某個節點發生異常,整個調用鏈的穩定性就會受到影響。因此我們需要一個可以追蹤服務調用鏈路的工具來對服務進行接口追蹤。
面對以上情況, 我們就需要一些可以幫助理解系統行為、用於分析性能問題的工具,以便發生故障的時候,能夠快速定位和解決問題,這時候 APM Application Performance Management(應用性能管理 對企業系統即時監控以實現對應用程序性能管理和故障管理的系統化的解決方案。)工具就該閃亮登場了。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,這里主要介紹 SkyWalking ,它是一款優秀的國產 APM 工具,包括了分布式追蹤、性能指標分析、應用和服務依賴分析等。
下面是 SkyWalking 6.x 的架構圖:
工具原理說明
SkyWalking 的核心是數據分析和度量結果的存儲平台,通過 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量數據,SkyWalking Collecter 對數據進行分析和聚合,存儲到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我們可以通過 SkyWalking UI 的可視化界面對最終的結果進行查看。Skywalking 支持從多個來源和多種格式收集數據:多種語言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘測、Envoy 度量等數據格式。
整體架構看似模塊有點多,但在實際上還是比較清晰的,主要就是通過收集各種格式的數據進行存儲,然后展示。所以搭建 Skywalking 服務我們需要關注的是 SkyWalking Collecter、SkyWalking UI 和 存儲設備,SkyWalking Collecter、SkyWalking UI 官方下載安裝包內已包含,最終我們只需考慮存儲設備即可。
使用和部署
使用skywalking+elasticsearch的集成部署。
啟動Elasticsearch
Elasticsearch我們使用docker部署,因為需要設置時區,所以我們選擇了已經配置好時區的docker鏡像
導入鏡像的腳本和鏡像包已經准備好,執行命令即可。
docker run -p 9200:9200 -p 9300:9300 -e cluster.name=elasticsearch -d wutang/elasticsearch-shanghai-zone:6.6.2
啟動elasticsearch之后,會開放兩個端口,9200和9300 我們skywalking連接使用的9200端口。在瀏覽器輸入localhost:9200可以查看服務信息
其中我們要使用的cluster_name要與skywalking的Collecter nameSpace服務配置的信息一致。
啟動 Skywalking UI + Skywalking collector
tar –zxvf apache-skywalking-apm-6.1.0.tar.gz
修改config/application.yml文件配置storage:elasticsearch的環境配置
nameSpace: ${SW_NAMESPACE:"elasticsearch"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
啟動 sh startup.sh 默認端口是8080.可以修改webapp/webapp.yml修改端口號。訪問localhost :8080界面顯示如圖。然后設置agent
部署 skywalking javaagent
- 拷貝agent目錄到所需位置. 日志,插件和配置都包含在包中,請不要改變目錄結構.
- 增加JVM啟動參數, -javaagent:/path/to/skywalking-agent/skywalking-agent.jar. 參數值為skywalking-agent.jar的絕對路徑。
新的 agent package 目錄結構如下:
+-- skywalking-agent +-- activations apm-toolkit-log4j-1.x-activation.jar apm-toolkit-log4j-2.x-activation.jar apm-toolkit-logback-1.x-activation.jar ... +-- config agent.config +-- plugins apm-dubbo-plugin.jar apm-feign-default-http-9.x.jar apm-httpClient-4.x-plugin.jar ..... skywalking-agent.jar
- 啟動被監控應用.
部署 java agent FAQs
- Linux Tomcat 7, Tomcat 8
修改tomcat/bin/catalina.sh
,在首行加入如下信息.
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
- Windows Tomcat 7, Tomcat 8
修改tomcat/bin/catalina.bat
,在首行加入如下信息.
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
- JAR file
在啟動你的應用程序的命令行中添加-javaagent
參數. 並確保在-jar
參數之前添加它. 例如:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
說明:我們需要修改agent的配置,把數據發送到制定的Collecter服務上
至此skywalking部署完畢。使用客戶端發起一個請求,就能監控到請求調用的各個子系統的鏈路,以及請求耗時情況
參考文獻:Google Dapper-大規模分布式系統的基礎跟蹤設施
https://github.com/apache/skywalking/blob/5.x/docs/README_ZH.md skywalking官方中文文檔
https://github.com/apache/skywalking github地址