PNetAnalyzer
PNetAnalyzer is a process-network monitor based on ETW.
库的地址: 👉PNetAnalyzer
TraceEvent原理
ETW的架构组成有三部分如下:
Event Session: 对应c#类Microsoft.Diagnostics.Tracing.TraceEventSession, 扮演着整个ETW机制中"控制器"的角色,它可以决定采集什么类型的Event Provider所提供的日志信息,什么时候采集开始/结束,采集数据的转发/存储等;Event Provider: 对应c#类Microsoft.Diagnostics.Tracing.EventSource, 在ETW中作为一个"生产者"的角色而存在,它是windows日志系统的一部分,用户可以根据不同的Provider来获取自己感兴趣的内容;Event Consumer: 对应c#类Microsoft.Diagnostics.Tracing.TraceEventSource, 从文件或者Comsumer处拿出数据进行分析整理。
在Event Consumer拿到的数据是UNPARSED数据,此处就用到了TraceEventParser之类的解析器来对原始数据进行解析。解析的方法有两种:
- 运行时解析: 简单来说就是拿到原始数据再由用户来解析;
- 编译期解析: etw提供了一些解析类,通过这些类,用户就不用对原始数据进行格式化;
不同点点击👉: Static vs. Dynamic TraceEventParser parsers
对于编译期解析而言,ETW提供了下图的一些类:
KernelTraceEventParser: 解析内核事件,例如DLL loading, process start/stop, CPU sampling, page faults, Disk I/O file I/O, memory, etc;ClrTraceEventParser: 解析.NET CLR事件,例如GC events, Just in Time compilation events, Exception events, etc;DynamicTraceEventParser: 清楚每个Event Provider的格式,该parser在运行时通过manifests对不同的provider数据进行解析;RegisteredTraceEventParser: 解析每一个在上操作系统使用wevtutil命令行引起的注册事件;WPPTraceEventParser: 解析每一个使用WPP Tracing system引起的事件, 设备驱动和其它基础组件使用该机制;JScriptTraceEventParser: 解析JavaScript运行时事件;TPLTraceEventParser: 解析Task Parallel库事件(例如c#的System.Threading.Tasks);ASPNetTraceEventParser: 解析ASP.NET事件;
Overview
参考👉: Review of the Fundamental TraceEvent Architecture
-
TraceEventSession开启新的ETW sessions来监控相关的ETW providers,并将数据重定向; -
ETW providers有两种:
- windows os kernel provider,包括.NET, JScript运行时等;
- 用户自定义的Event Provider;
-
hook相关的
ETWTraceEventSource来获取相关的event数据流; -
ETWTraceEventSource的提供的事件数据是为解析的,因此需要使用相关的TraceEventParser来对数据进行解析:- 编译期解析: 要解析的event格式在编译期已经确定,因此使用这种方法效率会很高(编译期解析需要使用TraceParserGen生成相关的minifests,系统的event几乎都有相关的manifests,因此不用用户生成);
- 运行时解析: 用户运行时手动解析hook到的event事件数据;
-
在确定了想要关注的etw providers之后,调用
ETWTraceEventSource.Process()来获取ETW数据流,并对数据进行处理。
PerfView
perfview是一款微软基于TraceEventLibrary开发的开源性能分析工具。
Pktmon
pktmon 是一个windows官方提供的非常强大的网络诊断工具,它有两种基本模式trace和capture:
trace模式: pktmon会通过trace不同的ETW provider来获取不同的性能数据;capture模式: 会像wireshark一样进行抓包;
Reference
Event Tracing for Windows (ETW)
Listing of ETW (Event Tracing for Windows) Providers and their GUIDs for Windows 7 x64