鏈路追蹤:SkyWalking 深度分析!
在 分布式鏈路追蹤,一文幫你掌握它! 這篇文章中,我們詳細(xì)地分析了分布式鏈路追蹤的原理,這篇文章,我們將分析一款開源的分布式鏈路追蹤框架:Apache SkyWalking。
一、SkyWalking 原理
1. 架構(gòu)
SkyWalking 由中國開源社區(qū)發(fā)起,并于2019年捐贈給 Apache 軟件基金會,成為其頂級項目之一。SkyWalking 的整體架構(gòu)由四個主要組件組成:探針(Agent)、收集層(Collector)、數(shù)據(jù)存儲層(Storage)、和 UI 層。各組件之間通過網(wǎng)絡(luò)通信,協(xié)同工作,實現(xiàn)數(shù)據(jù)的收集、傳輸、存儲、分析與展示。整體架構(gòu)如下圖:
SkyWalking 架構(gòu)圖
- 探針(Agent):部署在被監(jiān)控的服務(wù)實例上,負(fù)責(zé)收集應(yīng)用的性能數(shù)據(jù)和調(diào)用鏈信息。
- 收集層(Collector):接收探針發(fā)送的數(shù)據(jù),對數(shù)據(jù)進(jìn)行處理、聚合和轉(zhuǎn)發(fā)。
- 數(shù)據(jù)存儲層(Storage):存儲經(jīng)過處理的性能指標(biāo)和追蹤數(shù)據(jù),支持多種存儲后端,如 Elasticsearch、H2、MySQL、TiDB 等。
- UI 層:提供用戶界面,通過圖形化的方式展示監(jiān)控數(shù)據(jù)和分析結(jié)果,供用戶查看和分析。
2. 數(shù)據(jù)收集
SkyWalking 通過探針在被監(jiān)控的應(yīng)用中植入代碼,攔截應(yīng)用的請求與響應(yīng)過程,收集相關(guān)的性能指標(biāo)和調(diào)用鏈信息。探針主要有以下幾種類型:
- Agent:針對不同語言和框架的探針,如 Java Agent、.NET Agent、Python Agent、Node.js Agent 等。
- APM 插件:支持常見框架和技術(shù),如 Spring、Dubbo、gRPC、HTTP 等,自動注入探針代碼,捕獲關(guān)鍵的性能數(shù)據(jù)和調(diào)用關(guān)系。
- 擴(kuò)展機(jī)制:允許用戶通過自定義插件擴(kuò)展探針功能,滿足特定的監(jiān)控需求。
數(shù)據(jù)收集的核心指標(biāo)包括:
- 指標(biāo)數(shù)據(jù):如響應(yīng)時間、吞吐量、失敗率、CPU 使用率、內(nèi)存使用率等。
- 調(diào)用鏈數(shù)據(jù):記錄請求在分布式系統(tǒng)中的流轉(zhuǎn)路徑,包括各個服務(wù)的調(diào)用關(guān)系、耗時等信息。
3. 數(shù)據(jù)處理與存儲
收集到的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)?SkyWalking 的收集層(Collector)。Collector 負(fù)責(zé)接收、解析和處理這些數(shù)據(jù),包括去重、聚合、過濾等操作,然后將其存儲到后端的存儲系統(tǒng)中。
SkyWalking 的數(shù)據(jù)處理機(jī)制具有高度的擴(kuò)展性和靈活性,支持多種存儲后端,使得用戶可以根據(jù)自身需求選擇最合適的存儲方案。常見的存儲后端包括:
- Elasticsearch:適合大規(guī)模、高并發(fā)的數(shù)據(jù)存儲和快速查詢。
- H2:輕量級嵌入式數(shù)據(jù)庫,適用于小規(guī)模或測試環(huán)境。
- MySQL / TiDB:關(guān)系型數(shù)據(jù)庫,適合需要事務(wù)支持和復(fù)雜查詢的場景。
除了存儲,Collector 還負(fù)責(zé)對數(shù)據(jù)進(jìn)行索引和分片,優(yōu)化查詢性能。此外,Collector 可以接入消息隊列,如 Kafka,實現(xiàn)數(shù)據(jù)的異步傳輸和高可用性。
4. 數(shù)據(jù)展示與分析
SkyWalking 的 UI 組件提供了豐富的數(shù)據(jù)可視化功能,幫助用戶直觀地理解系統(tǒng)的運(yùn)行狀況和性能瓶頸。其主要功能包括:
- 服務(wù)拓?fù)洌赫故靖鱾€服務(wù)實例之間的調(diào)用關(guān)系,幫助用戶了解系統(tǒng)的整體架構(gòu)和關(guān)鍵依賴。
- 調(diào)用鏈分析:基于 Tracing 數(shù)據(jù),展示單個請求的詳細(xì)調(diào)用路徑,以及各個環(huán)節(jié)的耗時和性能指標(biāo)。
- 指標(biāo)分析:提供實時和歷史的性能指標(biāo)圖表,如響應(yīng)時間趨勢、吞吐量變化、資源使用情況等。
- 告警管理:根據(jù)預(yù)設(shè)的規(guī)則,對異常情況進(jìn)行實時告警,幫助運(yùn)維快速響應(yīng)和處理故障。
- 日志聚合:整合分布式系統(tǒng)中的日志信息,輔助故障排查和性能優(yōu)化。
二、使用方式
1. 部署方式
SkyWalking 支持多種部署方式,可以根據(jù)具體的業(yè)務(wù)需求和系統(tǒng)架構(gòu)選擇最適合的方案。
- 單節(jié)點部署:適用于小規(guī)模測試和開發(fā)環(huán)境,所有組件(Collector、Storage、UI)部署在同一節(jié)點上。
- 分布式部署:適用于生產(chǎn)環(huán)境,支持將不同組件部署在不同節(jié)點上,提升性能和可用性。
- 容器化部署:支持通過 Docker 和 Kubernetes 等容器編排工具部署,方便與云原生環(huán)境集成。
- 混合云部署:支持跨多個數(shù)據(jù)中心和云環(huán)境的部署,滿足復(fù)雜的企業(yè)級需求。
2. 使用 Docker 部署
SkyWalking 提供了官方的 Docker 鏡像,簡化了部署流程。以下是通過 Docker Compose 快速部署 SkyWalking 的步驟:
(1) 安裝 Docker 和 Docker Compose
首先確保系統(tǒng)已安裝 Docker 和 Docker Compose??梢酝ㄟ^以下命令檢查版本:
docker --version
docker-compose --version
(2) 下載 Docker Compose 文件
從 SkyWalking 官方倉庫下載 docker-compose.yml 文件,或者根據(jù)需求自行編寫。
(3) 啟動 SkyWalking 服務(wù)
在 docker-compose.yml 文件目錄下運(yùn)行:
docker-compose up -d
(4) 訪問 SkyWalking UI
默認(rèn)情況下,SkyWalking UI 綁定在 8080 端口,可以通過瀏覽器訪問 http://localhost:8080 查看監(jiān)控數(shù)據(jù)。
3. 集成方法
SkyWalking 提供多種集成方法,適用于不同的編程語言和框架,這里以 Java 語言為例,介紹如何集成方式。
對于 Java 應(yīng)用,SkyWalking 提供了 Java Agent,可以通過以下步驟進(jìn)行集成:
(1) 下載 Agent
從 SkyWalking 官方網(wǎng)站下載最新版本的 Java Agent。
(2) 配置應(yīng)用啟動參數(shù)
將 Agent 包含在應(yīng)用的啟動參數(shù)中,例如:
java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.agent.collector_backend_service=localhost:11800 -jar your-app.jar
其中,service_name 是應(yīng)用的服務(wù)名,collector_backend_service 是 SkyWalking Collector 的地址。
(3) 啟動應(yīng)用
啟動應(yīng)用后,Agent 會自動攔截應(yīng)用的請求,采集性能數(shù)據(jù)并發(fā)送到 Collector。
4. 配置與優(yōu)化
合理的配置和優(yōu)化可以提升 SkyWalking 的性能和使用體驗。以下是一些常見的配置和優(yōu)化建議:
(1) 采樣率設(shè)置
設(shè)置合適的采樣率,平衡數(shù)據(jù)的全面性和系統(tǒng)的性能開銷。采樣率過高會增加網(wǎng)絡(luò)和存儲的壓力,過低則可能遺漏關(guān)鍵的性能數(shù)據(jù)。
collector:
logging:
sampling_rate: 1.0 # 范圍 0.0 - 1.0
(2) 存儲后端選擇
根據(jù)系統(tǒng)的規(guī)模和查詢需求選擇合適的存儲后端。Elasticsearch 適用于大規(guī)模數(shù)據(jù)和復(fù)雜查詢,H2 適合小規(guī)模和測試環(huán)境,MySQL/TiDB 適合需要事務(wù)支持的場景。
(3) 分片與索引優(yōu)化
針對存儲后端進(jìn)行分片和索引優(yōu)化,提高數(shù)據(jù)的寫入和查詢效率。例如,對于 Elasticsearch,可以根據(jù)數(shù)據(jù)量和查詢模式調(diào)整分片數(shù)量和副本配置。
(4) 資源分配與監(jiān)控
為 SkyWalking 的各個組件(Collector、Storage、UI)分配足夠的資源(CPU、內(nèi)存、磁盤),并通過監(jiān)控工具實時監(jiān)控其運(yùn)行狀況,避免因資源不足導(dǎo)致的性能瓶頸。
(5) 高可用部署
在生產(chǎn)環(huán)境中,建議部署多個 Collector 實例,通過負(fù)載均衡器進(jìn)行流量分發(fā),確保系統(tǒng)的高可用性和容錯性。
(6) 安全配置
對 SkyWalking 的通信和訪問進(jìn)行安全配置,如啟用 SSL/TLS 加密、設(shè)置訪問控制和權(quán)限管理,保護(hù)監(jiān)控數(shù)據(jù)的安全性。
5. 常用功能介紹
SkyWalking 提供了豐富的功能,覆蓋了分布式系統(tǒng)的各個方面。以下是一些常用功能的詳細(xì)介紹:
- 服務(wù)拓?fù)洌?服務(wù)拓?fù)湔故玖讼到y(tǒng)中所有服務(wù)之間的調(diào)用關(guān)系,包括服務(wù)實例、依賴關(guān)系和通信流量。用戶可以通過拓?fù)鋱D快速了解系統(tǒng)的整體架構(gòu),識別關(guān)鍵服務(wù)和潛在的性能瓶頸。
- 分布式追蹤:SkyWalking 通過分布式追蹤技術(shù),記錄請求在各個服務(wù)之間的流轉(zhuǎn)路徑,包括每個服務(wù)的響應(yīng)時間、處理邏輯和資源消耗。用戶可以查看單個請求的詳細(xì)調(diào)用鏈,定位性能問題和故障根源。
- 指標(biāo)分析:提供全面的性能指標(biāo)監(jiān)控和分析功能,如響應(yīng)時間、吞吐量、失敗率、資源使用情況(CPU、內(nèi)存、磁盤等)。用戶可以通過圖表和報表直觀地了解系統(tǒng)的運(yùn)行狀況和歷史趨勢。
- 告警管理:支持基于閾值、異常檢測和自定義規(guī)則的實時告警功能。當(dāng)系統(tǒng)出現(xiàn)異常情況時,SkyWalking 會及時發(fā)送告警通知,幫助運(yùn)維團(tuán)隊快速響應(yīng)和處理問題。告警通知可以通過多種渠道發(fā)送,如郵件、Slack、釘釘?shù)取?/li>
- 日志聚合:通過與日志系統(tǒng)(如 ELK、Fluentd 等)集成,實現(xiàn)日志的集中采集、存儲和分析。用戶可以在 SkyWalking 中關(guān)聯(lián)日志數(shù)據(jù)和追蹤數(shù)據(jù),提升故障排查的效率。
- 拓?fù)浞治觯禾峁┓?wù)間通信的拓?fù)浞治龉δ?,幫助用戶識別系統(tǒng)中的熱點服務(wù)、關(guān)鍵依賴和潛在的單點故障。
- 性能診斷:通過對請求性能的深入分析,識別系統(tǒng)的性能瓶頸,提供優(yōu)化建議。例如,定位高響應(yīng)時間的接口、資源消耗過大的服務(wù)等。
- 系統(tǒng)健康檢查:提供系統(tǒng)運(yùn)行狀態(tài)的健康檢查,監(jiān)控各個組件的運(yùn)行狀況,如內(nèi)存使用率、CPU 負(fù)載、磁盤空間等,確保系統(tǒng)的穩(wěn)定性和可靠性。
三、優(yōu)缺點
1. 優(yōu)點
- 開源且活躍的社區(qū)支持:SkyWalking 是 Apache 基金會的頂級項目,擁有活躍的社區(qū)和豐富的文檔資源。用戶可以通過社區(qū)獲取技術(shù)支持、交流經(jīng)驗,并參與項目的發(fā)展。
- 多語言支持:SkyWalking 支持 Java、.NET、Node.js、Python 等多種編程語言,適用于多語言混合的微服務(wù)架構(gòu)。
- 豐富的插件機(jī)制:提供了豐富的探針和插件,支持多種框架和技術(shù),如 Spring、Dubbo、gRPC、HTTP、數(shù)據(jù)庫等,方便用戶快速集成和擴(kuò)展功能。
- 強(qiáng)大的數(shù)據(jù)分析與可視化:提供全面的服務(wù)拓?fù)?、分布式追蹤、指?biāo)分析等可視化功能,幫助用戶直觀地了解系統(tǒng)的運(yùn)行狀況和性能瓶頸。
- 高擴(kuò)展性與靈活性:SkyWalking 具有高度的擴(kuò)展性,支持多種存儲后端和部署方式,滿足不同規(guī)模和需求的系統(tǒng)監(jiān)控。
- 高可用與容錯機(jī)制:支持分布式部署和負(fù)載均衡,確保系統(tǒng)的高可用性和容錯能力,適用于生產(chǎn)級別的應(yīng)用場景。
- 豐富的告警與通知機(jī)制:提供多種告警配置選項和通知渠道,幫助用戶及時發(fā)現(xiàn)和響應(yīng)系統(tǒng)異常,提高運(yùn)維效率。
- 集成多種監(jiān)控數(shù)據(jù):除了分布式追蹤,SkyWalking 還集成了指標(biāo)監(jiān)控和日志聚合,提供全面的系統(tǒng)可觀測性。
2. 缺點
- 配置復(fù)雜:對于初次接觸 SkyWalking 的用戶來說,系統(tǒng)的部署和配置可能較為復(fù)雜,尤其是在分布式和高可用性部署的場景下,需要較多的配置和調(diào)優(yōu)。
- 資源消耗較高:在大規(guī)模和高并發(fā)的系統(tǒng)中,SkyWalking 的 Collector 和 Storage 組件可能會消耗較多的資源(CPU、內(nèi)存、磁盤),需要合理規(guī)劃和分配資源。
- 學(xué)習(xí)曲線較陡:由于功能豐富,SkyWalking 的使用和操作需要一定的學(xué)習(xí)成本,尤其是對于數(shù)據(jù)分析和告警配置等高級功能。
- 存儲后端限制:雖然 SkyWalking 支持多種存儲后端,但不同的存儲系統(tǒng)在性能、擴(kuò)展性和功能上存在差異,用戶需要根據(jù)實際需求選擇合適的存儲方案。部分存儲后端在大規(guī)模數(shù)據(jù)的寫入和查詢時表現(xiàn)可能不如預(yù)期。
- 生態(tài)系統(tǒng)集成:雖然 SkyWalking 支持與常見的監(jiān)控工具(如 Prometheus、Grafana)集成,但在某些特定場景下,可能需要額外的開發(fā)和定制工作。
- 社區(qū)支持相對較新:相較于一些成熟的 APM 工具(如 Jaeger、Zipkin),SkyWalking 的社區(qū)規(guī)模和活躍度相對較小,部分高級功能的支持和文檔可能不足。
- 高級功能復(fù)雜:某些高級功能(如自定義告警規(guī)則、復(fù)雜的拓?fù)浞治觯┬枰钊肜斫?SkyWalking 的內(nèi)部機(jī)制和配置,對于缺乏相關(guān)經(jīng)驗的用戶來說,可能較難上手。
四、總結(jié)
本文,我們分析了鏈路追蹤框架 SkyWalking的工作原理以及如何使用它,SkyWalking 是一款開源的分布式追蹤和應(yīng)用性能監(jiān)控工具,如果工作中我們想對分布式系統(tǒng)進(jìn)行性能分析和監(jiān)控,那么 SkyWalking 是一個不錯的選擇。