ASP .NET Core 集成 Skywalking 實現鏈路追蹤

Skywalking部署

Skywalking簡單介紹

Skywalking是一個應用性能管理(APM)分佈式鏈路跟蹤系統,具有服務器性能監測,應用程序間調用關係及性能監測等功能,Skywalking分爲服務端、管理界面、以及嵌入到程序中的探針部分,由程序中的探針採集各類調用數據發送給服務端保存,在管理界面上可以查看各類性能數據。本文介紹服務端及管理界面的安裝。

參考文檔:

官方部署架構圖

部署Skywalking

部署Skywalking需要用到以下工具:

工具 備註 版本號
ElasticSearch ES存儲 7.13.2
skywalking-oap-server Skywalking服務端 9.2.0
skywalking-ui Skywalking UI管理界面 9.2.0

ES部署參考這篇博客,本次用到的是8.0.0版本的ES,目前的Skywalking不支持8.0版本的ES

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.0.0

Skywalking Server

鏡像地址:

https://hub.docker.com/r/apache/skywalking-oap-server

pull鏡像

docker pull  apache/skywalking-oap-server:latest

起站點

docker run --name skywalking-server -d -p 12800:12800 -p 11800:11800    -e  LANG="en_US.UTF-8"    -e SW_STORAGE=elasticsearch    -e SW_STORAGE_ES_CLUSTER_NODES=172.25.84.73:9200   -e JAVA_OPTS="-Xms64m -Xmx512m" -e SW_HEALTH_CHECKER=default  -e  SW_TELEMETRY=prometheus -e SW_ES_USER="elastic" -e SW_ES_PASSWORD="123456"   apache/skywalking-oap-server:latest 
參數 含義
-p 端口映射,Http默認端口12800,gRPC默認端口11800
LANG 語言
SW_STORAGE 指定存儲方式爲ES
SW_STORAGE_ES_CLUSTER_NODES ES訪問地址,這裏不需要加http/https,直接綁定IP+Port
JAVA_OPTS -Xms -Xmx 限制程序初始內存最大內存
SW_ES_USER ES賬號,如果ES沒有開啓認證此變量可不加
SW_ES_PASSWORD ES密碼,如果ES沒有開啓認證此變量可不加

訪問http://172.25.84.73:12800/有界面即可

Skywalking UI

UI 使用文檔地址

https://www.cnblogs.com/heihaozi/p/16350702.html

鏡像地址

https://hub.docker.com/r/apache/skywalking-ui

pull鏡像

docker pull apache/skywalking-ui:latest

起站點指定skywalking-oap-server地址

docker run --name skywalking-ui -d -p 8080:8080  -e SW_OAP_ADDRESS=http://172.25.84.73:12800  apache/skywalking-ui:latest

訪問http://172.25.84.73:8080/

.Net Core集成Skywalking

Netget安裝包

Install-Package  Elastic.Apm.NetCoreAll

新建一個skyapm.json文件,文件屬性輸出目錄選擇如果較新則複製,並填入以下內容
文件模板地址

{
  "SkyWalking": {
    "ServiceName": "asp-net-core-skyapmsample1",
    "Namespace": "",
    "HeaderVersions": [
      "sw8"
    ],
    "Sampling": {
      "SamplePer3Secs": -1,
      "Percentage": -1.0,
      "LogSqlParameterValue": false
    },
    "Logging": {
      "Level": "Information",
      "FilePath": "logs/skyapm-{Date}.log"
    },
    "Transport": {
      "Interval": 3000,
      "ProtocolVersion": "v8",
      "QueueSize": 30000,
      "BatchSize": 3000,
      "gRPC": {
        //Skywalking 地址
        "Servers": "172.25.84.73:11800",
        "Timeout": 100000,
        "ConnectTimeout": 100000,
        "ReportTimeout": 600000
      }
    }
  }
}

展開項目的Properties,打開launchSettings.json文件,在其中的環境變量中加入以下內容

"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"


項目啓動訪問API

然後在Skywalking UI中查看就可以看到API的鏈路追蹤。如果找不到數據可以把時間範圍拉長點,可能有時區問題

參考文檔地址:

https://www.cnblogs.com/sunyuliang/p/11424848.html
https://www.cnblogs.com/savorboard/p/asp-net-core-skywalking.html

.NET Core DiagnosticSource 診斷跟蹤

SkyAPM-dotnet 是 SkyWalking 在 .Net Core 端的探針實現,其主要的收集日誌的手段就是基於DiagnosticSource來進行診斷跟蹤的。

概念介紹

關於DiagnosticSource它本身是一個基於發佈訂閱模式的工作模式,由於它本身的實現方式是異步的,所以不僅僅可以把它用到日誌上,還可以用它實現異步操作,或者用它簡化實現發佈訂閱的功能。
DiagnosticSource本身是一個抽象類,我們最常用到的是它的子類DiagnosticListener,通過DiagnosticSource的Write方法實現發佈一條有具體名稱的消息,然後通過IObserver去訂閱消息。
這裏用一張圖表示

微軟內置診斷信息

在.Net Core的源碼中,微軟默認在涉及到網絡請求或處理請求等許多重要的節點都使用了DiagnosticListener來發布攔截的消息。

診斷器名稱 發佈消息名稱 描述
Microsoft.AspNetCore Hosting.BeginRequest 開始請求信息
Microsoft.AspNetCore Hosting.EndRequest 結束請求
Microsoft.AspNetCore Hosting.UnhandledException 未處理的異常
HttpHandlerDiagnosticListener System.Net.Http.Request http請求信息
HttpHandlerDiagnosticListener System.Net.Http.Exception http請求異常
HttpHandlerDiagnosticListener System.Net.Http.Response http返回信息

Skyapm 診斷解析

參考資料

https://www.cnblogs.com/wucy/p/13532534.html
https://www.cnblogs.com/yyfh/p/13769743.html
https://juejin.cn/post/6844904034063613966
https://www.jianshu.com/p/a1eb1c0aa1ef

Skywalking DiagnosticSource Neget包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章