重学ASP.NET - Health Monitoring

缘起

上午计划为一个小站点,增加一个日志的Dashboard,找到了这篇文章:

Log Reporting Dashboard for ASP.NET MVC

文中讲解了如何用ASP.NET MVC实现一个Dashboard,为四种日志源提供检索和统计图表的功能。

从图中也可以看出来,这四种日志源分别是:

  • Elmah
  • Health Monitoring
  • log4net
  • NLog

可以把它们归为三类工具:
1. Elmah,应用场景非常明确,用于搜集ASP.NET应用程序未捕获异常及大量上下文信息,并提供了不错的UI。
2. log4net和NLog都是通用的日志库,专注在记录上,而记录哪些内容,给查看者提供UI,并不是他们的目标。
3. Health Monitoring,也是站在ASP.NET应用程序的角度,基于一套事件模型,提供(Provider)记录(或通知)机制。

因此,这三类工具,虽然从记录这个角度看有些交集,但各自侧重点不同。

眼前这个小站点,只使用log4net作为单纯的记录工具。对于应用程序级别的监控,还一片空白,遂想着看这方面的需求,能否利用Health Monitoring来满足一部分。

Health Monitoring

对于Health Monitoring,以前几乎没有了解。甚至从来没有想过,为什么一个未捕获的异常,在ASP.NET应用程序中,会被记录到Windows EventLog中。

先是读了MSDN:

healthMonitoring Element (ASP.NET Settings Schema)

最吸引我的是:

  • healthMonitoringheartbeatInterval属性
  • bufferModes
  • Profile中的minInterval属性 从这里也可以看出,已经不是单纯的做记录了,而是侧重于Monitoring

%windir%\Microsoft.NET\Framework\v4.0.30319\Config\web.config中定义了四种bufferModes(应该也可以很容易定义自己的bufferModes):
1. Critical Notification
2. Notification
3. Analysis
4. Logging

<bufferModes>

    <add name="Critical Notification" maxBufferSize="100" maxFlushSize="20"

        urgentFlushThreshold="1" regularFlushInterval="Infinite" urgentFlushInterval="00:01:00"

        maxBufferThreads="1" />

    <add name="Notification" maxBufferSize="300" maxFlushSize="20"

        urgentFlushThreshold="1" regularFlushInterval="Infinite" urgentFlushInterval="00:01:00"

        maxBufferThreads="1" />

    <add name="Analysis" maxBufferSize="1000" maxFlushSize="100"

        urgentFlushThreshold="100" regularFlushInterval="00:05:00"

        urgentFlushInterval="00:01:00" maxBufferThreads="1" />

    <add name="Logging" maxBufferSize="1000" maxFlushSize="200" urgentFlushThreshold="800"

        regularFlushInterval="00:30:00" urgentFlushInterval="00:05:00"

        maxBufferThreads="1" />

</bufferModes>

由于这个机制最早是在ASP.NET 2.0中引入的,时隔多年,便有一点想去了解有没有变化的部分。找到的文章里,并没有发现这方面内容,但其中的示例,
很轻易的就实现了一个常见的需求:当某个特定异常发生时,发邮件通知干系人。

Health Monitoring in ASP.NET 3.5

另外,受该文启发,有另一篇入门文章,其中其中有一个非常好的关于Health Monitoringquick reference(见下图)

Re: Health Monitoring in ASP.NET 3.5

Health Monitoring的其它相关资料:

MSDN
ASP.NET Health Monitoring Overview

www.asp.net
Logging Error Details with ASP.NET Health Monitoring
(C#)

两篇2007年的园子里的翻译文章
[翻译] ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用
[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息

你可能感兴趣的:(asp.net)