Ubuntu 22.04(WSL2)使用 Docker 安裝 Zipkin 和 Skywalking
分布式追蹤工具在現代微服務架構中至關重要,它們幫助開發者監控請求在多個服務之間的流動,識別性能瓶頸和潛在錯誤。本文將指導您在 Ubuntu 22.04(WSL2 環境)中使用 Docker 安裝兩種流行的開源追蹤工具:Zipkin 和 Skywalking。我們將提供詳細的步驟,確保即使是初學者也能輕松完成設置,并對兩者進行對比以幫助您選擇合適的工具。
什么是 Zipkin 和 Skywalking?
Zipkin
Zipkin 是一個分布式追蹤系統,最初由 Twitter 開發,基于 Google Dapper 論文設計。它通過收集服務之間的請求時間數據,幫助開發者分析延遲問題。Zipkin 提供了一個直觀的 Web 界面,允許用戶根據服務名稱、操作名稱或追蹤 ID 查詢追蹤數據,并展示服務依賴關系圖。Zipkin 支持多種編程語言和框架(如 Java、Go、Python 等),通過 HTTP 或 Kafka 等方式接收數據,默認使用內存存儲,但可配置為使用 Cassandra 或 Elasticsearch 等持久化存儲。
Skywalking
Skywalking 是一個功能更全面的開源應用性能監控(APM)工具,專為微服務、云原生和容器化架構設計。除了分布式追蹤外,它還提供服務拓撲分析、指標監控和日志收集等功能。Skywalking 支持多種語言的代理(如 Java、Python、Go 等),并通過 eBPF 提供 Kubernetes 部署的性能分析。其用戶界面提供豐富的儀表板和拓撲圖,適合復雜系統的監控。默認使用 H2 內存數據庫,但支持 Elasticsearch 等外部存儲。
Zipkin 和 Skywalking 的對比
在選擇分布式追蹤工具時,了解 Zipkin 和 Skywalking 的差異有助于您根據項目需求做出最佳選擇。以下是對兩者的詳細對比:
特性 | Zipkin | Skywalking |
---|---|---|
主要關注 | 分布式追蹤 | 應用性能監控(APM),包括追蹤、指標監控和日志收集 |
關鍵功能 | - 收集時序數據以識別延遲問題 - Web UI 支持按服務、操作等查詢追蹤 - 依賴圖展示請求路徑和錯誤 | - 分布式追蹤、拓撲分析、性能指標、告警通知 - 支持云原生和容器化架構 - 集成多種生態系統(如 OpenTelemetry) |
儀器化 | 通常需手動儀器化(如使用 Brave 庫),部分語言支持自動儀器化代理 | 主要通過代理自動儀器化,無需修改代碼 |
存儲 | 默認內存存儲;支持 Cassandra、Elasticsearch 等 | 默認 H2 內存數據庫;支持 Elasticsearch、MySQL、TiDB 等 |
易用性 | 安裝簡單,適合快速測試和小型項目 | 功能豐富,設置稍復雜,但通過 Docker Compose 管理 |
適用場景 | 小型項目或僅需追蹤功能 | 大型復雜系統,需要全面監控 |
選擇建議:
- Zipkin:如果您的項目主要需要分布式追蹤,且希望部署簡單、資源占用低,Zipkin 是理想選擇。它適合快速測試或小型微服務架構。
- Skywalking:如果您需要全面的 APM 功能,包括追蹤、指標、日志和告警,Skywalking 更適合。它在云原生和復雜系統中表現尤為出色,其自動儀器化功能簡化了集成過程。
通過權衡這些因素,您可以選擇最適合您項目規模和復雜度的工具。
前提條件
在開始之前,請確保滿足以下條件:
- 操作系統:在 Windows 的 WSL2 中運行 Ubuntu 22.04。
- Docker:已安裝 Docker,推薦使用 Docker Desktop 配置 WSL2 后端以簡化管理。
- 網絡:確保端口 9411(Zipkin)、11800、12800(Skywalking OAP)和 13800(Skywalking UI)未被占用。
- 硬件:建議至少 4GB 內存和 2 核 CPU,以確保容器運行順暢。
驗證 Docker 安裝
運行以下命令確認 Docker 是否正常工作:
docker --version
應返回類似 Docker version 20.10.0
的輸出。
安裝 Zipkin
Zipkin 的安裝非常簡單,只需運行一個 Docker 容器即可。
步驟 1:啟動 Zipkin 容器
在終端運行:
docker run -d -p 9411:9411 openzipkin/zipkin
-d
:后臺運行容器。-p 9411:9411
:映射容器 9411 端口到主機。openzipkin/zipkin
:官方 Zipkin 鏡像,默認使用最新版本。
鏡像將從 Docker Hub 拉取,Zipkin 默認使用內存存儲。
步驟 2:訪問 Zipkin UI
在瀏覽器中訪問 http://localhost:9411,您將看到 Zipkin 的 Web 界面,包括:
- 搜索追蹤:按服務名稱、操作名稱或追蹤 ID 查詢。
- 依賴圖:展示服務調用關系。
- 時間線視圖:顯示請求耗時。
若無法訪問,請檢查:
- 運行
docker ps
確認容器狀態。 - 確保端口 9411 未被占用,可調整為
-p 9412:9411
。
注意事項
- 存儲:內存存儲適合測試,生產環境建議配置 Cassandra 或 Elasticsearch。
- 性能:單容器適合測試,生產環境需優化資源分配。
安裝 Skywalking
Skywalking 部署需要運行 OAP 服務器和 UI 兩個組件。本文使用 Docker Compose 和 H2 內存數據庫簡化設置。
步驟 1:創建 docker-compose.yml 文件
在工作目錄下創建 docker-compose.yml
:
services:oap:image: apache/skywalking-oap-server:10.2.0container_name: oapports:- "11800:11800"- "12800:12800"ui:image: apache/skywalking-ui:10.2.0container_name: uidepends_on:- oapports:- "13800:8080"environment:SW_OAP_ADDRESS: http://oap:12800
oap
:運行 Skywalking OAP 服務器,映射 11800(gRPC)和 12800(HTTP)端口。ui
:運行 Skywalking UI,依賴 OAP,映射容器 8080 端口到主機 13800。SW_OAP_ADDRESS
:配置 UI 連接 OAP。
注意:Skywalking UI 使用 13800 端口而非默認 8080,因為 8080 在開發中常被 web 服務器(如 Tomcat)占用。為避免沖突,選擇不常用的 13800 端口。您可根據需要調整為其他可用端口。
步驟 2:啟動 Skywalking 服務
在文件目錄運行:
docker-compose up -d
Docker 將拉取鏡像并啟動容器。
步驟 3:訪問 Skywalking UI
在瀏覽器訪問 http://localhost:13800,您將看到 Skywalking 界面,包括:
- 儀表板:展示性能指標。
- 拓撲圖:顯示服務依賴。
- 追蹤視圖:展示請求調用鏈。
- 告警:配置異常通知。
若無法訪問,請檢查:
- 運行
docker-compose ps
確認容器狀態。 - 查看日志:
docker logs oap
或docker logs ui
。 - 確保端口 13800 未被占用,可調整為其他端口。
注意事項
- 存儲:H2 內存數據庫適合測試,生產環境建議配置 Elasticsearch。
- 版本一致性:OAP 和 UI 需使用相同版本(10.2.0)。
- WSL2 網絡:若 localhost 訪問失敗,可使用 WSL2 IP(運行
wsl hostname -I
獲取)。
WSL2 環境中的注意事項
在 WSL2 中運行 Docker 有以下考慮:
-
端口映射:WSL2 自動映射端口到 Windows localhost,但防火墻可能需允許相關端口。
-
資源分配:WSL2 默認資源有限,可在
.wslconfig
配置:[wsl2] memory=4GB processors=2
保存后運行
wsl --shutdown
重啟 WSL2。
-
端口沖突:
確保以下端口未被占用:- Zipkin:9411
- Skywalking OAP:11800、12800
- Skywalking UI:13800
若沖突,可調整端口映射。
下一步
安裝完成后,需集成代理以發送追蹤數據:
- 配置代理:為應用添加 Zipkin(如 Brave)或 Skywalking 代理。
- 發送數據:通過 HTTP、gRPC 或 Kafka 發送數據到 Zipkin(9411)或 Skywalking(11800)。
- 分析追蹤:使用 Web 界面分析延遲和依賴。
參考:
- Zipkin 快速入門
- Skywalking 文檔
結論
您已成功在 Ubuntu 22.04(WSL2)上部署了 Zipkin 和 Skywalking。Zipkin 適合輕量級追蹤,Skywalking 提供全面 APM 功能。本文使用內存存儲簡化設置,生產環境建議配置持久化存儲以確保數據持久性。
關鍵引用
- Zipkin Official Quickstart Guide
- Skywalking Backend Setup Documentation
- Docker Hub Zipkin Image Page
- Docker Hub Skywalking OAP Server Image Page
- Docker Hub Skywalking UI Image Page
- SourceForge Apache SkyWalking vs. Zipkin Comparison
- Logz.io Distributed Tracing Tools and Standards