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


前言

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

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

正文

1. SkyWalking簡介

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

1.1 常用術語

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

  • 服務:通俗一點理解就是一個應用程序;比如訂單服務API。
  • 服務實例:服務組中每個單獨運行的節點稱為一個實例,一個服務可以對應多個服務實例(集群); 如:一個訂單服務可以集群部署好幾個節點,這些節點就稱為服務實例;
  • 端點:請求服務的路徑,如:Http Url地址或是gRPC請求地址(gRPC定義的服務類+方法名);

通俗理解,如下圖:

image-20211017150128936

1.2 理解架構

SkyWalking 主要分為四個部分:探針、平台后端、存儲和 UI,如下圖:

img

  • 探針:專門用於收集數據,並按照SkyWalking的要求格式化對應的數據。
  • 平台后端:對收集來的數據進行聚合、分析及流處理
  • 存儲:就是數據庫,將收集的數據存儲起來,方便隨時查看和分析;主流的數據庫有 ElasticSearch、H2、MySQL、TiDB、InfluxDB等。一般我們會使用ElasticSearch,查詢速度杠杠滴。
  • UI:就是提供一個Web界面,可以很方便的查看和分析數據,各種圖表形式展示。

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

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

命令解析:

  • -p 9200:9200 -p 9300:9300 分別讓主機端口9200、9300和啟動容器的端口做映射;
  • -e "discovery.type=single-node" 單節點運行;
  • -e ES_JAVA_OPTS="-Xms64m -Xmx521m" 由於我雲服務器的內存比較小,所以設置了一個環境變量ES_JAVA_OPTS來配置使用的內存:最小64m,最大521m,否則內存不夠用,啟動不起來。
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

命令解析:

  • -p 1234:1234 -p 11800:11800 -p 12800:12800 分別讓主機端口1234、11800、12800和啟動容器的端口做映射; 11800是對接應用程序的; 12800是用來對接SkyWalking的UI數據的。
  • --link elasticsearch:elasticsearch 代表和上一步啟動elasticsearch網絡鏈接起來,可以通過容器名訪問對應服務,注意容器名和上一步一致;
  • -e SW_STORAGE=elasticsearch 設置SkyWalking的存儲方式為elasticsearch;
  • -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 配置連接elasticsearch的地址;
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

命令解析:

  • -p 8080:8080 代表主機端口8080和容器端口8080做映射;
  • --link skywalking-oap:skywalking-oap 代表和上一步啟動skywalking-oap網絡鏈接起來,可以通過容器名訪問對應服務,注意容器名和上一步一致;
  • -e SW_OAP_ADDRESS=skywalking:12800 設置UI調用的API地址,就是上一步啟動動SkyWalking后端地址,端口為12800;

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

image-20211017223823456

到這環境就搞好了,剩下就是項目集成了,以下還是搞兩個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開發的探針。

image-20211017234545199

3.3 注冊服務,配置環境變量
  • 在Startup文件中注冊服務

    image-20211017235044948

  • 配置環境變量

    這里方便測試,直接在項目中的launchSettings.json中配置就行,但如果是發布生產環境,一定要在對應環境配置環境變量。

    image-20211017234925741

3.4 執行SkyWalking命令生成配置文件

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

 dotnet skyapm config MySkyWalkingDemoTest 192.168.xxx.xxx:11800
  • MySkyWalkingDemoTest 是服務名;
  • 192.168.xxx.xxx:11800 是SkyWalking后台服務的地址,就是我們2.2步驟搭建的地址。根據真實需要配置IP就行。

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

image-20211017235744495

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

image-20211018154627526

3.5 啟動項目看效果

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

image-20211018000200664

看看SkyWalking界面展示:

image-20211018000443510

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

image-20211018000842437

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

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

image-20211018001103437

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

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

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

image-20211018004126167

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

image-20211018004315459

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

image-20211018004813883

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

參考地址:

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

總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM