在远程计算机上监视 ETW 日志

Monitoring ETW logs on remote computer

使用 Microsoft.Diagnostics.Tracing.TraceEvent 库可以轻松地使用 ETW 登录 local machine - 但是真的有办法对 remote server 做同样的事情吗?这就是我如何在本地机器上获取感兴趣的事件。真的很感兴趣在为不同机器生成事件的情况下如何实现相同的结果。

 public LoggingEventArgs ListenForEvent(string eventName, int level, int maxWaitTimeInSec = 30)
    {
        if (!(TraceEventSession.IsElevated() ?? false))
        {                
            _logger.Error("To turn on ETW events you need to be Administrator.");
            return null;
        }

        LoggingEventArgs result = null;

        _logger.Info("Creating a '{0}' session", _sessionName);
        using (var session = new TraceEventSession(_sessionName))
        {
            _timer = ConstructTimerForSession(session, maxWaitTimeInSec);

            TargetEventReceived += delegate (object sender, LoggingEventArgs e)
            {
                //if level is not negative, check for specific level of incoming event. 
                //Otherwise track all levels
                bool condition = level > 0 ? e.Level == level : true;                    
                if (condition)
                {
                    result = e;
                    StopListeningForEvents(session);
                }
            };

            AddCallbackForProviderEvent(session, _providerName, eventName);

            StartListeningForEvents(session, _providerName, _timer);
        }
        return result;
    }

这可能不是您要查找的内容,但最好的选择是使用 Semantic Logging Application Block (SLAB) 进程外选项,它会在远程计算机上安装代理。然后 SLAB 进程可以将您的日志写入远程 SQL 服务器或远程文件。