SkyWalking-netcore 無入侵分散式追蹤
ofollow,noindex">SkyWalking-netcore 最近更新的版本改成了無入侵的整合方式,主要思想應該是分離開發和監測,開發只管程式碼部分,監測的問題是程式碼程式之外的工作。
基於之前 SkyWalking 分散式追蹤系統 的介紹,一些概念性的內容、環境搭建這裡就不重複說明。以下介紹都是基於 Windows 環境的,如果是 macOS/Linux ,請參考 官方文件 。
安裝 SkyWalking .NET Core Agent
首先通過以下命令安裝 SkyWalking DotNet CLI
dotnet tool install -g SkyWalking.DotNet.CLI
CLI 安裝成功之後,執行以下命令安裝 Agent 到當前機器上
dotnet skywalking install
這一步的安裝需要注意以下幾項:
- 使用管理員許可權執行 cmd;
- 必須切到 C 盤路徑下執行命令;
- 如果出現 “Access to the path ‘06806e6c49431d12b85aaa5db07b8705d5b317’ is denied” 錯誤,請刪除 “C:/Users/使用者名稱/AppData/Local/Temp/skywalking.agent.aspnetcore” 後,重新執行;
最終輸出 “ SkyWalking .NET Core Agent was successfully installed. ” 才代表成功。
建立專案
新建一個.NET Core API 專案 SkyWalking.Agent.Test,其他什麼都不需要操作。
建立配置檔案
在 SkyWalking.Agent.Test 專案根目錄下建立連線 Collector Server 的配置檔案,官方提供命令的建立方式,其實就是生成一個 skywalking.json 檔案,我們也完全可以手動新增。
dotnet skywalking config [application_code] [collector_server]
application_code:應用名 (如:SkyWalking.Agent.Test)
collector_server: server 地址 (如:localhost:11800) ,SkyWalking 的環境搭建請參考 SkyWalking 分散式追蹤系統
最終生成的 skywalking.json 如下,ApplicationCode 和 Transport.RPC/">gRPC.Servers 是我們設定的:
{ "SkyWalking": { "ApplicationCode": "SkyWalking.Agent.Test", "SpanLimitPerSegment": 300, "Sampling": { "SamplePer3Secs": -1 }, "Logging": { "Level": "Information", "FilePath": "logs\\SkyWalking-{Date}.log" }, "Transport": { "Interval": 3000, "PendingSegmentLimit": 30000, "PendingSegmentTimeout": 1000, "gRPC": { "Servers": "localhost:11800", "Timeout": 2000, "ConnectTimeout": 10000 } } } }
從原始碼中發現,配置的載入順序是先載入預設配置( 可以進入 AddSkyWalkingDefaultConfig 檢視原始碼,裡面含 skywalking.json 所有預設配置項 ),然後載入 appsettings.json、skywalking.json,所有 skywalking.json 的預設配置完全可以先去掉,需要的時候再設定,更簡潔點其實我們並需要 skywalking.json ,只需要使用 appsettings.json 就可以。
builder.AddSkyWalkingDefaultConfig(); builder.AddJsonFile("appsettings.json", true).AddJsonFile($"appsettings.{environmentProvider.EnvironmentName}.json", true); builder.AddJsonFile("skywalking.json", true).AddJsonFile($"skywalking.{environmentProvider.EnvironmentName}.json", true);
簡化版的配置如下,只需要在 appsettings.json 加入 SkyWalking 所需的配置項:
{ "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "SkyWalking": { "ApplicationCode": "SkyWalking.Agent.AspNetCore.Test", "Transport": { "gRPC": { "Servers": "localhost:11800" } } } }
實際的開發專案我們可能並不直接使用 appsettings.json 來管理所有的配置,比如我們可能使用 consul、apollo 等註冊中心來管理配置,所以個人感覺是需要支援註冊中心方式,已提交 issue
啟動專案
我們將使用命令列方式啟動專案,在啟動專案之前,有一些專案需要的環境變數需要設定一下( 如果通過VS啟動,可以在 屬性=> 除錯 => 環境變數 進行設定 ):
啟動成功後,我們可以先通過日誌檢視是否已成功連線 collector server,SkyWalking.Agent 的預設日誌在專案根目錄的 logs 資料夾下,如果發現最後顯示 Connected collector server[localhost:11800] 就代表連線成功。
接下來我們可以訪問 API 自帶的預設介面 http://localhost:5000/api/values ,多請求幾次,然後訪問 http://localhost:8080/,我們的應用已經進入監控。
總結
最開始提到最新發布的版本提供無入侵的整合方式,從整個過程來看,主要分為以下幾步:
- 將 Agent 安裝到執行的機器;
- 修改專案配置檔案,加入 SkyWalking 相關配置;
- 啟動專案請設定 SkyWalking 需要的環境變數;
關於第二步,如果 collector server 本身是在 localhost 上執行的,那就連修改專案配置檔案這一步都不需要,因為預設引數的 collector server 就是 localhost:11800,ApplicationCode 也是可以通過環境變數進行設定的(set SKYWALKING__APPLICATIONCODE=SkyWalking.Agent.AspNetCore.Test)
關於第三步,一般情況下公司可能會有 CI 工具,環境變數的設定可以在 CI 工具上完成。但問題又來了,如果沒有 CI 工具或者 CI 工具的構建流程不能隨意修改,那怎麼辦?基於這個問題,其實可以通過修改原始碼來實現,不過還是希望作者可以稍微調整支援一下,已提 issue 。