【SkyWalking】服務端部署與微服務無侵入接入實戰指南

【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 之間做出權衡。以下是兩者在多個維度的對比:

對比項SkyWalkingSleuth + 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:輔助工具目錄,包含運維和管理腳本等。
  • licensesLICENSENOTICE:版權和開源許可相關文件。

說明:

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】日志如何接入,實現鏈路日志關聯分析(歡迎提前收藏)


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88355.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVDS系列20:Xilinx 7系ISERDESE2原語(一)

Xilinx 7系FPGA bank的io單元如下:Hr bank比hp bank少odelaye2組件,兩者的idelaye2組件后面,都有iserdese2組件; iserdese2組件是一種專用的串并轉換器或稱解串器,用于高速源同步應用,如大部分LVDS信號解析…

【U-Boot】Shell指令

目錄 U-Boot 三個Shell U-Boot Shell Linux Shell shell腳本 總結 U-Boot Shell命令 幫助命令 部分命令分類與功能說明 一、基礎操作與信息查詢 二、內存操作 三、啟動管理 四、文件系統操作 五、設備與分區管理 六、環境變量 七、診斷與調試 八、特殊功能 九…

《Revisiting Generative Replay for Class Incremental Object Detection》閱讀筆記

摘要Abstract部分 原文 Generative replay has gained significant attention in class-incremental learning; however, its application to Class Incremental Object Detection (CIOD) remains limited due to the challenges in generating complex images with precise …

Mysql: Bin log原理以及三種格式

目錄 一、什么是 Binlog? 二、Binlog 的應用場景與案例 1. 數據恢復 (Point-in-Time Recovery) 2. 主從復制 (Master-Slave Replication) 3. 數據審計 三、Binlog 的三種格式 1. STATEMENT 模式 (Statement-Based Logging - SBL) 2. ROW 模式 (Row-Based Log…

LiteHub之文件下載與視頻播放

文件下載 前端請求 箭頭函數 //這個箭頭函數可以形象理解為,x流入(>)x*x, //自然而然>前面的就是傳入參數,>表示函數體 x > x * x//相當于 function (x) {return x * x; }//如果參數不是一個,就需要用括號()括起來…

QT5使用cmakelists引入Qt5Xlsx庫并使用

1、首先需要已經有了Qt5Xlsx的頭文件和庫,并拷貝到程序exe路徑下(以xxx.exe/3rdparty/qtxlsx路徑為例,Qt5Xlsx版本為0.3.0); 2、cmakelist中: # 設置 QtXlsx 路徑 set(QTXLSX_ROOT_DIR ${CMAKE_CURRENT_SOU…

醋酸鐠:閃亮的稀土寶藏,掀開科技應用新篇章

一、什么是醋酸鐠醋酸鐠是一種鐠的有機鹽,鐠是稀土金屬元素之一。作為一種重要的稀土化合物,醋酸鐠通常以水合物的形式存在,呈現淡黃色或無色結晶。鐠元素本身因其獨特的物理化學特性,在工業和科技領域有著廣泛應用,而…

深入解析JVM內存結構與垃圾回收機制

java是強類型高級語言JVM(Java Virtual Machine,Java虛擬機)是Java平臺的核心組件,它是一個虛擬的計算機,能夠執行Java字節碼(bytecode)。1、區域劃分JVM對Java內存的管理也是分區分塊進行&…

Java 流程控制詳解:從順序執行到跳轉語句,掌握程序邏輯設計

作為一名Java開發工程師,你一定知道,流程控制(Flow Control) 是編寫任何程序的核心。它決定了代碼的執行路徑、分支走向和循環次數。本文將帶你系統梳理 Java中的所有常用流程控制結構,包括:順序結構分支結…

面試150 環形鏈表

思路 采用雙指針法,slow指針每次走一步,fast指針每次走兩步,如果相遇的情況下,slow指針回到開始的位置,此時快慢指針各走一步,當相遇的時候也就是說明鏈表中有環。 # Definition for singly-linked list. # class ListNode: # def __init…

AI技術正在深度重構全球產業格局,其影響已超越工具屬性,演變為推動行業變革的核心引擎。

一、AI如何重塑AI的工作與行業(AI助手領域)能力升級理解與生成:基于LLM(大語言模型),AI能處理開放式問題、撰寫報告、翻譯代碼,替代部分人類知識工作。個性化交互:通過用戶歷史對話分…

Kafka的無消息丟失配置怎么實現

那 Kafka 到底在什么情況下才能保證消息不丟失呢? Kafka 只對“已提交”的消息(committed message)做有限度的持久化保證。 第一個核心要素是“已提交的消息”。什么是已提交的消息?當 Kafka 的若干個 Broker 成 功地接收到一條…

集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged

代碼可讀性低代碼 代碼規范落地難代碼格式難統一代碼質量低下 配置 ESLint ESLint 是一個用來識別 ECMAScript 并且按照規則給出報告的代碼檢測工具,使用它可以避免低級錯誤和統一代碼的風格。它擁有以下功能: 查出 JavaScript 代碼語法問題。根據配置…

尋找兩個正序數組的中位數(C++)

給定兩個大小分別為 m 和 n 的正序(從小到大)數組 nums1 和 nums2。請你找出并返回這兩個正序數組的 中位數 。算法的時間復雜度應該為 O(log (mn)) 。示例 1:輸入:nums1 [1,3], nums2 [2] 輸出:2.00000 解釋&#x…

Expected Sarsa 算法的數學原理

🌟 一、Expected Sarsa 算法的數學原理 1. 什么是 Expected Sarsa? Expected Sarsa 是一種基于 時序差分(Temporal Difference, TD)學習 的強化學習算法,用于估計 動作值函數 ( q_{\pi}(s, a) )。它是 Sarsa 算法的一種…

Vue的watch和React的useEffect

參考文章:https://zhuanlan.zhihu.com/p/686329898

idea中合并git分支

1.把本地dev代碼合并到本地master代碼在提交代碼之前,先確保dev和master都拉取了最新的代碼都進行了Git->pull了這時候確保Local的第一個分支是master分支,然后選擇dev分支 ,鼠標右鍵-》Merge dev into master這時候會提示 有合并到本地master最新的代…

《Spring 中上下文傳遞的那些事兒》Part 7:異步任務上下文丟失問題詳解

📝 Part 7:異步任務上下文丟失問題詳解 在現代 Java 應用中,異步編程已經成為提升性能、解耦業務邏輯的重要手段。無論是使用 CompletableFuture、線程池(ExecutorService)、定時任務(ScheduledExecutorSe…

大語言模型驅動智能語音應答:技術演進與架構革新

在智能客服、電話銀行等場景中,用戶時常遇到這樣的困境:“請描述您的問題...抱歉沒聽清,請重試...正在為您轉接人工”。傳統語音應答(IVR)系統受限于規則引擎與淺層語義理解,難以應對復雜多變的自然語言表達…

【Linux】內存管理

要求:1、編寫程序,實現如下功能。(1)隨機生成 1000000 個 0~1 之間的數;(2)統計分析這些數據,計算均值、方差和分布情況,分布情況按0.01 的步長進行統計;&…