24

我试图围绕 ETW 以及如何将 t 集成到高性能应用程序中。

我们都知道旧的可怕的 EventLog 是非结构化的(因此不是最优的)API。

现在有一个用于高性能跟踪的新 API - ETW,它在 4.5 中以 EventSource 类的形式在 .NET 端获得了一个新 API,您可以轻松地对其进行子类化(因此不再需要编写清单)。

这给我留下了许多问题,试图让它发挥作用。

  • 当前建议的最佳(根据文档,指南)使用 ETW 并将事件从那里获取到事件日志的方法是什么?我在这里有一个必须编写(性能)事件的应用程序,并且很想使用 ETW;但事件应出现在(自定义)事件日志中。
  • 有没有完整的例子?我可以找到一些,但它们都可以追溯到 .NET 4.0 时间并从清单开始。

我尝试了什么?我得到了一个 EventSource 工作,但只是未能获得有关如何从那里获得其余工作下游的正确文档。

4

6 回答 6

10

2013 年 8 月,Microsoft.Diagnostics.Tracing.EventSource 1.0.4 beta 在 NuGet 上发布。三大优势是通道支持、静态(已安装)清单支持(进入事件查看器所需的两件事)和 .NET 4.0 支持。

根据宣布 RTM 的博客文章,Microsoft.Diagnostics.Tracing.EventSource “支持对 Windows 事件日志的快速应用程序跟踪,包括在生产中”。

于 2013-09-05T21:43:13.077 回答
8

由于以下原因,您试图实现的目标是不可能的;

  • 要将 ETW 事件定向到事件日志,您需要在清单中指定类型为 Admin、Operational 或一些经典的通道,例如 Application 并使用 wevtutil 注册它。不幸的是,即使您有清单,您也不能为此使用 EventSource,因为在调用 WriteEvent 时,底层实现不会在 EventDescriptor 块上设置通道字节,例如,您的事件永远不会被标记为特定通道。

  • EventSource 在后台为避免注册清单、将其编译为 win32 资源、将其链接到程序集/dll、注册等繁琐过程所做的是从您的 EventSource 实现生成清单并将其作为已知事件发送到允许接收服务解析所有其他事件有效负载,而不是依赖 Windows 基础结构来获取清单信息。据我所知,目前只有 PerfView 支持此功能。

于 2013-02-24T19:22:22.373 回答
1

MSDN真的没有很好的解释。我希望 Stackoverflow 能让我添加 Pluralsight 讲座的链接,该讲座通过使用最佳实践完美地解释了所有 EventSource 主题https://app.pluralsight.com/library/courses/event-tracing-windows-etw-dotnet/table-of-内容

于 2017-04-18T18:20:41.163 回答
0

有一个小的介绍教程:

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/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx

我没有尝试过它们,因为我目前正在使用 .NET 4 但也许这些链接可以帮助你......

于 2013-01-25T09:23:11.140 回答
0

这很有趣,因为我一直在研究类似的需求。首先,您可以使用 EventSource 类的静态方法 GenerateManifest(typeof(MyEvents), null) 生成清单。这将为您提供事件清单等,但不包含有关频道的详细信息。您需要自己在清单中定义通道,然后注册使用 wevtutil.exe、mc.exe 和 rc.exe 实用程序。这将根据清单中的提供商名称为您创建事件日志。

有趣的是,我可以设法让调试和分析日志向我展示通过 EventSource 生成的事件。我还可以使用 Perfmon 的跟踪会话来记录特定时期的事件,并使用关键字和级别的过滤器。提供者也确实出现在 Trace Session 提供者列表中。

我目前唯一看到的是将事件带到 Admim 和 Operation 的频道中。如果您需要样品等,请大声喊叫。

详细信息见 http://www.suneet.net/FrmBlogViewer.aspx?blogid=75

于 2013-06-27T16:14:01.610 回答
0

语义记录应用程序块”具有 EventListener 派生类的示例,其中一个记录在事件日志中。Vance 的博客上对此进行了一些描述。

于 2013-07-11T17:17:51.163 回答