ETW
ETW(Event trace for Windows)是微软提供的追踪和记录由应用程序和内核驱动事件的机制。ETW已经由Windows操作系统实现了,所以我们无需对其编程。并且在此基础上提供给了开发者一些快速、可靠、通用的事件追踪特性。
ETW架构图(取自MSDN)

- 下面解释一些
ETW架构中使用到的概念
Providers(事件提供者):具体是指提供事件的一些对象,最终抓取到的事件都是来源于它们的Consumers(事件收集者):有时也称Collector,具体是指收集事件的一些对象,这个一般在WPR或者是Xperf中已经编写好了,我们不需要担心这一部分。Session(事件追踪会话):可以理解成追踪事件的一次过程,此时追踪事件的所有数据都还在内存当中,到最后结束追踪的时候Controllers(事件追踪控制者):开启或关闭事件追踪会话
Kernel Provider ···· User Provider
- 从字面的含义去解释它就是
内核级(Kernel)和用户级(User)的事件提供者,或者更简单一点,系统已经定义好的Provider就称为System Provider或Kernel Provider。而由开发者自定义的Provider就称为User Provider
System Provider ···· Kernel Session ···· Kernel Event
System Provider:真名是Windows Kernel Trace,顾名思义,是一个内核级别的事件提供者,因此我们可以说只要你在使用Windows操作系统你就可以追踪到它提供的事件。并且System Provider提供的事件只能被Kernel Session追踪Kernel Session:我们之前提到过Session的概念,不难理解Kernel Session也是一次事件追踪的过程,只不过Kernel Session这次过程追踪的事件都是由System Provider提供的。Kernel Event:是由System Provider产生的内核事件,交给Kernel Session追踪
我们可以通过如下步骤
1)找到命令提示符以管理员身份打开

2)使用logman命令查看System Provider的情况
logman query providers "Windows Kernel Trace"

注:这里的keyword字段可能会令大家迷惑。这里可以大概模拟一个情形,由于Provider提供了许多类型的事件,所以如果我们对其中所有的事件都进行追踪将会使得最后的.etl文件非常大,从而浪费磁盘空间。所以keyword的实际上相当于一种过滤机制,让开发者可以只追踪一小部分的事件。
3)使用logman命令查看session的情况
logman -ets

命令行方式使用WPR
在我的《如何使用WPR和WPA记录系统状态》博文中已经提到了如何用UI(User interface)的方式开启记录和关闭记录。这里不做赘述。下面介绍通过命令行方式使用WPR的方法。
1)首先我们可以通过如下命令查看wpr提供的内置监控配置文件(built-in profile)
wpr -profiles

注:该命令必须在(以管理员身份打开的cmd.exe中)执行,否则会拒绝访问
2)profile配置文件定义了开启哪些Provider,我们可以通过如下命令查看CPU profile开启了哪些Provider
wpr -profiledetails CPU

3)通过上述的两个命令,我们可以选取一个内建的profile来开启记录,比如选取CPU profile,命令如下
wpr -start CPU
4)等待几秒,执行wpr -stop xxx.etl命令保存日志文件
wpr -stop test.etl
注:test.etl文件会生成在你cmd.exe的工作路径下,如下图

本文深入解析ETW(EventtraceforWindows)机制,介绍其架构、概念及如何通过命令行使用WPR进行事件追踪,适用于Windows操作系统下的应用和内核事件记录。
命令行的使用&spm=1001.2101.3001.5002&articleId=81071482&d=1&t=3&u=376e4102389a4dd49cc756b17012d3b7)
4096

被折叠的 条评论
为什么被折叠?



