記一次.net core3.1 接入 Skywalking的踩坑過程


前言

Skywalking是一款APM(Application Performance Management)的工具

.net core 使用 SkyAPM.Agent.AspNetCore 接入Skywalking,Agent(探針)使用SkyAPM.DotNet.CLI

開發環境:win10+vs2019+.net core3.1+(MVC項目+WebApi項目)

測試環境:Centos+.net core3.1

 

正文

第一版

1、先安裝SkyAPM探針,dotnet tool install -g SkyAPM.DotNet.CLI

2、配置環境變量,在項目中的launchSettings.json的environmentVariables節點下面添加如下

"ASPNETCORE_ENVIRONMENT": "SkyAPM.Agent.AspNetCore",
"SKYWALKING__SERVICENAME": "Your Service Name"

3、根據Skywalking的版本添加SkyAPM.Agent.AspNetCore對應版本的包

4、生成配置文件,dotnet skyapm config sample_app 192.168.0.1:11800,sample_app替換為你的項目名稱,192.168.0.1:11800替換為你的skywalking地址

注意:生成的配置文件應該在解決方案目錄下,應該將只移動到對應的項目目錄下,並設置其屬性為 內容

5、啟動項目,查看skywalking ui,是否接收到,很遺憾我這邊很順利的接收到了

6、發布項目到測試環境,啟動成功,但是skyapm並沒有生效,因為沒有生成對應的日志

到此第一版最終倒在了測試環境的懷里

-------------------------------------分割線----------------------------------------

問題:開發環境能正常運行,測試環境不能正常運行

分析:①可能是Agent不兼容linux

   ②可能是發布導致的問題

   ③可能是環境變量的問題

   ④可能是Skywalking的版本和SkyAPM.Agent.AspNetCore的版本不匹配

驗證:①看了一下github項目簡介,這個問題未能確定

   ②由於發布是通過svn+jinkens來實現的,所以直接上傳發布的文件夾,然而還是不行,所以暫時排除該可能

   ③百度之后,發現環境變量的問題很大,因為launchSettings.json配置的環境變量ASPNETCORE_ENVIRONMENT的值為Development,只能開發環境生效,所以我通過兩種                方案來進行驗證,一是發布一個windows環境的,直接發布后再啟動,發現也沒有生成skyapm文件,說明環境變量可能有問題;二是給linux環境添加環境變量,經過一系列                  嘗試后,發現添加環境變量后,竟然能行了,到此就實錘了,是環境變量的問題,為了再次驗證,又在發布的windows版本中添加環境變量,也能行,真實錘了

   ④把SkyAPM.Agent.AspNetCore所有的包都一個一個試了一遍,然並卵,都不行

-------------------------------------分割線----------------------------------------

第二版

確定為環境變量的問題了,現在是解決問題的時候了

嘗試百度給項目設置環境變量,https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-5.0,感覺繼續往這方面研究可能會有結果

本來測試環境可以直接使用export設置環境變量,簡單粗暴,但是由於本項目是前后端分離的,有多個項目需要設置SKYWALKING__SERVICENAME,所以這個方案暫時擱置

但是,后來無意間發現可以不用設置SKYWALKING__SERVICENAME環境變量,skywalking上收到的服務名稱是根據skyapm.json中的配置來的

哈哈,那問題基本就解決了,直接給環境變量配置 export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore就行了

你以為這就完了?然而踩坑並沒有結束

在linux上直接通過dotnet命令執行是可以的,但是通過svn+jenkins的發布就不行,這是什么情況?

遇到linux環境的問題,所以就只能去找運維談談心

配置各個賬戶的環境變量,再各種嘗試

最終在我們的長時間嘗試下,發現是sudo命令的問題,因為jenkins觸發的腳步用了sudo,為什么sudo會導致這個問題

結果一系列百度,發現sudo會默認重置安全的環境變量,那么就 Defaults    !env_reset,配置為不重置,雖然這樣可能會有安全隱患

到此sudo+dotnet命令能成功了

我們再次測試發現,直接使用sh中的命令能行,但是svn+jenkins仍然不行,what?

這次只能交給運維了,jenkins我不懂啊

測試幾次后,發現了問題,jenkins是通過遠程命令執行的,遠程命令那里還有一套環境變量,和root還不一樣,再給遠程命令那邊設置環境變量,到此svn+jenkins成功

總共花了3天時間,環境變量害死人


免責聲明!

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



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