ayesd 发表于 2013-2-7 02:03:58

ASP.NET健康监测系统(Health Monitoring)(1)

转自:http://www.cnblogs.com/webabcd/archive/2007/05/20/753507.html
原文发布日期:2007.03.14
作者:Scott Mitchell
翻译:webabcd


介绍
在程序部署之前,要经历许多软件工程中定义的重要阶段,如需求分析、设计、编码和测试等。 但是,并不是说一旦程序部署并使用之后就脱离软件工程的各个阶段了。 不管一个web程序有多好的设计、多好的编码、多好的测试,它总是会有掉链子的时候。 如数据库服务器掉线,web站点比你凭经验预期的有更大的负载,或者你的web服务器本身的硬件出现问题等。 除非你的程序是很轻量级的或者是上帝给你写的,否则它总是会时不时地蹦出一些问题。

为了发现和诊断这些问题,非常重要的一步就是监视web程序并记录日志。 有很多开源的软件和微软开发的类库可以帮助你记录未处理的异常并通知给开发人员。 如何记录未处理的异常可以参看人性化地响应未处理异常 – 处理未经处理的异常。
 
ASP.NET 1.x不包括任何内嵌的日志和通知系统,所以需要开发人员写一些代码或者做一些配置。 然而,ASP.NET 2.0提供了内嵌的“健康监测”工具,你可以方便快捷地通过配置来把web站点的一些事件记录到事件日志、数据库、WMI、email或ASP.NET页面跟踪系统。 另外,健康监测系统是使用Provider设计模式(译者注:可以看一下我写的ASP.NET 2.0中实现Provider设计模式的文章)开发的,这样我们就可以实现自己的记录日志的逻辑了。

本文是研究ASP.NET 2.0的健康监测系统的系列文章的第一篇。 我们将在此学一学健康监测系统的基础知识,以及如何建立一个健康监测系统,从而将日志记录到SQL Server数据库。 继续往下看,你会知道得更多!


健康监测系统概述
ASP.NET 2.0的健康监测系统是用来监测运营环境中ASP.NET程序的运行状况的。 它可以记录事件信息到一个指定的日志源中。 例如,它可以记录像程序开始和停止、登录的成功和失败、未处理的异常信息等到一个像Windows事件日志或SQL Server数据库这样的日志源。 配置健康监测系统是非常容易的,只用在Web.config中增加一些配置信息从而指定事件监测者和要发往的日志源即可。

虽然.NET 2.0框架提供了一些内嵌的健康监测事件和日志源,但是当你需要增加自定义事件或换成另一个日志源的时候并不需要更改这些东西。 你可以通过扩展WebBaseEvent类来创建新的事件,通过扩展WebEventProvider类来创建自定义的日志源。 健康监测系统可以在设计模式中使用,并且允许你通过对配置信息的一些改变,从而在程序里添加自定义事件和自定义日志源。

在这个系列文章的未来的内容里,我们将会探讨一下如何创建自定义事件和自定义日志源。 而本文中,我们将只使用内嵌的事件和日志源来做示例。


配置健康监测系统
通过Web.config的<healthMonitoring>元素可以配置健康监测系统,该元素用于指定事件映射、事件订阅规则和日志源。 它们中的每一项都是作为<healthMonitoring>元素的子元素被定义的。 让我们来分别看看这些子元素: 
    ·Event Mappings (<eventMappings>) – 顾名思义,就是一套事件。 它的name会在其它节点中被引用。 
    ·Log Sources (<providers>) - 顾名思义,就是能作为日志源的类型。 
    ·Event Subscription Rules (<rules>) – 与定义在<eventMappings>节点的事件和定义在<providers>节点的日志源相关联。

接下来的这个示例演示了如何将这三个节点结合起来使用。 首先我们定义了一个名为“All Errors”的事件影射,它表示的是所有从WebBaseErrorEvent类继承的事件类。 接下来,定义了一个名为“EventLogProvider”的日志源,它会映射到EventLogWebEventProvider类,其意味着事件信息要被记录到Windows的事件日志中。 最后的名为“All Errors Default”的事件规则描述用来关联“All Errors”事件,并把相关日志记录到“EventLogProvider”日志源中。 像这样定义完Web.config后,如果发生任何未处理异常或明显的错误事件,都将记录到Windows的事件日志中。
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">http://www.cnblogs.com/Images/OutliningIndicators/None.gif<configuration>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif    <system.web>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif      <healthMonitoring enabled="true">
http://www.cnblogs.com/Images/OutliningIndicators/None.gif       <eventMappings>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif          <clear />
http://www.cnblogs.com/Images/OutliningIndicators/None.gif          <add name="All Errors" type="System.Web.Management.WebBaseErrorEvent"
http://www.cnblogs.com/Images/OutliningIndicators/None.gif                   startEventCode="0" endEventCode="2147483647" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gif       </eventMappings>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif
http://www.cnblogs.com/Images/OutliningIndicators/None.gif       <providers>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif          <clear />
http://www.cnblogs.com/Images/OutliningIndicators/None.gif          <add name="EventLogProvider" type="System.Web.Management.EventLogWebEventProvider" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gif       </providers>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif
http://www.cnblogs.com/Images/OutliningIndicators/None.gif       <rules>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif          <clear />
http://www.cnblogs.com/Images/OutliningIndicators/None.gif          <add name="All Errors Default" eventName="All Errors" provider="EventLogProvider"
http://www.cnblogs.com/Images/OutliningIndicators/None.gif                   profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gif       </rules>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif      </healthMonitoring>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif    </system.web>
http://www.cnblogs.com/Images/OutliningIndicators/None.gif</configuration> 
页: [1]
查看完整版本: ASP.NET健康监测系统(Health Monitoring)(1)