分佈式 - 微服務必配 APM 系統,SkyWalking 讓你不迷路

前言

如今分佈式、微服務盛行,面對拆分服務比較多的系統,如果線上出現異常,需要快速定位到異常服務節點,假如還用傳統的方式排查肯定效率是極低的,因爲服務之間的各種通信會讓定位更加繁瑣;所以就急需一個分佈式鏈路追蹤系統,方便快速定位異常節點,從而針對性的處理問題。比較主流的 APM(Application Performance Management) 系統有 SkyWalking、Zipkin、PinPoint、Cat 等,這裏就先說說 SkyWalking,其他的後續再補上。

APM 系統當然不僅僅只是鏈路追蹤,還可以根據各種性能指標分析應用程序及其運行環境,以便在發生故障的時候能快速定位及解決問題。

正文

1. SkyWalking 簡介

SkyWalking 是一個開源可觀察性平臺,用於收集、分析、聚合和可視化來自服務和雲原生基礎設施 (如數據庫) 的數據,它還提供了優秀的可視化界面。SkyWalking 也是一種現代 APM,專爲雲原生、基於容器的分佈式系統而設計

1.1 常用術語

在 SkyWalking 中會經常提到服務、服務實例和端點,這裏就先來了解一下:

通俗理解,如下圖:

1.2 理解架構

SkyWalking 主要分爲四個部分:探針、平臺後端、存儲和 UI,如下圖:

img

理論暫時瞭解這麼多,實操一下更容易理解。

2. 安裝

這裏就採用 Docker 的方式進行安裝,方便快捷,如果還有小夥伴對 Docker 不是很瞭解的,可以看看我整理的 Docker 系列分享

2.1 安裝 ElasticSearch

這裏用到的存儲是 ElasticSearch,需要提前安裝,執行如下命令:

 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 --restart always -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx521m" elasticsearch:6.7.2

命令解析:

2.2 安裝 SkyWalking 的後臺服務端 (skywalking-oap),執行如下命令:
 docker run --name skywalking-oap --restart always -p 1234:1234 -p 11800:11800 -p 12800:12800 -d --link elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:8.3.0-es6

命令解析:

2.3 安裝 SkyWalking 的 UI 界面 (skywalking-ui),執行如下命令
 docker run --name skywalking-ui --restart always -p 8080:8080 --link skywalking-oap:skywalking-oap -d -e SW_OAP_ADDRESS=skywalking-oap:12800 apache/skywalking-ui:6.6.0

命令解析:

接下來如果能訪問暴露的端口就代表環境安裝好了,如下:

到這環境就搞好了,剩下就是項目集成了,以下還是搞兩個 API 來測試一把。

注:在搭建環境時要注意 elasticsearch、skywalking-oap-server、skywalking-ui 版本問題,否則很容易掉坑;就比如 skywalking-oap-server 設置環境變量 SW_STORAGE=elasticsearch 時,只能連接 elasticsearch6 等等這種細節。

3. 項目集成 SkyWalking

3.1 先安裝一個 SkyWalking 命令行工具

這個命令行工具會快速生成配置文件,執行如下命令安裝:

 # 全局安裝這個工具,後續直接用就行
 dotnet tool install -g SkyAPM.DotNet.CLI

安裝一次就行,如果已經安裝,就可以跳過此步驟。

3.2 創建項目,並引入 SkyAPM.Agent.AspNetCore 包

這個包是專門爲. NetCore 開發的探針。

3.3 註冊服務,配置環境變量
3.4 執行 SkyWalking 命令生成配置文件

在項目根目錄下執行如下命令

 dotnet skyapm config MySkyWalkingDemoTest 192.168.xxx.xxx:11800

命令執行完成後,會在項目根目錄下生成 skyapm.json 文件,可以適當根據需要更改配置內容;

默認情況下 skyapm.json 文件只要更新都會複製到打包目錄下,保險起見,可以右鍵 -> 屬性,將這個文件設置其爲始終複製或如果較新則複製。

3.5 啓動項目看效果

SkyWalking 幾乎不嵌入任何代碼,直接運行代碼,現在就可以將 API 服務進行跟蹤和監控了。如下圖:

看看 SkyWalking 界面展示:

可以進入追蹤界面看具體請求信息:

注:條件時間注意時區,往前設置時間;其實這裏可以在啓動搭建環境的時候設置時區。

點擊樹形的請求可以看詳情:

3.6 多加一個 API 服務,測測調用鏈

新建一個項目 SkyWalkingDemoTest22222,端口以 5100 啓動,其他不變;這裏沒有集成 SkyWalking,如果需要往下監控,同以上步驟集成即可;

然後簡單修改一下 SkyWalkingDemoTest 項目的接口,如下:

先運行 SkyWalkingDemoTest22222,再運行 SkyWalkingDemoTest,執行完成之後,可以去 SkyWalking 界面中看看追蹤信息,如下:

也可以通過拓撲圖看到效果:

點擊對應的節點還能顯示對應的指標數據。

參考地址:

代碼案例地址:https://gitee.com/CodeZoe/microservies-demo/tree/main/SkyWalkingDemo

總結

關於 SkyWalking 的初體驗先說這麼多,對於服務間通信複雜的系統,有了這個是不是就清晰多了,定位也就容易很多。下一篇再來看看數據庫的指標及如何配置告警,關注 “Code 綜藝圈”,和我一起學習吧;

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/hcgGv_p45YDQzOFkjNlGiw