一、SkyWalking核心介紹
1. 什么是SkyWalking?
Apache SkyWalking是一款國人主導開發的開源APM(應用性能管理)系統,2015年由吳晟創建,2017年進入Apache孵化器,2019年畢業成為Apache頂級項目。它通過分布式追蹤、服務網格遙測分析、指標聚合和可視化一體化解決方案,提供分布式系統的觀測性能力。
核心特點:
-
多語言自動探針:支持Java、.NET Core、Node.js、PHP、Golang等十余種語言
-
服務拓撲自動發現:動態繪制服務間調用關系圖
-
細粒度性能分析:支持方法級代碼執行追蹤
-
多維度監控:整合Metrics、Logging、Tracing三大觀測支柱
-
云原生友好:完美支持Kubernetes、Service Mesh環境
2. APM系統核心價值
傳統監控系統(如Zabbix、Prometheus)與APM系統的對比:
維度 | 傳統監控系統 | APM系統 |
---|---|---|
監控焦點 | 硬件/系統級指標 | 應用內部執行過程 |
數據粒度 | 服務級別 | 代碼方法級別 |
核心能力 | 異常告警 | 性能瓶頸診斷 |
典型指標 | CPU/內存/磁盤使用率 | 調用鏈追蹤、事務響應時間 |
問題定位深度 | 知道"有問題" | 知道"為什么有問題" |
SkyWalking通過分布式追蹤技術,可以還原一個請求在微服務架構中的完整流轉路徑,精確到每個服務的代碼執行耗時,這正是解決"慢請求"問題的關鍵。
二、技術架構深度解析
1. 整體架構組成
- 上部分?Agent?:負責從應用中,收集鏈路信息,發送給 SkyWalking OAP 服務器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數據信息。而我們目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 數據,傳遞給服務器。
- 下部分?SkyWalking OAP?:負責接收 Agent 發送的 Tracing 數據信息,然后進行分析(Analysis Core) ,存儲到外部存儲器( Storage ),最終提供查詢( Query )功能。
- 右部分?Storage?:Tracing 數據存儲。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多種存儲器。而我們目前采用的是 ES ,主要考慮是 SkyWalking 開發團隊自己的生產環境采用 ES 為主。
- 左部分?SkyWalking UI?:負責提供控臺,查看鏈路等等。
數據流向:
核心組件:
-
Agent:駐留在應用進程內的探針,通過字節碼增強技術收集數據
-
OAP Server:可集群部署的觀測分析平臺,負責數據聚合、計算和存儲
-
Storage:支持Elasticsearch、MySQL、TiDB、H2等多種存儲后端
-
UI:功能強大的可視化控制臺
2. 探針工作原理
以Java探針為例,其通過Java Agent機制實現無侵入式埋點:
// 典型字節碼增強示例(簡化版)
public class TracingInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {@Overrideprotected ClassMatch enhanceClass() {return byName("org.apache.dubbo.proxy.Invoker");}@Overridepublic ConstructorInterceptPoint[] getConstructorsInterceptPoints() {// 方法攔截點定義}
}
這種技術使得業務代碼無需任何修改即可獲得監控能力,相比CAT等需要代碼埋點的方案具有明顯優勢。
三、競品對比分析
主流APM系統功能對比
特性 | SkyWalking | Zipkin | Pinpoint | CAT |
---|---|---|---|---|
實現方式 | 字節碼增強 | 攔截請求 | 字節碼增強 | 代碼埋點 |
代碼侵入性 | 無 | 低 | 無 | 高 |
調用鏈粒度 | 方法級 | 接口級 | 方法級 | 代碼級 |
JVM監控 | 支持 | 不支持 | 支持 | 支持 |
服務拓撲 | 自動生成 | 無 | 自動生成 | 需配置 |
存儲擴展性 | 支持多DB | 有限 | HBase專用 | 復雜 |
告警功能 | 完善 | 無 | 基礎 | 完善 |
性能基準測試
根據官方測試報告(單節點OAP,ES存儲):
四、核心功能詳解
1. 分布式追蹤能力
-
全鏈路追蹤:跨進程、跨線程的請求跟蹤
-
智能采樣:動態調整采樣率平衡性能與數據完整性
-
異常標記:自動標識調用鏈中的錯誤節點
2. 服務拓撲分析
自動生成的服務依賴圖可顯示:
-
服務間調用關系
-
流量方向與強度
-
健康狀態(顏色標識)
-
關鍵指標(成功率、延遲)
3. 性能剖析
-- 示例:查詢慢事務Top 5
SELECT service_name, avg_latency
FROM endpoint_avg
WHERE start_time > NOW() - 1h
ORDER BY avg_latency DESC
LIMIT 5
4. 告警體系
支持基于OLAP引擎的多維度告警規則:
-
服務響應時間閾值
-
錯誤率突增檢測
-
服務心跳丟失
-
JVM內存溢出預警
告警渠道覆蓋:
-
郵件
-
Webhook(支持釘釘、企業微信)
-
Slack
-
PagerDuty
五、典型應用場景
1. 微服務性能診斷
-
定位跨服務調用的性能瓶頸
-
分析分布式事務超時原因
-
識別不合理的服務依賴
2. 云原生環境監控
-
Kubernetes Pod間通信分析
-
Service Mesh(Istio/Linkerd)可觀測性
-
容器資源使用關聯分析
3. 生產環境運維
-
灰度發布效果驗證
-
突發流量影響評估
-
容量規劃數據支持
六、SkyWalking環境搭建
1.SkyWalking下載
下載地址:Downloads | Apache SkyWalking
Skywalking主要是下載兩個包:SkyWalking APM和Java Agent,Skywalking APM提供后端服務和UI服務,Java Agent集成進應用進行數據收集傳輸。
SkyWalking APM
Java Agent
2.SkyWalking部署(Windows)
SkyWalking APM說明
SkyWalking APM解壓后得到apache-skywalking-apm-bin文件,重點關注以下3個目錄:
- bin目錄下是啟動腳本,一般用startup命令啟動
- config目錄下是配置文件,主要需要關注的是application.yml文件,里面有存儲策略、服務端口及查詢策略的配置信息。
Java Agent說明
Java Agent解壓后得到skywalking-agent文件:
- skywalking-agent.jar:探針包,使用了java agent技術,可以攔截java應用的執行。
- plugins目錄:這個目錄下主要放日志采集的插件,并且支持自定義插件。skywalking官方已經開發了大部分框架的插件,例如springmvc、dubbo等等。這個設計給skywalking賦予了極強的擴展性。
- optional-plugins:備用插件庫,這里的插件在執行時不會被加載,只有放在plugins目錄下的插件才會被加載。這個目錄相當于倉庫,需要啟用什么功能的日志采集,就把對應的插件拷貝到plugins目錄。同理,如果想要不采集某種日志,就把對應的插件從plugins目錄中刪掉即可。
- config目錄:這里是探針和插件的配置。比如說配置應用名稱(會體現在UI中)。