问题标签 [etw-eventsource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
356 浏览

c# - 卸载没有清单文件的事件源(ETW)?

在不使用清单的情况下卸载/删除以前安装的事件源的最佳方法是什么?

例如。如果我有类似的东西:

对于安装事件源,我使用的是wevtutil {im | 安装清单}

如果我有清单,卸载很容易。但是我可以在没有清单文件的情况下卸载事件源吗?


我将尝试阐明我如何使用事件源以及我为什么要删除它。

使用 wevtutil 安装事件源后,事件源作为事件跟踪提供程序可见。因此,我可以在性能监视器中创建新的数据收集器集,并在其中添加我的事件源(连同一些性能计数器)。它看起来像这样:

新收集器集中的 ETW EventSource

可能发生的情况是事件源被重命名或删除。例如,在使用 wevtutil 重命名和安装之后。

事件跟踪提供程序中仍然存在旧的:

ETW 新事件源

我想要的是查询所有以Corporation*开头的已安装事件提供程序,并在安装新事件提供程序之前将其删除。

在此处输入图像描述

谢谢!

0 投票
0 回答
222 浏览

c# - 如何修复 logman 会话中丢失的 EventSource 跟踪

我有一段从 MSDN https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.tracing.eventsource?view=netframework-4.7.2借来的示例代码

除此之外,我所做的只是将此代码导入 Visual Studio 控制台应用程序。

为了启动跟踪会话,我尝试了两种方法:

甚至尝试过 logman create trace sess -pf guids.txt -bs 1000 -nb 100 256 -ow -o tracefiles(guids.txt 有这个唯一的 guid)

吐出 ETL 后,我尝试使用 WPA/netsh 跟踪转换和消息分析器打开它们。这些都没有显示这些事件。

这里有什么问题?

我希望结果会出现,但我看到的只是:

0 投票
0 回答
538 浏览

etw - 如何使用 C# EventSource 和 ETW 实现连续日志记录?

我们使用 实现结构化日志记录System.Diagnostics.Tracing.EventSource,并在收集跟踪时使用内联提供程序清单,以避免使用 EventRegister 和 wevtutil 的安装问题。我们将 EventSource 设计为以足够低的容量进行连续、持久的日志记录。我正在努力使用 Microsoft 提供的一系列 ETW 控制器来实现收集。我想定义一个 ETW 会话:

  • 为我的 ETL 文件设置最大文件大小
  • 当 ETL 文件达到最大大小时,滚动到具有递增版本/时间戳信息的新文件。我想要覆盖旧事件的循环日志。我们将自行管理存档。
  • 在每个新文件中从事件流的开头维护清单数据 - 请记住,我们使用的是内联提供程序清单。

我使用以下 logman 命令关闭了(指定的提供程序 guid 来自自定义事件源):

logman start "Session" -p "{55a51afc-22e0-5581-6db2-01d5bbe42500}" -mode newfile -max 1 -o .\test%d.etl -ets

在 Perfview 中查看,生成的第一个 ETL 文件看起来很棒:

良好的 ETL 文件

每个后续文件如下所示,大概是因为清单数据丢失了:

错误的 ETL 文件

我可以向 logman 提供一个选项来满足我的第三个要求吗?Vance Morrison在他的博客中暗示ETW 支持 CaptureState 命令来重新发送清单数据:

循环缓冲区情况的解决方案是要求 EventSource 在跟踪结束时再次转储其清单(它肯定会在窗口中)。这只是需要的一堆“破败”的一个例子。ETW 通过“CaptureState”命令支持这一点。

如果 logman 无法做到这一点,那么其他 ETW 控制器之一能否满足我的所有要求?我对 perfview、windows 性能记录器、xperf、tracelog 或任何其他我错过的东西持开放态度。

0 投票
0 回答
95 浏览

c# - 向 EventSource 中的所有 ETW 事件添加字段

目前,我的 ETW 事件定义如下:

我想为调用者不需要传入的这两个事件添加一个字段。它是在应用程序配置中定义的静态字符串。我发现除了将其添加到修饰函数WriteEvent的参数之外,没有其他方法可以将其添加到每个调用中。[Event]

如果我通过基本[NonEvent]方法对它们进行管道传输,它们会使输出出现乱码。上面的代码块是我发现的将字段添加到每个事件的唯一方法。必须有更好的方法,但我还没有想出完美的谷歌搜索来找出这是如何完成的。

0 投票
0 回答
403 浏览

.net - 为什么 Perfview 不显示提供者名称、事件名称和消息?

我们正在为我们的应用程序生成一些 etw 日志文件。我使用 Perfview 来读取 .etl 文件。有时 Perfview 会显示如下截图所示的事件。它没有显示正确的提供者名称/事件名称和消息。相反,我可以看到 GUID。我无法找出发生这种情况的情况。我不能怀疑事件源,因为并非所有 .etl 文件都会发生这种情况。 截屏


使用具有以下 MultiFileMB 配置的相同会话生成的 ETL 文件用于生成多个 etl 拆分文件。一些拆分文件显示正确的数据,有些则不如下图所示。

工作和损坏的 etl 文件

我尝试从 Perfview 中转储损坏和未损坏的事件。正确的事件有<PrettyPrint>信息并且TemplateTypeDynamicTraceEventData,但是在损坏的事件中我没有得到<PrettyPrint>信息。也是。TemplateType_UnhandledTraceEvent

倾倒

0 投票
0 回答
119 浏览

c# - Powershell 实现 C# System.Diagnostics.Tracing.EventSource

所以也许我只是无知,但 C# 有一些可爱的 System.Diagnostics.Tracing.EventSource 功能,使编写新的事件源变得超级简单。我围绕这个方便的 api 构建了一些功能,允许在摄取后处理这些日志。

然而,所有这些都被转移到了 powershell,我正在努力让它工作。如果我通过 dll 使用 EventSource 子类的当前实现,那么一切都会按预期工作。如果我尝试纯粹在 powershell 中编写一个新的 EventSource 子类,则该事件将停止显示。

我已经非常彻底地研究了谷歌,我很清楚这不是标准方法。(令人惊讶,因为它是一个如此方便的编码块)任何人都可以帮助或告诉我我可能做错了什么吗?

0 投票
0 回答
62 浏览

c# - 是否可以在事件查看器中使用 ETW 登录到子文件夹时使用自定义名称创建事件通道?

这是我的问题:

我首先尝试在“应用程序和服务”下的事件查看器中实现文件夹,但System.Diagnostics.EventLog该类似乎不支持这一点。然后我遇到了 ETW,它提供了为 Windows 事件跟踪创建事件的能力。他们在 NuGet 包中留下了一些示例和文档,我现在可以设置自己的层次结构,直到实际的事件通道,但问题是:事件通道名称是预定义的,这意味着我不能手动选择名称。这就是他们写给它的内容,这让我更加困惑:

现在是否可以自定义名称,是否有完全不同的方式来完成所有这些?我已经阅读了大量的帖子,但没有一个能够在事件查看器中使用System.Diagnostics.EventLog类创建“文件夹”,现在使用 ETW 是可能的,但是它把这个问题抛在脑后。

提前致谢!

0 投票
0 回答
34 浏览

c# - 废弃旧会话后,新的 TraceEventSession 需要更多时间来 EnableProvider

我使用 TraceEventSession 来记录我的事件。我有两个功能开始和停止。Start 启动会话并创建在 Stop 中调用的操作。

当我运行这段代码

一切正常,但是当我运行这段代码时

session 不收集 MyEventSourceName 的信息。首先我认为那是因为会话没有处理,但...Some long code持续了很长时间,但问题是一样的。

只有当我运行这样的代码时,程序才能正常工作:

我不能调用Thread.Sleep,在调用Start之后,而且很奇怪第一个Start工作正常,第二个Start总是失败。这就是为什么我感兴趣它为什么会发生,有没有办法不调用 Thread.Sleep。

0 投票
0 回答
15 浏览

c# - 如何在事件查看器 > 应用程序和服务日志中创建的文件夹名称中添加空格?

目前,我正在使用EventSourceAttribute在事件查看器的应用程序和服务日志中创建子文件夹的层次结构。这是我的代码

在应用程序和服务日志中,文件夹显示为Service > MacClient > EventSource.

在此处输入图像描述

但是,我想要的是文件夹名称中每个大写字母之间的空格,例如Service > Mac Client > Event Source. 所以我尝试将其更改为

但不幸的是,我在构建我的项目时遇到了这个错误

MSXML 架构验证错误 0xc00ce169。在 Line=4,Column=426,'ServiceMac ClientEvent Source' 违反了 '()|([_a-zA-Z][_0-9a-zA-Z]*)' 的模式约束。

我可以知道如何在事件查看器 > 应用程序和服务中创建的文件夹名称中添加空格吗?提前致谢!

补充说明

微软的用户体验虚拟化似乎表明,在事件查看器的应用程序和服务日志中为子文件夹名称添加空格是可能的。

在此处输入图像描述