OpenNMS的主要功能之一就是对事件及通知的管理。其实,对于任意一个网管系统而言,其功能都可以描述为检测网络的变化,而每一个这种变化都可以理解为一个事件。

OpenNMS通过一个名为Eventd的服务来管理事件(可以在%opennms_home%/etc/service-configuration.xml文件中看到该服务的身影:) )。在OpenNMS中有两种类型的事件:一种是OpenNMS自己内部产生的事件,还有一种就是外部产生的SNMP Trap事件。后台的服务可以生成事件,如discovery服务当收到某个接口对ping的响应后,就会产生一个newSuspect事件,同时这些后台服务也可以作为事件监听者来监听这些事件,当这些事件发生后,可以做相应的处理,例如capsd服务当收到newSuspect事件后,就开始对该事件对应的接口进行服务扫描。

当产生事件时,还可以针对事件设置一些参数,如事件描述信息、用于生成日志的消息内容以及事件的严重度。另外一些自动化的操作也可以用于当事件发生时将这些事件的参数发送给外部的一些脚本程序,从而触发它们的执行。而这些都可以通过eventconf.xml文件来定义。后面我们会详细介绍该文件的内容。

OpenNMS还提供了功能丰富的通知系统,一些事件可以用于发送通知,例如通过页面通知或者email通知。

下面介绍一下eventconf.xml文件中的内容:

该文件默认路径为%opennms_home%/etc/. 该文件定义了如何处理事件。首先看下该文件的最顶层定义如下:

 

  1. <events xmlns="http://xmlns.opennms.org/xsd/eventconf"> 
  2.         <global> 
  3.                 <security> 
  4.                         <doNotOverride>logmsg</doNotOverride> 
  5.                         <doNotOverride>operaction</doNotOverride> 
  6.                         <doNotOverride>autoaction</doNotOverride> 
  7.                         <doNotOverride>tticket</doNotOverride> 
  8.                         <doNotOverride>script</doNotOverride> 
  9.                 </security> 
  10.         </global> 

eventconf.xml文件的最顶层元素为events。Eventd服务监听5817端口,所以即使外部的进程也可以向eventd发送事件。这里的security标签用于阻止外部进程发送的事件覆盖该文件中定义的对事件的处理方法。在这个针对全局的设置之后,开始是针对每个事件的具体定义了,我们以其中一个作为实例看下如何定义一个事件:

 

  1. <event> 
  2.   <uei>uei.opennms.org/nodes/nodeLostService</uei> 
  3.   <event-label>OpenNMS-defined node event: nodeLostService</event-label> 
  4.   <descr> 
  5.     &#38lt;p&#38gt;A %service% outage was identified on interface 
  6.     %interface%.&#38lt;/p&#38gt; &#38lt;p&#38gt;A new Outage record has been 
  7.     created and service level availability calculations will be 
  8.     impacted until this outage is resolved.&#38lt;/p&#38gt; 
  9.   </descr> 
  10.   <logmsg dest='logndisplay'> 
  11.           %service% outage identified on interface %interface%. 
  12.   </logmsg> 
  13.   <severity>Major</severity> 
  14. </event> 

这里显示的是nodeLostService事件,我们看下事件的组成部分:

UEI:

其全称为 Universal Event Identifier,它只是一个用于标记事件的全局唯一的一个标记。对于OpenNMS的内部事件,事件的UEI是在代码中硬编码的,所以除非修改源代码,否则是没办法修改的。

event-label:

事件标签,这只是一个事件的普通文本表示的标签,会在前台Web界面中用到。

descr:

描述信息,关于事件的描述信息。可以在描述信息中嵌入HTML元素,在事件描述中你可以嵌入一些元素,如%interface%,这些相当于变量,在实际显示某个信息时,它会根据实际的内容替换这些元素。

logmsg:

关于事件的简单的描述或者概括。该元素的dest属性的取值可以取下面中的任何一种:

  1. logndisplay
    将该事件保存至数据库,同时在Web界面中显示该事件
  2. logonly
    只把该事件存至数据库,并不在Web界面中显示
  3. suppress 
    既不保存该事件,也不在界面中显示
  4. donotpersist 
    不保存该事件到数据库,但仍然会发送给OpenNMS的后台中那些监听该事件的那些服务(例如可以用于产生通知)
  5. discardtraps 
    这个只适用于通过trapd收到的trap。这会导致trapd直接丢弃trap而不会产生事件。OpenNMs中监听该事件的后台服务则无法收到该类型的事件。

severity:

事件严重度,不同严重度的事件在显示效果上会不一样,如颜色不同,字体不同等。