1. 程式人生 > >聽雲監控.NET Core的配置誤區

聽雲監控.NET Core的配置誤區

聽雲算是較早推出.Net Core應用效能監控的(2017年11月推出),和聽雲其他語言的監控工具一樣,也是無需開發人員介入即可實現在無需修改程式碼、無需重新編譯應用,就能深入程式碼級別的應用監控。工具雖好,但也滿滿的是坑呀,特別是按照聽雲的使用說明進行基於IIS+.Net Core的應用部署配置,發現問題還不少。

        在這裡我們只討論IIS釋出部署的方式(Windows環境),因為就這種方式說明書上是寫得最模稜兩可的。

1.下載tingyun-agent-netcore-1.1.0.exe(更正說明:這個版本不支援Core 2.0,需用最新版本的探針

2. 安裝,並配置license key

3. 更改dotnet應用啟動指令碼,增加一行 【call 安裝路徑\tingyun-enable.bat】 如下所示:

call 安裝路徑\tingyun-enable.bat
dotnet c:\interpub\myapp\myapp.dll

myapp.dll可以通過應用程式安裝路徑的配置檔案web.config中看到:

        按理以上的說明已經非常清楚了,但是問題就出在這,首先IIS部署模式下,一般不會有dotnet啟動指令碼,要求在啟動指令碼中新增一行程式碼,這無從下手呀,說好的不用開發人員介入,無需修改程式碼,有點懸了。另外說明文件中還找到以下這段話:

        這段話更讓人莫名其妙,因為IIS只是將請求轉發給dotnet core程序(IIS類似於Nginx的作用),並沒有託管程式,那麼安裝.Net探針又有什麼意義(應用效能監控的原理是通過在中間語言植入agent,以攔截方法的方式執行並實現監聽,這是基於事件觸發的,所以監聽的程式應該是.net Core應用,不應該是IIS及.net託管程式)。備註:.Net探針用來監聽標準的.Net應用及IIS,而.net Core探針才是用來監聽跨平臺的.net Core應用。

        先去問下開發人員,確認一下入口程式是否是web.config中寫的(Rexen.GDRC.Management.Web.dll),結果開發人員說那是除錯程式碼時候調的,釋出IIS後不用管這個了。可能是開發人員沒理解我的意思,我只能抱著懷疑的態度自己監聽dotnet程序(用Process Monitor),結果發現程序呼叫的入口程式就是我所說的:

        那麼按照tingyun的說明,我們呼叫tingyun-enable.bat後,再啟動IIS及相關dotnet程序就應該要能監聽到資料了,結果聽雲探針的日誌卻報錯:

        開啟tingyun-enable.bat後發現,就是聲明瞭一些變數,並且發現了監聽所用到的程式是tingyun_profiler.dll

SET TINGYUN_NETCORE_HOME=D:\Users\gavin\NetCore Profiler
SET CORECLR_ENABLE_PROFILING=1
SET CORECLR_PROFILER={8BEB2128-D285-4E1D-91B6-11ACD43EC0EE}
SET CORECLR_PROFILER_PATH=%TINGYUN_NETCORE_HOME%\x64\tingyun_profiler.dll

        以上報錯也說明了,執行完tingyun-enable.bat後所宣告的變數並沒有生效,毫無疑問這是區域性的宣告,而應用程式執行過程中,肯定是引用不到這些變數。另外就是GetAppName()方法,讓我想到了是不是能自己賦值個應用名,於是到說明文件裡真的找到了這塊:

        於是我開始意識到,tingyun-enable.bat中的都是環境變數,那麼我們首先應該配好環境變數,而不是在這裡糾結什麼時候呼叫tingyun-enable.bat。說幹就幹,把以上在bat中宣告的變數全都新增到系統變數,並且在path中加上tingyun_profiler.dll的引用路徑:

         配好環境變數,按理只要重啟應用程式就可以了,由於我也不能肯定重啟應用程式是否快捷有效,那就簡單粗暴一點吧,重啟機器:

        重啟完後,再看聽雲的監聽日誌,奇蹟出現了,竟然沒再出現上面的報錯了:

        再看一下聽雲的監控頁面,已經能看到完整的監控檢視了:

        結局是完美的,我又再一次填平了聽雲上的一個坑,上一次填過的坑是《如何在Windows下安裝聽雲NodeJs探針》。我分享的雖然只是個小小的問題處理方案,但其實想說的是我們測試人員真的應該具備這種思考能力:很多人缺乏的不是測試技術、方法和工具,而是缺乏分析能力。

         需要說明的是,.Net Core監控本身是不成熟的,因此不是所有.Net Core專案都可以實現監控,而且本文也不是為了推廣聽雲,如果對.Net Core的應用效能監控有興趣,可以關注Skywalking-netcore(開源專案)。

        更正說明:寫這篇文章時,聽雲探針還是舊版本的,現在不一定能遇到我上面所說的問題,請讀者自行鑑別。core探針1.1版本是早期的beta初版,針對sdk1.1適配的,後來core的sdk更新到2.0後,老版本探針會出現GetAppName取不到的問題,新版本探針已經修復該問題。另外,在windows上需要同時安裝.NET探針不是針對監控本身,而是因為core探針沒有做圖形介面,為了方便而使用.NET探針的啟動管理介面管理core探針的啟動禁用,就免去了啟動腳本里新增windows啟動命令的過程,不過僅對windows上的core探針有效。