云计算 频道

如何使用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
相关文章