版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。歡迎通路我的部落格 https://blog.csdn.net/smooth00/article/details/80108827
聽雲算是較早推出.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探針有效。