配置健康监视系统
healthMonitoring 是ASP.NET中应用程序中健康检测机制,当应用程序有未处理的异常,和其他一些自定义需要检测的事件发生,ASP.NET会使用相应的提供程序把事件的详细信息保存下来,以供系统管理员参考。
如果要使用该功能需要配置web.config的healthMonitoring 节点
结构为:
<healthMonitoring
Enabled="true|false"
heartbeatInterval="time interval">
<bufferModes>...</bufferModes>
<providers>...</providers>
<eventMappings>...</eventMappings>
<profiles>...</profiles>
<rules>...</rules>
</healthMonitoring>
说明:
eventMappings用于定义需要检测的事件。
providers 用于定义记录该事件的提供程序
rules 用于建立eventMappings 和providers 的联系。
例如:
<rules>
<add name="All Errors Default" eventName="All Errors" provider="EventLogProvider" profile="Default" minInstances="1" maxLimit="2" minInterval="00:00:00"/>
</rules>
minInstances 用于指定当web应用最少几个 All Errors 事件时才使用EventLogProvider记录相应信息
maxLimit 用于指定当web应用中最多使用EventLogProvider记录几个 All Errors 事件的相应信息
minInterval 用于指定记录最少间隔时间。在这段时间内发生的相同eventName只记录一次。
<healthMonitoring Enabled="true|false" heartBeatInterval="time interval">
<bufferModes>... </bufferModes>
<providers>... </providers>
<eventMappings>... </eventMappings>
<profiles>... </profiles>
<rules>... </rules>
</healthMonitoring>
如果看一下<healthMonitoring>元素,就可以判断是否可以将设置属性为有效或无效,也可以指定对WebHeartBeatEvent被唤醒的时间间隔。healthMonitoring有5个孩子。
bufferModes,在此可以定义一个Provider的缓冲区大小。
Providers,在此说明处理事件的Providers。
eventMappings, 在此可以画出与友好事件类型相关的事件名称。
profiles, 在此定义一个可以用来配置事件的参数集集合。
rules, 在此画出Providers的事件图。
在继续之前,这里有一份含ASP.NET中的一些Providers清单:
System.Web.Management.MailWebEventProvider
System.Web.Management.SimpleMailWebEventProvider //用E-mail发送web事件信息给指定的管理员
System.Web.Management.TemplatedMailWebEventProvider //为邮件指定模板文本文件,可以对邮件进行自定义和转换。
System.Web.Management.TraceWebEventProvider
System.Web.Management.EventLogWebEventProvider //将事件记录到Windows事件日志中
System.Web.Management.SqlWebEventProvider //将事件记录到SQL Server数据库,数据库需要有相应的表和存储过程。
System.Web.Management.WmiWebEventProvider //将web事件转发到Windows Managment Instrumentation(WMI)子系统中。
不需要解释这些,名字告诉我们它们是干什么的。还要提一下SqlWebEventProvider依靠Sql server而工作,它将事件存储在aspnet_Web_Event表。为了安装此数据库,必须运行位于framework文件夹中的aspnet_regsql.exe向导。
WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源,比如用户可以在远程计算机器上启动一个进程;设定一个在特定日期和时间运行的进程;远程启动计算机;获得本地或远程计算机的已安装程序列表;查询本地或远程计算机的Windows事件日志等等。
为了在应用程序启动时能够正确地动态载入自定义事件,必须将它们放在自己的预编译程序集中。否则,运行程序将找不到自定义事件类型。基于这个原因创建一个独立的项目,并且在主项目中引用该项目编译得到的.dll文件。
当管理员或编辑人员通过网站的管理功能删除一条记录时,需要自定义一个事件类来对删除操作记入日志。我们先创建一个自定义的WebCustomEvent:WebBaseEvent。然后再创建RecordDeletedEvent:WebCustomEvent,并带有一个新的构造函数,该构造函数以被删除的实体(如分类、商品、文章等)的名称及其ID作为参数。代码如下:
对于默认的ASP.NET安装,所有这些事件都已经在计算机范围的配置文件里用相对友好的名字进行了注册。当然了,如果你创建了由应用程序产生的自定义事件类型,可以在web.config文件<healthMonitoring>节的<eventMappings>节中注册它。
可以查看提供的web.config配置
默认安装上可用事件的列表
事件名称 |
事件类型 |
描述 |
All Events |
WebBaseEvent |
设计用来使所有事件可用, 因为所有的事件都从这个类继承 |
HeartBeats |
WebHeartBeatEvent |
Heartbeat事件在周期性间隔内引 发进程监视事件 |
Application Lifetime Events |
WebApplicationLifetimeEvent |
传送应用程序特定的事件, 如开始或关闭 |
Request Processing Events |
WebRequestEvent |
传送所有处理可用事件的 请求的基本配置 |
All Errors |
WebBaseErrorEvent |
捕获所有类型的错误事件,它是 所有一般错误的基类 |
Infrastructure Errors |
WebErrorEvent |
All Errors关注的是Web应用程序 内发生的所有错误,而这个类 型的错误包括ASP.NET运行时 自身的基本错误 |
Request Processing Errors |
WebRequestErrorEvent |
在处理某个请求时发生的错误 |
All Audits |
WebAuditEvent |
捕获所有类型的审核,它是所有 审核事件的一般基类 |
Failure Audits |
WebFailureAuditEvent |
捕获所有注定失败的审核,如 非法登录或访问被拒绝的错误 |
Success Audits |
WebSuccessAuditEvent |
捕获所有一定成功的操作的审核 |
提供程序:
EventLogWebEventProvider。它负责把不同类型的事件加入到本地系统的Windows事务日志。
MailWebEventProvider。它是一个通过SMTP把事件发送到配置好的邮件地址的提供程序。电子邮件地址作为参数被添加到提供程序条目,其添加方式和前面代码段中SqlWebEventProvider的ConnectionStringName参数相同。
SqlWebEventProvider。它可以把事件保存到基于SQL Server的数据库中。当然,数据库要有提供程序使用的标准表。用于创建和删除这些表的SQL脚本在.NET Framework的目录里,这两个目录分别是InstallWebEventSqlProvider.sql和UninstallWebEventSqlProvider.sql。
TraceWebEventProvider。它允许你捕获事件并把它添加到ASP.NET跟踪,它可以通过运行时的trace.axd处理器查看。
WmiWebEventProvider。它允许你通过WMI发布事件。你可以通过System.Management API或Windows提供的非托管的WMI提供程序API像捕获其他类型的WMI事件那样捕获这些事件。
SqlWebEventProvider 类
实现将事件通知保存到 SQL 数据库的事件提供程序。
命名空间:System.Web.Management
程序集:System.Web(在 system.web.dll 中)
web.config中的相应配置为:
aspnet_reqsql.exe –E –S .\sqlexpress –d aspnetdb –A w
新建一个testEvent.aspx页面用来进行测试:
单击删除记录按钮后,观察后台数据库对应的事件表:aspnet_Web_Event
若是单击[除零异常]按钮,出现异常捕获:
继续运行程序后,再看表:aspnet_Web_Event
可见引发了WebHeartbeartEvent:心跳事件。
事件和提供程序
把事件和提供程序分解为两个组件的原因是为了提高扩展性和灵活性。事件只定义了应用程序的真实状态,提供程序指定事件如何被处理。ASP.NET为捕获如下类型的事件部署了几个事件提供程序,它们都定义在System.Web.Management命名空间里。
心跳 按web.config配置文件定义的间隔定期引发的事件。通过它,你可以监视运行中的进程在规律的间隔里的内存消耗、CPU处理器的负载等。实现这个事件的类是WebHeartBeatEvent。
应用程序生命周期事件。你可以捕获几个在应用程序生命周期引发的事件,如开始、关闭、会话开始和会话结束等。这种类型的事件被封装在WebApplicationLifetimeEvent类里。
安全审核事件。WebAuditEvent类封装安全审核事件,如失败的登录或者试图访问没有相应权限的资源。
基于请求和响应的事件。它们封装在WebRequestEvent类里。你可以捕获几种类型的事件,如请求开始、请求结束和有关产生的响应的信息等。
错误。最后,你可以捕获并监视几种类型的错误,包括在开始/关闭上发生的一般应用程序错误以及基于请求的错误。一般的错误封装在WebErrorEvent类里而请求特定的错误封装在WebRequestErrorEvent类里。
当来之世,经道灭尽,我以慈悲哀愍,特留此经止住百岁。其有众生,值斯经者,随意所愿,皆可得度。(南无阿弥陀佛)
道可道,非常道;名可名,非常名。
我常说,一个国家,一个民族,亡国都不怕,最可怕的是一个国 家和民族自己的根本文化亡掉了,这就会沦为万劫不复,永远不会翻身。---南怀瑾<国学大师>