(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

相关文章
相关标签/搜索