使用EventFlow监视本地计算机上的ETW事件

时间:2017-09-02 06:59:14

标签: system.diagnostics etw event-flow

我正在尝试设置一个简单的ETW和EventFlow示例,该示例允许监视特定的ETW提供程序。在这种情况下,服务控制管理器ETW提供程序将监视何时发出服务启动和停止消息。

我有跟踪和ETW的以下输入配置。

  "inputs": [
{
  "type": "Trace",
  "traceLevel": "Warning"
},
{
  "type": "ETW",
  "providers": [
    {
      "providerName": "Service Control Manager"
    }
  ]
}]

我有以下代码,它使用EventFlow启动监控。

static void Main(string[] args)
    {
        using (var pipeline = DiagnosticPipelineFactory.CreatePipeline("eventFlowConfig.json"))
        {
            System.Diagnostics.Trace.TraceWarning("EventFlow is working!");
            Console.ReadLine();
        }
    }

跟踪事件出现在控制台中,但是当我启动和停止服务时,没有出现ETW事件。

EventFlow是否在本地计算机上为此方案设计?如果是这样,我的配置或代码中缺少什么?

控制台进程以管理员身份运行,该帐户可以访问“性能日志用户和性能日志监视器”组

1 个答案:

答案 0 :(得分:2)

如果要从服务控制管理器中侦听ETW事件,则需要侦听名为 Microsoft-Windows-Services 的提供程序。

以下是我在 eventFlowConfig.json中的内容

stringUrl = "https://dev.virtualearth.net/REST/v1/Locations?query=" + 
             encodeURIComponent( strAddress) + "&key=" +
             encodeURIComponent( key);

要检查它是否有效,我停止并启动了SQL Server服务。事件按预期在控制台中输出。

作为额外的健全性检查,您可以使用Visual Studio 诊断事件查看器来侦听ETW事件。启动查看器,单击要配置的cog,在ETW提供程序列表中添加提供程序名称,然后应用。您现在应该能够在查看器和控制台应用程序中看到相同的事件。