云计算 频道

如何使用Diagnostics捕获Windows事件

  【IT168微软云计算博客征文活动专稿】通过查看Windows事件,我们可以了解系统运行中产生的错误或警告,对日常运营监控提供了重要的数据来源,本文简要介绍一下如何使用Windows Azure Diagnostics 捕获由 Hosted Web Core 产生的Windows事件,下面是代码:

    var cfg = DiagnosticMonitor.GetDefaultInitialConfiguration();
    
// HWC uses the event log to indicate what's broken.
    // This config setting is really handy when debugging bad config.
    cfg.WindowsEventLog.DataSources.Add(
"Application!*[System[Provider[@Name='HostableWebCore']]]");
    diagnosticMonitor
= DiagnosticMonitor.Start("DiagnosticsConnectionString", cfg);

  当你添加一个Windows事件日志数据源时,你需要给你想记录的事件指定一个XPath选择原则。使用 Windows Azure Diagnostics ,你可以收集以下类型的诊断数据:

 

数据源

默认配置

支持的角色类型

Windows Azure 日志

默认要收集,需要在 web.config app.config 中增加跟踪监听器

Web和Worker角色

IIS 7.0日志

默认要收集

仅限Web角色

Windows诊断基础日志

默认要收集

Web和Worker角色

失败的请求日志

默认不收集

仅限Web角色

Windows事件日志

默认不收集

Web和Worker角色

性能计数器

默认不收集

Web和Worker角色

崩溃转储

默认不收集

Web和Worker角色

自定义错误日志

默认不收集

Web和Worker角色

  要启用对Windows事件日志的收集,要获得默认的初始配置,然后向配置中加入Windows事件日志数据源,使用一个 XPath 表达式指定你想要收集的事件,下面的代码显示了如何配置诊断监听器收集“系统”事件:

    public override bool OnStart()
    {
        DiagnosticMonitorConfiguration diagConfig
= DiagnosticMonitor.GetDefaultInitialConfiguration();
    
        
// Add event collection from the Windows Event Log
        diagConfig.WindowsEventLog.DataSources.Add(
"System!*");
        
// Start diagnostics with this custom local buffering configuration
        DiagnosticMonitor.Start(
"DiagnosticsConnectionString", diagConfig);
        return base.OnStart();
    }

 

  注意, Windows Azure Diagnostics 不能读取Windows事件日志中的“安全”事件,因为运行在Windows Azure中的服务使用的账号往往没有读取安全事件的权限。

  在Windows事件查看器中,我们可以创建一个自定义视图。

 

 如何使用Diagnostics捕获Windows事件

  图 1 过滤显示 Hosted Web Core 事件源

  切换到XML标签,可以看到XPath格式的事件过滤器。

 如何使用Diagnostics捕获Windows事件

  图 2 XPath格式的事件过滤器

  你也可以手工修改一下,然后将其传递给 WindowsEventLog.DataSource.Add 。

0
相关文章