【SkyWalking】服務端部署與微服務無侵入接入實戰指南
💡 SkyWalking 系列總引導
在微服務架構快速演進的今天,如何有效實現服務鏈路追蹤、性能分析、日志采集與自動化告警,成為系統穩定性的關鍵保障手段。
SkyWalking,作為 Apache 頂級開源項目,提供了完整的微服務可觀測性解決方案,覆蓋鏈路追蹤、服務監控、日志聚合、告警通知與性能剖析等能力。
本系列將結合實戰,從 0 開始搭建 SkyWalking 平臺,并實現如下目標:
- ? 搭建 SkyWalking 服務端并配置 MySQL 存儲;
- ? 微服務客戶端無侵入接入 SkyWalking;
- ? 實現鏈路級日志采集與定位分析;
- ? 配置告警規則與 Webhook 通知(如釘釘);
- ? 使用性能剖析定位慢請求/阻塞代碼。
📘 SkyWalking 系列導航
篇章 | 標題 | 鏈接 |
---|---|---|
系列一 | 【SkyWalking】服務端部署與微服務無侵入接入實戰指南 | 🔗點擊閱讀 |
系列二 | 【SkyWalking】日志如何接入,實現鏈路日志關聯分析 | 🔗點擊閱讀 |
系列三 | 【SkyWalking】配置告警規則并通過 Webhook 推送釘釘通知 | 🔗 點擊閱讀 |
系列四 | 【SkyWalking】性能剖析實戰:定位慢接口與阻塞代碼 | 🔗 點擊閱讀 |
🧭 本文為 【SkyWalking 系列】第 1 篇
👉 系列導航:點擊跳轉
一、SkyWalking 是什么
在分布式系統中,鏈路追蹤作為服務治理的重要一環,能夠幫助我們快速定位問題、分析調用鏈路。在傳統方案中,Spring Cloud Sleuth + ZipKin 是一種廣泛應用的組合,但隨著技術的發展,SkyWalking 作為一款新興的國產開源項目,也逐漸成為微服務監控領域的有力競爭者。
SkyWalking 最初由華為工程師吳晟于 2015 年發起,并在 2017 年進入 Apache 孵化器,短短兩年后就成為 Apache 頂級項目,可見其技術能力和社區認可度。
該項目支持 Dubbo、Spring Cloud、Spring Boot 等主流框架,具備如下特點:
- 無代碼侵入:通過 Java Agent 進行字節碼增強,無需修改業務代碼;
- 高性能傳輸:通信方式采用 gRPC,低延遲高吞吐;
- 功能完備:支持鏈路追蹤、服務拓撲、JVM 監控、告警機制、性能分析等;
- 可視化優秀:內置美觀直觀的 UI 界面,便于快速定位問題。
二、SkyWalking 與 Sleuth + ZipKin 如何選擇?
在實際項目中,我們常常需要在 SkyWalking 和 Sleuth + ZipKin 之間做出權衡。以下是兩者在多個維度的對比:
對比項 | SkyWalking | Sleuth + ZipKin |
---|---|---|
接入方式 | 字節碼增強,無侵入 | 需要在代碼中嵌入邏輯 |
可觀測范圍 | 支持鏈路追蹤、性能監控、JVM 指標、告警等 | 主要聚焦在鏈路追蹤 |
UI 界面 | 圖形化拓撲,界面友好,支持多維度展示 | 相對簡潔,功能單一 |
數據傳輸協議 | gRPC,性能更優 | HTTP,性能一般 |
使用推薦 | 推薦用于新項目,功能更全面 | 適用于已有 Sleuth 基礎項目 |
📌 選型建議:
如果是新架構系統,建議優先使用 SkyWalking。它的功能更豐富,部署靈活,特別適用于中大型微服務系統。
三、SkyWalking 架構解析
SkyWalking 的整體架構分為三個核心部分:探針(Agent)端、后端服務(OAP Server)和可視化界面(UI)。每個部分在整個鏈路追蹤與監控體系中扮演著關鍵角色。
1. Agent(探針)
- 部署位置:嵌入在每一個應用服務實例中,主要支持 Java(字節碼增強方式),也支持其他語言如 Node.js、PHP、Python(通過 SDK 或 Sidecar)。
- 作用:
- 自動攔截請求入口(如 Controller、Dubbo Provider 等);
- 采集調用鏈信息(Trace)、服務性能指標(Metrics)、日志數據;
- 將采集到的數據通過 gRPC 推送給 OAP Server。
- 優勢:實現無侵入式監控,對業務代碼零改動即可接入。
2. OAP Server(后端核心)
- 全稱:Observability Analysis Platform Server
- 部署方式:可單機、可集群,支持高可用和水平擴展
- 主要模塊:
- 接收模塊(Receiver):接收來自 Agent 的追蹤數據、指標數據等;
- 分析模塊(Analyzer):處理調用鏈合并、性能指標聚合、服務間拓撲構建;
- 存儲模塊(Storage):支持多種后端存儲,如 ElasticSearch、MySQL、H2,保存鏈路、指標、日志、告警信息;
- 告警模塊(Alarm):基于規則配置的指標告警機制,支持郵件、WebHook 等通知方式;
- 遙測支持(Telemetry):可將自身運行狀態輸出到 Prometheus 等系統中。
3. UI 前端(Web App)
- 展示內容:
- 服務拓撲圖:顯示服務之間的調用關系;
- Trace 追蹤:查看具體的調用鏈明細、響應時間、異常節點等;
- 指標面板:展示服務 RT、QPS、錯誤率等時間序列圖;
- 告警面板:查看觸發的告警記錄及趨勢;
- JVM 監控:內存、GC、線程等運行時指標。
- 特點:界面清晰直觀,支持搜索、過濾、歷史回溯等操作。
架構圖
說明:
看了架構圖之后,思路很清晰了:Agent 負責收集日志和傳輸數據,通過 gRPC 的方式傳遞給 OAP 進行分析,并將結果存儲到數據庫中,最終通過 UI 界面將分析后的統計報表、服務依賴關系和拓撲結構展示出來。
四、Skywalking服務搭建
1、下載安裝包
下載地址: https://archive.apache.org/dist/skywalking/
如果下載緩慢/無法下載,可關注公眾號[學鵬科技服務]
,回復skywalking
即可獲取下載鏈接
我當前使用的是8.9版本,選擇V8.9.0這個版本,進入如下圖界面,選擇編譯好的tar.gz包進行下載:
2、目錄結構
解壓之后完整目錄如下圖:
重要目錄說明
- bin:服務端啟動腳本目錄,包含啟動 OAP Server、UI 等的相關腳本。
- config:主要配置文件目錄,存放 OAP Server 和相關組件的配置。
- config-examples:配置示例目錄,提供默認和示范配置文件,方便用戶參考。
- logs:OAP 服務的日志目錄,用于存儲運行時的日志文件。
- oap-libs:OAP Server 所需依賴的庫文件目錄。
- webapp:UI 服務目錄,存放 SkyWalking Web 前端相關文件。
- tools:輔助工具目錄,包含運維和管理腳本等。
- licenses、LICENSE、NOTICE:版權和開源許可相關文件。
說明:
從 SkyWalking 8.8 版本 開始,官方發布的壓縮包中不再默認包含
agent
目錄。也就是說,agent
(Java Agent 探針)需要 單獨下載和集成,不再隨主發行包一并提供。變更背景
- 之前版本(如 8.7 及更早版本)壓縮包中會直接包含完整的
agent
目錄,方便用戶直接解壓即用。- 8.8 及之后版本,為了更靈活地發布和維護探針,拆分了 Agent 組件,使得用戶需要單獨獲取對應的 Agent 包。
影響
- 使用 8.8 及以上版本時,需要前往官方倉庫或鏡像庫單獨下載 Agent;
- 便于用戶根據實際需求選擇合適版本的 Agent,降低包體積和依賴。
獲取方式
- 訪問官方歸檔地址下載對應版本的 Agent:
https://archive.apache.org/dist/skywalking/java-agent/只需下載與
SkyWalking
版本對應的Agent
即可完成集成。
3、配置修改
啟動之前需要對配置文件做一些修改,修改如下:
1、修改OAP UI
服務啟動端口(可選,默認為8080
)
編輯webapp/webapp.yml
(10.x
以下版本都是這個名稱,10.x
版本及以上名稱為application.yml
)
我這里改成了18080
因為我的服務器8080
被占用了
2、數據持久化(可選)
默認情況下,SkyWalking 使用內嵌的 H2 數據庫作為存儲后端,但在生產環境中通常不推薦使用 H2。建議根據實際需求切換為 MySQL、ElasticSearch 等更穩定的外部存儲。
以下是將存儲方式修改為 MySQL 的配置示例:
1、前置要求:
OAP Server
默認是沒有mysql-jdbc
連接驅動的,所以配置mysql
存儲方式之前必須要將連接驅動復制到OAP Server
服務的目錄,命令如下:
cp /path/to/mysql-connector-java-8.0.16.jar oap-libs/
2、主要修改兩處:
① 設置存儲類型為 MySQL
storage:selector: ${SW_STORAGE:mysql} #這里默認是 'h2'
② 配置 MySQL 連接信息
mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://ip:3306/skywalking?rewriteBatchedStatements=true"}dataSource.user: ${SW_DATA_SOURCE_USER:root}dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
💡 配置說明:
- 上述參數可寫死,也可以通過環境變量傳入(推薦方式);
- 請確保數據庫已創建并允許 OAP Server 連接;
- SkyWalking 會在首次啟動時自動建表,無需手動初始化 SQL。
五、啟動服務
SkyWalking 的啟動腳本位于項目根目錄下的 /bin
目錄中。啟動服務有兩種方式:
方式一:分別啟動 OAP Server 與 Web UI(推薦用于生產)
啟動 OAP Server(后端分析服務)
./bin/oapService.sh
啟動 Web UI(前端界面)
./bin/webappService.sh
該方式更靈活,適合生產部署場景,可單獨管理后端和前端服務。
方式二:使用 startup.sh
一鍵啟動(適合本地調試)
./bin/startup.sh
此腳本會同時啟動 OAP Server 和 Web UI,方便開發者本地一鍵啟動所有核心組件。
📌 提示:
- 啟動順序建議先 OAP,后 UI;
startup.sh
會自動處理;- 啟動后,Web UI 默認地址為:http://[IP]:[端口];
- 可使用
tail -f logs/skywalking-oap-server.log
查看啟動日志。
六、微服務客戶端接入 SkyWalking
完成 SkyWalking 服務端部署后,下一步是將你的微服務作為客戶端接入 SkyWalking,實現全鏈路追蹤。
1、客戶端接入原理
SkyWalking 通過 Java Agent 字節碼增強技術 實現無侵入式接入,無需改動業務代碼,也無需引入依賴包。只需在啟動服務時掛載 Agent 探針,即可自動采集調用鏈數據并上報至 OAP。
2、示例微服務列表
假設我們有如下三個微服務:
服務名稱 | 描述 |
---|---|
skywalking-product | 商品微服務 |
skywalking-order | 訂單微服務 |
skywalking-gateway | 網關微服務 |
每個服務均獨立部署,通過掛載 Agent 實現鏈路追蹤。
3、Agent 下載與準備
-
SkyWalking 8.8 及以上版本,Agent 需單獨下載,地址:
https://archive.apache.org/dist/skywalking/java-agent/ -
解壓后目錄示例:
4、配置 agent.config
編輯 config/agent.config
:
collector.backend_service=127.0.0.1:11800 #改成你對應oap服務的ip和端口
5、啟動微服務掛載 Agent
啟動命令示例:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \-Dskywalking.agent.service_name=skywalking-product \-Dskywalking.collector.backend_service=127.0.0.1:11800 \-jar product-service.jar
其他服務類似,確保服務名唯一。
上述命令解析如下:
-javaagent
:指定skywalking
中的agent
中的skywalking-agent.jar
的路徑-Dskywalking.agent.service_name
:指定在skywalking
中的服務名稱,一般是微服務的`spring.application.name``- ``-Dskywalking.collector.backend_service
:指定
oap服務綁定的地址,由于陳某這里是本地,并且
oap服務默認的端口是
11800,因此只需要配置為
127.0.0.1:11800`
6、驗證
- 訪問服務,觸發調用鏈
- 登錄 SkyWalking UI,查看拓撲圖和調用鏈數據
總結
本文介紹了 SkyWalking 服務端部署與微服務客戶端無侵入式接入方法。通過 Java Agent 探針技術,快速為微服務集群實現全鏈路追蹤,提升系統的可觀測性與診斷效率。
🧩 本文為【SkyWalking系列】第 1 篇
📌 喜歡記得點贊、收藏,或關注我持續更新更多微服務實戰內容!
📮 有問題歡迎評論區討論,看到必回 🙌
👉 下一篇預告:系列2:【SkyWalking】日志如何接入,實現鏈路日志關聯分析(歡迎提前收藏)