使用CoreProfiler/NanoProfiler實現跨平台&應用的整合性能調試


摘要

NanoProfiler是一個開源.NET性能調試類庫,CoreProfiler是其.NET Core版本的實現。在之前的一些文章中,我曾介紹過NanoProfiler的主要使用方式,以及如何為生產環境,基於ELK對應用性能進行調試和監控。不過,對於一般的用戶來說,尤其是本機開發和小團隊開發,搭建ELK,維護這套這套支持系統的穩定運行,學習曲線還是有點高。而如果只是單個app孤立的使用NanoProfiler,則大大浪費了其原本能發揮的跨應用性能調試監控的能力。

本文演示了3個不同平台的后端應用使用CoreProfiler/NanoProfiler實現跨應用的性能調試和監控。這三個應用包括.Net Core和傳統的.NET 4.5 Web項目,演示的技術包括:

  • 如何在.NET Core程序中使用CoreProfiler進行Wcf服務、Http REST服務和EntityFramework數據庫調用的性能監控;
  • 如何在傳統.NET 4.5 Web項目中使用NanoProfiler進行Wcf服務和Http REST服務調用的性能監控;
  • 如何配置CoreProfiler/NanoProfiler實現自動的跨平台&應用的整合性能調試和監控;

完整的示例源碼,可以從下面的地址下載:
https://github.com/teddymacn/cross-app-profiling-demo

示例代碼目錄結構

  • Core.UI - .Net Core Mvc 應用,用於UI呈現,調用外部Wcf服務和Http REST服務
  • Core.Api - .Net Core WebApi 應用,提供Http REST服務,使用EntityFramework進行數據訪問
  • Net45.Api - 傳統.Net 4.5 WebApi 應用,提供Wcf服務和Http REST服務,調用自己提供的Wcf服務,調用外部.Net Core Api提供的Http REST服務

示例代碼運行步驟

  1. 開發環境要求:Windows 7+,IIS7+,VS2015 Update 3,.Net Core SDK VS Tool v1.0.0+;
  2. 從github上git clone上面的示例repo;
  3. 運行run_api.cmd啟動Core.Api服務;
  4. 使用VS2015打開Net45.Api項目,按F5運行,確保頁面打開顯示正在運行;
  5. 運行run_ui.cmd啟動Core.UI服務;
  6. 在任意瀏覽器中訪問Core.UI的首頁: http://127.0.0.1:3001;
  7. 點擊打開頁面上的鏈接,進一步點擊鏈接,查看詳細的性能調試的結果;
  8. 點擊drill down/drill up鏈接,查看關聯服務調用的性能調試結果;

圖示

訪問Core.UI首頁:

訪問Core.UI首頁

查看Core.UI首頁的性能調試結果:

查看Core.UI首頁的性能調試結果

注意上圖中的drill down鏈接,點擊這些鏈接,可以drill down到Core.UI對外發出的Wcf服務和REST服務調用的性能調試結果。比如,如果我們點擊http://127.0.0.1/Net45Api/AsyncHandler.ashx旁邊的drill down鏈接:

Core.UI對外發出的Wcf服務和REST服務調用的性能調試結果

在進一步點擊http://127.0.0.1:3002/?from-Net45Api旁邊的drill down,我們可以看到從Net45.Api應用調用Core.Api的REST服務的性能調試結果:

從Net45.Api應用調用Core.Api的REST服務的性能調試結果

代碼解析

Core.UI

Core.UI的project.json中,我們可以看到對CoreProfiler和Wcf相關的nuget package的引用:

Core.UI的Startup中,我們可以看到,開啟CoreProfiler性能調試,只需要添加這一行代碼(這里的參數true表示開啟跨應用drilldown功能):

Net45ApiServiceConfiguration.cs中為Wcf服務的client添加了開啟CoreProfiler的Wcf調試的Behavior:

這個static partial方法,是.Net Core中,為由Wcf Connected Services生成的Wcf client代碼進行額外配置的標准方式,這里不做詳述。

在Core.UI/Controllers/HomeController.cs中,值得一提的是,對自定義REST請求,為使drilldown功能工作,需要添加一個header,使得兩個請求的性能調試結果能夠互相關聯:

調用Wcf服務,無需特殊處理,因為前面添加的WCF Behavior已經自動添加對應的header:

Core.Api

Core.Api因為同樣是.Net Core項目,總體配置方式和Core.UI類似,唯一額外的是,為EntityFramework,開啟了的CoreProfiler的DB profiling支持:

Net45.Api

Net45.Api是一個傳統.Net 4.5項目,在之前的NanoProfiler系列中,已經介紹過NanoProfiler在Web應用中的使用,這里不重復介紹了。這里唯一額外的是,開啟了跨應用drilldown功能,和.NetCore項目略有不同,需要左兩個步驟。

步驟1,在Web.config中添加NanoProfilerImportModule:

步驟2,在Global.asax.cs中,設置TryToImportDrillDownResult開關為true:

基本上就是這樣了,Enjoy!


免責聲明!

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



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