OpenNMS全接触-事件及通知(八)

 在OpenNMS全接触-事件及通知(六)中曾提到,在OpenNMS中有两种类型的事件,一种是OpenNMS内部产生的事件,而另外一种就是外部事件,如SNMP Trap。OpenNMS中有个trapd服务专门负责接收SNMP Trap。而这是通过eventconf.xml文件中的<mask>元素来控制的:

 

  
  
  
  
  1. <event> 
  2.   <mask> 
  3.     <maskelement> 
  4.       <mename>id</mename> 
  5.       <mevalue>.1.3.6.1.4.1.9.9.70.2</mevalue> 
  6.     </maskelement> 
  7.     <maskelement> 
  8.       <mename>generic</mename> 
  9.       <mevalue>6</mevalue> 
  10.     </maskelement> 
  11.     <maskelement> 
  12.       <mename>specific</mename> 
  13.       <mevalue>17</mevalue> 
  14.     </maskelement> 
  15.   </mask> 
  16.   <uei>http://uei.opennms.org/vendor/Cisco/traps/ciscoC3800SysAggregateStatusChange</uei> 
  17.   <event-label>CISCO-C3800-MIB defined trap event: ciscoC3800SysAggregateStatusChange</event-label> 
  18.   <descr>&#38lt;p&#38gt;Notification that the aggregate status of a node 
  19.          has changed.&#38lt;/p&#38gt;&#38lt;table&#38gt; 
  20.          &#38lt;tr&#38gt;&#38lt;td&#38gt;&#38lt;b&#38gt; 
  21.          c3800SysNextTrapSeqNum&#38lt;/b&#38gt;</td&#38gt;&#38lt;td&#38gt;%parm[#1]% 
  22.          &#38lt;/td&#38gt;&#38lt;td&#38gt;&#38lt;p;&#38gt;</p&#38gt;&#38lt;/td;&#38gt;&#38lt;/tr&#38gt;&#38lt;tr&#38gt;&#38lt;td&#38gt;&#38lt;b&#38gt; 
  23.          sysName&#38lt;/b&#38gt;&#38lt;/td&#38gt;&#38lt;td&#38gt;%parm[#2]% 
  24.          &#38lt;/td&#38gt;&#38lt;td&#38gt;&#38lt;p;&#38gt;&#38lt;/p&#38gt;&#38lt;/td;&#38gt;&#38lt;/tr&#38gt;&#38lt;tr&#38gt;&#38lt;td&#38gt;&#38lt;b&#38gt; 
  25.          c3800SysTrapSeverity&#38lt;/b&#38gt;&#38lt;/td&#38gt;&#38lt;td&#38gt;%parm[#3]% 
  26.          &#38lt;/td&#38gt;&#38lt;td&#38gt;&#38lt;p;&#38gt; 
  27.          clear(1) minor(2) major(3)&#38lt;/p&#38gt; 
  28.          &#38lt;/td;&#38gt;&#38lt;/tr&#38gt;&#38lt;tr&#38gt;&#38lt;td&#38gt;&#38lt;b&#38gt; 
  29.          c3800SysAggregateStatus&#38lt;/b&#38gt;&#38lt;/td&#38gt;&#38lt;td&#38gt;%parm[#4]% 
  30.          &#38lt;/td&#38gt;&#38lt;td&#38gt;&#38lt;p;&#38gt; 
  31.          clear(1) minor(2) major(3)</p> 
  32.          &#38lt;/td;&#38gt;&#38lt;/tr&#38gt;&#38lt;/table&#38gt; 
  33.   </descr> 
  34.   <logmsg dest='logndisplay'><p>Cisco Event: C3900: Node Status has changed.</p></logmsg> 
  35.   <severity>Indeterminate</severity> 
  36. </event> 
这是针对Cisco C3800设备的一个事件,该事件看起来与OpenNMS的内部事件很像,不过比内部事件多了个<mask>元素。<mask>又是由一系列的<maskelement>元素构成的。只有当定义的所有<maskelement>都匹配时,才会生成该事件。
对于上面这个例子而言,对于一个企业OID(id)为  .1.3.6.1.4.1.9.9.70.2,且generic的值为6,而specific值为17的snmp trap才会匹配到该事件,从而产生该事件。
关于SNMP trap的具体内容可以参考RFC1157,这里重点讨论OpenNMS是怎么样将SNMP Trap映射到一个事件上的。
<mename>中的取值可以为以下几个之一:
  • uei
  • source
  • host
  • snmphost
  • nodeid
  • interface
  • service
  • id
  • specific
  • generic
  • community

另外还可以使用%作为通配符,如:

 

<mask>
  <maskelement>
    <mename>id</mename>
    <mevalue>.1.3.6.1.4.1.9.%</mevalue>
  </maskelement>
</mask>

 

这里就表示Cisco设备的所有SNMP Trap。
这里有个地方需要注意,就是OpenNMS在匹配SNMP Trap与eventconf.xml里面定义的事件时,当它匹配到第一个满足所有匹配调节的event后,就停止继续匹配,所以eventconf.xml文件中event定义的顺序非常重要。例如,如果我们把上面的带有通配符的事件定义在上面的 ciscoC3800SysAggregateStatusChange事件之前,则ciscoC3800SysAggregateStatusChange事件
将永远不会被匹配到,从而也就永远不会发生。另外还有一点就是上面提到的通配符,其实只是简单的字符串替换的作用,相当于字串匹配。还是以 .1.3.6.1.4.1.9.%为例,它只是会匹配以.1.3.6.1.4.1.9.开头的所有OID,而比如.1.3.6.1.4.1.9,则不会
被匹配,因为少了最后那个点。而如果我们去掉最后那个点,即变成 .1.3.6.1.4.1.9%,如果有个OID为.1.3.6.1.4.1.99的事件,而又在这之后定义了.1.3.6.1.4.1.9%,则那么对于.1.3.6.1.4.1.9,则只会匹配到.1.3.6.1.4.1.99,而无法匹配到.1.3.6.1.4.1.9%。
 
OpenNMS中,对于有些事件,特别是SNMP Trap事件,还可以在事件中包含一些额外的信息,这些信息被称之为“variable bindings”或者简称为"varbinds"。在上述的 ciscoC3800SysAggregateStatusChange事件中就包括了4个,这些信息可以通过parm元素访问它们。这些信息
其实就像事件的属性,它们由键值对组成,包括以下内容:
 
事件parm元素
参数名称 取值
%parm[all]% 

将返回以空格隔开的所有参数名称及其取值,

parmName1="parmValue1" parmName2="parmValue2

%parm[values-all]%

将返回以空格隔开的所有参数的取值,

如:parmValue1 parmValue2

%parm[names-all]%

将返回以空格隔开的所有参数的名称,

如:parmName1 parmName2

%parm[<name>]% 如果包含有以<name>为名称的属性,则返回该属性的值
%parm[##]% 返回属性的个数
%parm[#<num>]% 返回第<num>个参数的值
%parm[name-#<num>]% 返回第<num>个参数的名称
 
ciscoC3800SysAggregateStatusChange事件为例,在该事件的描述中列出了该事件所有的参数,所以对于第2个参数,
即sysName,则可以通过%parm[#2]来访问其值并打印出来。我们既然可以访问这些值,自然也可以通过这些值进一步对SNMP Trap进行过滤,在下一篇文章中将介绍如果通过varbinds对SNMP Trap进一步进行匹配。

 

你可能感兴趣的:(职场,网管软件,休闲,OpenNMS)