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

问题描述:

我正在尝试设置一个简单的ETW和EventFlow示例,该示例允许监视特定的ETW提供程序。在这种情况下,服务控制管理器ETW提供程序将监视何时发出服务启动和停止消息。使用EventFlow监视本地机器上的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?如果是这样,我在配置或代码中缺少什么?

控制台进程正在运行,管理员和帐户访问性能日志用户和性能日志监控组

如果你想监听来自服务控制管理器ETW事件,你需要听对于名为的供应商Microsoft-Windows-Services

以下是我在我的eventFlowConfig.json

{ 
"inputs": [ 
    { 
    "type": "ETW", 
    "providers": [ 
     { "providerName": "Microsoft-Windows-Services" } 
    ] 
    } 
], 
"filters": [], 
"outputs": [ 
    { "type": "StdOutput" } 
], 
"schemaVersion": "2016-08-11", 
"extensions": [] 
} 

要检查它的工作,我停止和启动SQL Server服务。如预期的那样,事件在控制台中输出。

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

+0

终于到处去尝试这个,像一个魅力工作。提及诊断事件查看器作为一个完整的检查是非常有用的。 –