【IT168微软云计算博客征文活动专稿】通过查看Windows事件,我们可以了解系统运行中产生的错误或警告,对日常运营监控提供了重要的数据来源,本文简要介绍一下如何使用Windows Azure Diagnostics 捕获由 Hosted Web Core 产生的Windows事件,下面是代码:
// 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 中增加跟踪监听器 | |
IIS 7.0日志 | 默认要收集 | 仅限Web角色 |
Windows诊断基础日志 | 默认要收集 | Web和Worker角色 |
失败的请求日志 | 默认不收集 | 仅限Web角色 |
Windows事件日志 | 默认不收集 | Web和Worker角色 |
性能计数器 | 默认不收集 | Web和Worker角色 |
崩溃转储 | 默认不收集 | Web和Worker角色 |
自定义错误日志 | 默认不收集 | Web和Worker角色 |
要启用对Windows事件日志的收集,要获得默认的初始配置,然后向配置中加入Windows事件日志数据源,使用一个 XPath 表达式指定你想要收集的事件,下面的代码显示了如何配置诊断监听器收集“系统”事件:
{
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事件查看器中,我们可以创建一个自定义视图。
图 1 过滤显示 Hosted Web Core 事件源
切换到XML标签,可以看到XPath格式的事件过滤器。
图 2 XPath格式的事件过滤器
你也可以手工修改一下,然后将其传递给 WindowsEventLog.DataSource.Add 。