通常我們可以依靠ApplicationInsights(以下簡稱ai)來收集比如請求(request),依賴項(dependencies),異常(exception)等資訊,但是無法收集到比如一個方法(方法內部比如沒有依賴項呼叫)的資訊。
很多時候如果一個方法很慢,我們只能根據ai分析首先是不是依賴項慢導致,如果不是,就以依賴項為節點,看這個依賴項是前面慢還是後面慢,然後在進行下一步分析。
然後又回到了效能最佳化全靠猜的地步。
ai能不能也有類似一些高階的分析工具所具有的分析程式碼某路徑耗時的功能呢?答案是肯定的。
ai有一個功能稱之為探查器,就是專門用於診斷這種程式碼級效能的,其中早期的只能在azure上才能使用(無論你是web app部署還是vm部署都可以但是必須要是在azure上的)
這個其實限制了其使用範圍,因為我司並沒有使用azure web app來承載站點而是跑在自己機房上(只能幹瞪眼流口水)
現在他有一個面向core的可以自己安裝的版本
具體地址 https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore
目前這個專案還處於beta階段,可以執行在windows和linux下
使用也很簡單,首先專案肯定要是用了ai的,而且要是2.1以上的asp.net core專案,然後在使用ai的基礎上安裝對應的包,然後新增一行程式碼即可
需要安裝一個新的ai的profiler的nuget包,註意目前該包只有pre-release版本,如果搜尋不到註意下是否勾選了show pre-release package
新增使用Profiler的程式碼
裝好之後,站點直接啟動執行即可
此時站點除了常規的ai監控外,額外獲得了profiler的能力,他會偶爾的彙報幾個profiler的包,彙報的策略目前我個人還不清楚不過可以確定這個彙報的包肯定不多
我手頭一個一天5萬多訪問量(2臺機器)的站點1天下來也就4個profiler
眾所周知的是ai是基於資料量收費的,如果過多的包這個荷包子是個問題,我這邊目前也是一個專案先扔上去看下會導致多少費用增長,目前看起來還好。
先看看profiler的效果,如果收集到了profiler的話,會在效能面板裡顯示出來,嗯。我這裡只有4個
點進去可以看到ai所收集到的profiler的詳細資訊
這裡可以看到我整個流程的一個耗時(當前選中的這個)是300多ms,然後這裡可以細化到每個方法的耗時是多少,我就隨便找一個分支不斷點下去
從上圖我們可以看到我這每個操作流程中的耗時,具體可以參考官方檔案 https://docs.microsoft.com/zh-cn/azure/azure-monitor/app/profiler-overview 如何從中分析出你的程式碼
朋友會在“發現-看一看”看到你“在看”的內容