(ETW) Event Tracing for Windows 入門 (含pdf下載)

 

內容提綱

• ETW 介紹

• ETW 使用

• ETW 監控本機Demo

• ETW 監控遠程機器的思路

• 底層類庫:EventSource 介紹

• 底層類庫:TraceEvent 介紹

ETW 是什麼?

1.Event Tracing for Windows (ETW):是由操做系統提供的一種通用的,系統開銷較低(與性能日誌和警報相比)的事件追蹤手段,用以監控具備負載的系統的性能。 

2.ETW主要用於必須頻繁記錄事件、錯誤、警告或審覈的服務器應用程序。ETW提供用戶模式的應用程序和內核模式的設備驅動程序所觸發的事件追蹤機制。此外,ETW還可以動態地啓用或者禁用日誌記錄,便於進行詳細的追蹤,而無需從新啓動操做系統或者應用程序。

 

ETW 的歷史

1.ETW最早在Windows 2000中被引入。自那時之後,各類Windows操做系統核心和服務組件都經過ETW記錄其活動,它如今是Windows平臺上的關鍵系統儀表技術之一。在Windows 7中,ETW獲得了進一步的加強。 

2.正是基於ETW的優秀性能和強大功能,愈來愈多的第三方應用程序開始放棄本身的日誌系統,逐漸開始使用ETW來追蹤和記錄其狀態和活動,從而進行性能調優或者是進行應用程序的平常維護。

 

爲何要用事件追蹤日誌?

目前的軟件系統變得日益龐大和複雜,大量組合和工做負載特徵的不斷變化也增長了各類軟件故障診斷的難度,軟件的開發和管理隨之成爲一項艱鉅的挑戰。應用程序事件追蹤日誌在此方面尤其重要。 

v針對某些關鍵的錯誤狀態添加的智能檢測手段能夠極大地縮短故障的定位、調試、分析時間;

v對於不易重現的問題提供數據依據;

v有助於解決性能問題,發現開發階段未預見到的瓶頸;

v可使用各類管理工具從事件跟蹤日誌中得出統計數據,以用於容量規劃和趨勢分析。

 

ETW 的優點

v 提供程序與跟蹤會話相分離,應用程序的故障(發生崩潰或掛起)不會對跟蹤形成影響。

v 可以動態地啓用和禁用日誌記錄,輕鬆地在實際生產環境下進行詳細跟蹤,而無需從新啓動系統或從新啓動應用程序。

v 在關閉事件跟蹤時間幾乎不消耗系統資源;對比其餘事件追蹤技術,其性能優點明顯.

v 可自定義消息格式,便於擴展;並且自定義格式有助於日誌數據的保密。

v 日誌記錄機制使用每處理器的緩衝區,由異步寫線程將這些緩衝區寫入磁盤。這樣,大型服務器應用程序在寫入事件時所受的干擾可以降至最小。

v ETW 使用內核中實現的緩衝和日誌記錄機制,提供對用戶模式應用程序和內核模式設備驅動程序引起的事件的跟蹤機制。

v 收集事件的時間戳的時鐘分辨率可精確到100 ns;系統可提供 10 ms;100 ns;處理器時鐘週期三種方式。

v ETW自Windows 2000引入操做系統, 在 Windows Vista™ 以後引入了統一的事件提供程序模型和 API。提供了一種一致的、簡單易用的機制。

 

ETW系統構成

整個ETW系統由Provider,Customer和Controller三個部分構成: 

• Provider

   所謂的Provider,就是事件的提供者,它能夠是系統組件,驅動程序或者是咱們開發的應用程序。首先,它須要向系統進行註冊一個Event Trace,而後當這個Provider被Controller啓動(Enable)後,它就能夠開始向相應的Event Trace Session發送事件了。 

• Controller

     顧名思義,Controller就是一個控制器。它的主要任務有兩個:一是Event Trace Session的控制管理。它利用StartTrace在內存中建立一個Event Trace session,這樣Provider就知道該往哪裏發生事件。而Controller也會負責將Session裏記錄的事件送到Consumer。Controller的第二個任務就是對Provider進行管理,啓動或是中止Provider。爲了不額外的開銷,Provider不會一直都在工做,只有當被Enable的時候,纔開始工做。 

• Consumer

   Consumer實時地從Event Trace Session或者是日誌文件中訂閱事件。Consumer主要的做用是提供Event Trace Callback。咱們能夠設計一個通用的callback來處理全部的事件,也能夠爲特定的咱們感興趣的事件設計callback。對於通用事件的callback,咱們能夠在OpenTrace的時候經過參數指定,而對於特定時間的callback,則能夠經過SetTraceCallback指定。

 

解析ETW生成的文件

• ETW最後生成一個.etl文件(能夠理解爲一個壓縮文件),而後再來分析這個文件,轉換爲普通人能夠看明白的信息,來判斷哪裏出了問題。 

• PerfView.exe,是專門分析ETW信息的性能分析工具,能夠用來解析etl文件。 

• 也能夠自行編寫程序解析etl文件,並生成相應格式的日誌記錄,例如:xml文件。 

 

ETW 監控本機 Demo

此Demo至少要由三部分組成:

• 一個待監控的應用程序(數據提供者,能夠是一個WinForm程序)

•  一個控制事件跟蹤會話的控制程序(Controler,能夠是一個WinForm程序)

• 用於解析生成的etl文件的程序(閱讀器,能夠是一個WinForm程序)

ETW 監控遠程機器的思路

此方案由四部分組成:

• 遠程機器上:待監控的的應用程序(Provider角色,例如:一個Web站點)

• 遠程機器上:控制事件跟蹤會話的控制程序(Controler角色,例如:一個Windows服務,WCF寄宿在內)

• 本地機器上:遙控Controler的程序(能夠是任意程序,只要能用來調用WCF便可)。

• 用於解析生成的etl文件的程序(閱讀器)

  

底層類庫:EventSource 介紹

• 剛纔的Demo中,是如何把數據寫入etl文件中的?其實是經過EventSource類庫。 

• 爲何要用它?由於不用它, 寫起來就會很複雜。

Vance Morrison: When you log events to an ETW event stream, in ETW parlance, you are creating a ETW Event Provider.    Sadly, historically creating a ETW event provider has been a non-trivial task, which writing an XML 'Schema manifest' and  using a specialized tool (MC.exe) to generate source code to link into your application.   You also need to register the provider using another obscure tool (WEVTUTIL) when your application was deployed.    This discouraged most users from ever building their own ETW providers, which is a shame because it is a powerful feature of ETW. 

 

底層類庫:EventSource 進化史

• 最初1.0版本由Vance Morrison發佈在msdn我的blog上
Introduction Tutorial: Logging ETW events in C#: system.Diagnostics.Tracing.EventSource  
http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx 

• 後來,EventSource被髮布到Nuget.org上,以後Nuget版本就一直在更新,最新版本爲: Microsoft EventSource Library 1.1.25
http://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource/
 

• .Net 4.5中已將EventSource收入在類庫System.Diagnostics.Tracing.EventSource中,但在.Net 3.5下,仍是一個獨立的類庫。
To fix this, we have added the System.Diagnostics.Tracing.EventSource type to  Version V4.5 of the .NET Runtime (Now available for download, as a release candidate.  It will officially ship later in 2012).   It makes writing ETW provider as simple as writing just a few lines of code.    In this blog entry I will demonstrate just how easy it is to log your own events to the ETW data stream and thus make the OS ETW data EVEN MORE USEFUL by correlating it with what you are doing in your code.  

EventSource 具體做用

• 待監控的系統,要建立一個類,做爲EventSource的子類,並用這個類作爲數據提供程序Provider註冊到ETW中,並訂閱ETW事件,與一個callback函數綁定。 

• 當ETW Session啓動,並啓動或中止這個Provider時,ETW就會激發事件,這個Provider的callback函數就會被激發,用來更新當前是否能夠寫日誌的bool狀態,true能夠寫,false不能夠寫。系統判斷爲False時,當即離開,就再也不浪費資源來記日誌了。

 

底層類庫:TraceEvent 介紹

• 剛纔的Demo中,是如何啓動或中止一個ETW Session的呢?是如何把Session與Provider綁定在一塊兒的呢?實際上就是經過TraceEvent類庫實現的。

  

底層類庫:TraceEvent 進化史

• 首先,新版本由Vance Morrison發佈在codeplex上: New version of TraceEvent / PerfMonitor Posted to bcl.codeplex.com
http://blogs.msdn.com/b/vancem/archive/2013/01/07/new-version-of-traceevent-perfmonitor-posted-to-bcl-codeplex-com.aspx 

• 後來,TraceEvent被髮布到Nuget.org上,以後codeplex就再也不更新了,Nuget版本就一直在更新,最新版本爲: Microsoft TraceEvent Library 1.0.32
https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent/ 

• TraceEvent並未收錄在.Net 4.5的類庫System.Diagnostics.Tracing中,還是獨立的組件。
  

SourceEvent和TraceEvent的底層

• SourceEvent和TraceEvent的底層類庫是非託管的advapi32.dll,最終是由這個類庫完成實際工做。 

•  advapi32.dll 全稱是:Advanced Windows 32 Base API DLL,它是一個高級API應用程序接口服務庫的一部分,包含的函數與對象的安全性,註冊表的操控以及事件日誌有關。  

• 通常位於C:\WINDOWS\system32\目錄下,大小659KB。

資源連接

• http://bcl.codeplex.com/SourceControl/list/changesets

• https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent/

• http://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource/

http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx

• http://blogs.msdn.com/b/vancem/archive/2012/08/13/windows-high-speed-logging-etw-in-c-net-using-system-diagnostics-tracing-eventsource.aspx

• http://blogs.msdn.com/b/vancem/archive/2012/12/20/and-end-to-end-etw-tracing-example-eventsource-and-traceevent.aspx

• http://blogs.msdn.com/b/vancem/archive/2013/01/07/new-version-of-traceevent-perfmonitor-posted-to-bcl-codeplex-com.aspx

• http://blogs.msdn.com/b/vancem/archive/2015/05/11/version-1-1-24-of-the-eventsource-nuget-package-marked-as-stable.aspx

• http://blogs.msdn.com/b/vancem/archive/2014/03/15/walk-through-getting-started-with-etw-traceevent-nuget-samples-package.aspx

• http://blogs.msdn.com/b/vancem/archive/2013/03/09/using-traceevent-to-mine-information-in-os-registered-etw-providers.aspx

• http://blogs.msdn.com/b/vancem/archive/2013/08/10/the-eventsource-nuget-package-and-support-for-the-windows-event-log-channel-support.aspx

• http://blogs.msdn.com/b/vancem/archive/2013/08/15/traceevent-etw-library-published-as-a-nuget-package.aspx

 

附件:點此下載pdfwindows

相關文章
相關標籤/搜索