使用“Windows事件跟踪”事件

对这个问题的回答让我研究了使用“Windows事件跟踪”来追踪我们的需求。 我遇到了NTrace ,这似乎是从C#代码(使用XP兼容的“经典提供者”模型)生成ETW事件的好方法。

但是,我无法find一个简单的方法来使用这些事件 – 实时查看它们和/或将它们logging到文件中。 我发现的唯一方法是在NTrace文档中描述:使用仅作为Windows DDK的一部分可用的工具。

在现场出现复杂问题的情况下,我们可能需要让用户产生一个包含轨迹的文件。 我们不能要求用户下载DDK或执行一些复杂的操作来完成这个任务。

有没有一种简单的,用户友好的方式将ETW事件logging到文件中?

另外,如果某个人没有以pipe理员身份运行,是否有可能在Windows Vista / 7上使用ETW事件?

TraceView是最简单的开箱即用解决方案,但可以编写自己的专用于您的提供者的ETW查看器。 这将使您可以完全控制演示文稿,并使最终用户更容易,因为TraceView实际上更像是一个调试工具,而不是您可以要求最终用户运行的东西。

就实时追踪而言, 根据文件 :

只有具有管理权限的用户,Performance Log Users组中的用户以及以LocalSystem,LocalService,NetworkService身份运行的服务才能实时使用事件。 要授予受限用户实时使用事件的权限,请将其添加到“性能日志用户”组中。

Windows XP和Windows 2000:任何人都可以使用实时事件。

如果您有兴趣编写自己的ETW查看器(实时或日志文件),请参阅相关文档 。

Windows事件日志读取ETW。 事实上,我认为这是消费者(非程序)查看和导出ETW踪迹的正确方法。

看这里的例子。 http://blogs.microsoft.co.il/blogs/applisec/archive/2009/10/12/reading-etw-tracing-using-event-viewer.aspx

msdn上的这个问题讨论当日志没有出现时该怎么做。 这里有什么帮助吗?

ETW跟踪旨在仅由管理员运行,因为跟踪可能包含个人身份信息。 如果非管理员可以捕获跟踪,则会造成安全威胁。

这是来自xperf的警告示例

您刚刚捕获的“C:\ Windows \ system32 \ kernel.etl”的跟踪可能包含个人身份信息,包括但不一定限于访问文件的路径,注册表访问路径和进程名称。 确切的信息取决于记录的事件。 与其他人分享这个痕迹时,请注意这一点。

希望这回答你的问题

以下是如何从自定义提供程序获取定制ETW跟踪以及如何在托管代码中使用ETW

希望这可以帮助。

IMO Perfview是可用于控制和查看ETW踪迹的最佳工具之一。 它也可以提供可管理的呼叫栈。 最好的部分是你可以xcopy到任何服务器和收集痕迹。

Perfview使用TraceEvent库,这里的示例如何使用它使用API​​和C#