`
fatherican
  • 浏览: 49424 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

 
阅读更多

转载于:http://njulinq.blog.51cto.com/1257169/291192

在上一篇文章

中,介绍了OpenNMS在收到受管设备发出的SNMP Trap之后,如何将收到的SNMP Trap与eventconf.xml文件中定义的事件(event)进行匹配,从而触发该事件的发生。主要是引入了<mask>标签元素。在此基础上,OpenNMS还提供了根据SNMP Trap带上来的varbinds对SNMP Trap进一步过滤。

我们还是以ciscoC3800SysAggregateStatusChange事件为例,当Cisco C3800的Aggregate状态发生变化时,便会发出SNMP Trap,并触发该事件。然而该事件的严重度如何?该状态变化是“好”(比如由不可操作变为可操作)还是“坏”(由可操作变为不可操作)?其实这个信息在发上来的SNMP Trap中就已经包含了,其对应的就是parm中的第三个参数,即trap的严重度等级。

OpenNMS从1.1版本开始,就加入了根据varbinds对SNMP trap进行过滤的功能。这也是通过在<mask>中实现的,我们可以重写OpenNMS全接触-事件及通知(八)中提到的event中的mask元素:

  1. <mask>
  2. <maskelement>
  3. <mename>id</mename>
  4. <mevalue>.1.3.6.1.4.1.9.9.70.2</mevalue>
  5. </maskelement>
  6. <maskelement>
  7. <mename>generic</mename>
  8. <mevalue>6</mevalue>
  9. </maskelement>
  10. <maskelement>
  11. <mename>specific</mename>
  12. <mevalue>17</mevalue>
  13. </maskelement>
  14. <varbind>
  15. <vbnumber>3</vbnumber>
  16. <vbvalue>3</vbvalue>
  17. </varbind>
  18. </mask>

在原来的基础上加入了<varbind>元素,加入该元素后,那么该匹配条件就更严格,在原来的基础上,即OID为.1.3.6.1.4.1.9.9.70.2,且generic为6,而specific为17,又加入了对第三个参数即trap serverity只

关注等级为3的snmp trap,当然这里的等级3是由设备在发送snmp trap时确定的。比如这里的3代表着Cisco给定的等级“主要的”。

当然,我们还可以通过多个varbinds对snmp trap进行过滤。例如:

  1. <varbind>
  2. <vbnumber>3</vbnumber>
  3. <vbvalue>2</vbvalue>
  4. <vbvalue>3</vbvalue>
  5. </varbind>
  6. <varbind>
  7. <vbnumber>4</vbnumber>
  8. <vbvalue>2</vbvalue>
  9. <vbvalue>3</vbvalue>
  10. </varbind>

该过滤条件将匹配出第3个参数为2或者3,第4个参数为2或者3的snmp trap。

从OpenNMS1.6版本开始,还加入了通过正则表达式对varbinds的值进行过滤,只要在表达式之前加~

  1. <varbind>
  2. <vbnumber>1</vbnumber>
  3. <vbvalue>~[Dd]own</vbvalue>
  4. </varbind>

该过滤条件将过滤出第1个参数取值为“Down”或者“down"。

另外还可以通过通配符%进行快速前缀匹配,如:

  1. <varbind>
  2. <vbnumber>1</vbnumber>
  3. <vbvalue>Error:%</vbvalue>
  4. </varbind>

这将会匹配出所有第一个参数以Error:开头的所有值。

很多MIB库对某些OID的值进行了编码,即分配了一些特定值,例如snmp agent对ifAdminStatus及ifOperStatus就进行了编码处理:1代表Up,2代表Down。

而因为OpenNMS没有自带的Mib Browser,所以OpenNMS是将这种映射关系定义在event的事件描述中的。只要event配置正确,也可以在event的logmsg中将snmp trap中带的数值转换为更有意义的字符描述信息。

让我们以CiscoHSRP 的状态变化为例,(该trap对应的OID .1.3.6.1.4.1.9.9.106.2 generic 6 and specific 1),对应的事件为uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange。

该trap中包含有一个varbind,其名称为cHsrpGrpStandbyState,其取值范围为从1到6,含义如下:

initial(1) learn(2) listen(3) speak(4) standby(5) active(6).

该事件的原始定义如下:

  1. <event>
  2. <mask>
  3. <maskelement>
  4. <mename>id</mename>
  5. <mevalue>.1.3.6.1.4.1.9.9.106.2</mevalue>
  6. </maskelement>
  7. <maskelement>
  8. <mename>generic</mename>
  9. <mevalue>6</mevalue>
  10. </maskelement>
  11. <maskelement>
  12. <mename>specific</mename>
  13. <mevalue>1</mevalue>
  14. </maskelement>
  15. </mask>
  16. <uei>uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange</uei>
  17. <event-label>CISCO-HSRP-MIBdefinedtrapevent:cHsrpStateChange</event-label>
  18. <descr><p>AcHsrpStateChangenotificationissentwhena
  19. cHsrpGrpStandbyStatetransitionstoeitheractiveor
  20. standbystate,orleavesactiveorstandbystate.There
  21. willbeonlyonenotificationissuedwhenthestatechange
  22. isfromstandbytoactiveandviceversa.</p><table>
  23. <tr><td><b>
  24. cHsrpGrpStandbyState</b></td><td>%parm[#1]%
  25. </td><td><p;>
  26. initial(1)learn(2)listen(3)speak(4)standby(5)active(6)</p>
  27. </td;></tr></table>
  28. </descr>
  29. <logmsgdest='logndisplay'><p>CiscoEvent:HSRPStateChange.</p></logmsg>
  30. <severity>Minor</severity>
  31. </event>

现在我们要求在事件的logmsg中看到状态变化的值,即要求包含有cHsrpGrpStandbyState的当前值。而直接将其取值如2,显示在logmsg中是没有多大意义的,除非用户自己知道

这个数字的含义。那么现在我们就可以通过varbind解码的方法将这个值映射为其字符串描述即learn。

  1. <event>
  2. <mask>
  3. <maskelement>
  4. <mename>id</mename>
  5. <mevalue>.1.3.6.1.4.1.9.9.106.2</mevalue>
  6. </maskelement>
  7. <maskelement>
  8. <mename>generic</mename>
  9. <mevalue>6</mevalue>
  10. </maskelement>
  11. <maskelement>
  12. <mename>specific</mename>
  13. <mevalue>1</mevalue>
  14. </maskelement>
  15. </mask>
  16. <uei>uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange</uei>
  17. <event-label>CISCO-HSRP-MIBdefinedtrapevent:cHsrpStateChange</event-label>
  18. <descr><p>AcHsrpStateChangenotificationissentwhena
  19. cHsrpGrpStandbyStatetransitionstoeitheractiveor
  20. standbystate,orleavesactiveorstandbystate.There
  21. willbeonlyonenotificationissuedwhenthestatechange
  22. isfromstandbytoactiveandviceversa.</p><table>
  23. <tr><td><b>
  24. cHsrpGrpStandbyState</b></td><td>%parm[#1]%
  25. </td><td><p;>
  26. initial(1)learn(2)listen(3)speak(4)standby(5)active(6)</p>
  27. </td;></tr></table>
  28. </descr>
  29. <logmsgdest='logndisplay'><p>CiscoEvent:HSRPStateChangeto%parm[#1]%.</p></logmsg>
  30. <severity>Minor</severity>
  31. <varbindsdecode>
  32. <parmid>parm[#1]</parmid>
  33. <decodevarbindvalue="1"varbinddecodedstring="initial"/>
  34. <decodevarbindvalue="2"varbinddecodedstring="learn"/>
  35. <decodevarbindvalue="3"varbinddecodedstring="listen"/>
  36. <decodevarbindvalue="4"varbinddecodedstring="speak"/>
  37. <decodevarbindvalue="5"varbinddecodedstring="standby"/>
  38. <decodevarbindvalue="6"varbinddecodedstring="active"/>
  39. </varbindsdecode>
  40. </event>

那么在该定义中,第一个参数varbind将通过<varbindsdecode>定义的映射关系将其取值替换为字符描述。例如,如果该snmp trap的第一个参数其值为6的话,则在logmsg中将显示:

<p>CiscoEvent:HSRPStateChangetoactive</p>

在后续文章中将介绍如何根据MIB库中定义的trap转换为eventconf.xml文件中的事件。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics