(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

附件:点此下载pdf

时间: 2024-10-21 01:18:16

(ETW) Event Tracing for Windows 入门 (含pdf下载)的相关文章

《Docker技术入门与实战第3版2018版》高清中文PDF下载

<Docker技术入门与实战第3版2018版>高清中文PDF下载资料简介:本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员.运维人员快速部署Docker应用.本书分为四大部分:基础入门.实战案例.进阶技能.开源项目,*部分(第1-8章)介绍Docker与虚拟化技术的基本概念,包括安装.镜像.容器.仓库.数据卷.端口映射等:第二部分(第9-16章)通过案例介绍Docker的应用方法,包括与各种操作系统平台.SSH服务的镜像.Web服务器与应用.

GitHub For Windows 入门教程

GitHub For Windows 入门教程 GitHub是一款非常好用的代码管理工具,网上也有很多的教程,但是都比较老或者比较繁琐,在这里由于不需要太复杂的功能,给大家简单的介绍下GitHub For Windows客户端的基本用法~ 首先,下载GitHub For Windows客户端 下载地址:https://windows.github.com/ 点击DOWNLOAD 下载安装即可- 安装好后,需要用GITHUB的账户登录,没有的话去注册一个吧~地址:https://github.co

《数据科学入门》pdf格式下载免费电子书下载

<数据科学入门>pdf格式下载免费电子书下载 https://u253469.ctfile.com/fs/253469-300325729更多电子书下载: http://hadoopall.com/book 内容简介 数据科学是一个蓬勃发展.前途无限的行业,有人将数据科学家称为"21世纪头号性感职业".本书从零开始讲解数据科学工作,教授数据科学工作所必需的黑客技能,并带领读者熟悉数据科学的核心知识--数学和统计学. 作者选择了功能强大.简单易学的Python语言环境,亲手搭

Python编程 从入门到实践 PDF 下载

网盘下载:Python编程 从入门到实践 PDF 下载 – 易分享电子书PDF资源网 作者: [美]埃里克·马瑟斯 出版社: 人民邮电出版社 副标题: 从入门到实践 原作名: Python Crash Course 译者: 袁国忠 出版年: 2016-7-1 页数: 459 定价: CNY 89.00 装帧: 平装 内容简介 · · · · · · 本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括mat

【PDF下载】Python编程 从入门到实践 PDF 下载

网盘下载:Python编程 从入门到实践 PDF 下载 – 易分享电子书PDF资源网 作者: [美]埃里克·马瑟斯 出版社: 人民邮电出版社 副标题: 从入门到实践 原作名: Python Crash Course 译者: 袁国忠 出版年: 2016-7-1 页数: 459 定价: CNY 89.00 装帧: 平装 内容简介 · · · · · · 本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括mat

C语言编程:一本全面的C语言入门教程(第三版)PDF下载

网盘下载地址:C语言编程:一本全面的C语言入门教程(第三版)PDF下载 – 易分享电子书PDF资源网 作者: (美)Stephen Kochan 出版社: 电子社博文视点资讯有限公司 译者: 张小潘 出版年: 2006年 页数: 543 页 定价: 59.00元 装帧: 平装 ISBN: 9787121007354 内容简介 · · · · · · 本书是极负盛名的C语言入门经典教材,其第一版发行至今已有20年的历史.本书内容详实全面,由浅入深,示例丰富,并在每个章节后面附有部分习题,非常适合读

对比《Keras图像深度学习实战》PDF+《深度学习技术图像处理入门》PDF代码分析

将深度学习技术应用于图像处理,推荐阅读<深度学习技术图像处理入门>,基于理论讲解,由浅入深地引出若干个经典案例,讲解当前深度神经网络在图像处理领域的应用.提供了基于云GPU容器(Docker)的完整在线开发环境,方便初学者直接学习核心代码. <深度学习技术图像处理入门>以通俗易懂的语言简要讲解机器学习的核心概念,通过比较传统机器学习和深度神经网络的区别,引入深度神经网络的应用领域,将一个完整的深度神经网络的复杂结构拆成输入处理.模型元件以及模型优化三个子块,并详细说明如何将深度神经

跟我学SpringMVC目录汇总贴、PDF下载、源码下载

跟我学SpringMVC目录汇总贴.PDF下载.源码下载 http://jinnianshilongnian.iteye.com/blog/1752171 跟开涛学SpringMVC 在线版目录 第一章 Web MVC简介 第二章 Spring MVC入门 第三章 DispatcherServlet详解 第四章 Controller接口控制器详解(1) 第四章 Controller接口控制器详解(2) 第四章 Controller接口控制器详解(3) 第四章 Controller接口控制器详解(

R语言入门心得(1) -- 下载与安装

R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. R 是统计领域广泛使用的诞生于1980年左右的 S 语言的一个分支.R是S语言的一种实现.S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索.统计分析.作图的解释型语言.最初S语言的实现版本主要是S-PLUS.S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善.后来Auckland大学的Robert Gentlema