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

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

OpenNMS提供了一个工具mib2opennms用于将snmp trap的定义转换为OpenNMS中的事件。eventconf.xml文件定义了OpenNMS中的内部事件及外部事件(snmp trap),而且这些事件定义的顺序也至关重要,因为当在通过snmp trap做事件匹配时,只会触发第一个满足匹配条件的事件。所以对于一个给的的snmp trap,如果需要针对不同的variable binding取值做过滤,就需要定义多个事件,这样就会导致eventconf.xml文件迅速膨胀,为了更好的维护该文件,又引入了<event-file>元素,该元素用于包含其他事件定义文件,通过这种方式,就可以将一部分事件的定义转移到其他文件中,从而为eventconf.xml文件“减负”。例如:

 
  1. <event-file>/opt/OpenNMS/etc/events/3Com.events.xml</event-file>
  2. <event-file>/opt/OpenNMS/etc/events/APC.events.xml</event-file>
  3. <event-file>/opt/OpenNMS/etc/events/Brocade.events.xml</event-file>
  4. <event-file>/opt/OpenNMS/etc/events/CIM.events.xml</event-file>
  5. <event-file>/opt/OpenNMS/etc/events/Cisco.events.xml</event-file>
  6. <event-file>/opt/OpenNMS/etc/events/Fore.events.xml</event-file>
  7. <event-file>/opt/OpenNMS/etc/events/HP.events.xml</event-file>
  8. <event-file>/opt/OpenNMS/etc/events/Intel.events.xml</event-file>
  9. <event-file>/opt/OpenNMS/etc/events/Microsoft.events.xml</event-file>
  10. <event-file>/opt/OpenNMS/etc/events/Novell.events.xml</event-file>
  11. <event-file>/opt/OpenNMS/etc/events/Oracle.events.xml</event-file>
  12. <event-file>/opt/OpenNMS/etc/events/SonicWall.events.xml</event-file>
  13. <event-file>/opt/OpenNMS/etc/events/Xerox.events.xml</event-file>
  14. <event-file>/opt/OpenNMS/etc/events/Standard.events.xml</event-file>

这些被包含的文件必须以<events></events>元素为根元素,在这之间加入<event>元素用于定义事件,定义方法与eventconf.xml文件中相同。所有的snmp trap对应的事件都按厂家放在一个文件中,并且在OpenNMS启动过程中按顺序依次加载,所以这些文件被加载的顺序,即被包含的顺序也非常重要。通过这种方式,就可以有效的将所有外部事件分离出去,而在eventconf.xml文件中只需要保存OpenNMS的内部事件即可,而且这些事件先于外部事件被加载。在eventconf.xml文件的最后,是包含通用的默认事件,它总是放在最后被加载。

这里有几个提示:

  • 由于系统在匹配事件时,是会顺序扫描所有的事件,所以尽可能去掉那些你不会用到的事件,包括文件
  • 如果你需要对某个事件文件做定制,例如,对3Com.events.xml文件做定制,可以先拷贝3Com.events.xml文件至my.3Com.events.xml文件,然后在该文件中做修改,并且将该文件先于3Com.events.xml文件包含至eventconf.xml文件。这样在未来,当默认的3Com.events.xml文件需要修改时,你的工作会很轻松。

例如,如果我们要去掉rtc的登录事件,既不显示该事件,也不保存该事件,我们可以将如下事件定义添加至eventconf.xml文件,注意,它的顺序要在uei.opennms.org/internal/authentication/successfulLogin事件之前:

 
  1. <event>
  2. <mask>
  3. <maskelement>
  4. <mename>uei</mename>
  5. <mevalue>uei.opennms.org/internal/authentication/successfulLogin</mevalue>
  6. </maskelement>
  7. <varbind>
  8. <vbnumber>1</vbnumber>
  9. <vbvalue>rtc</vbvalue>
  10. </varbind>
  11. </mask>
  12. <uei>uei.opennms.org/internal/authentication/successfulLogin</uei>
  13. <event-label>OpenNMS-definedinternalevent:auserhassuccessfullyauthenticationtotheWebUI</event-label>
  14. <descr>
  15. ThiseventissentbytheWebUIwhenuserrtchassuccessfullyauthenticated
  16. </descr>
  17. <logmsgdest='donotpersist'>
  18. OpenNMSuser%parm[user]%hasloggedinfrom%parm[ip]%.
  19. </logmsg>
  20. <severity>Normal</severity>
  21. </event>

这样,我们就能够有效的屏蔽掉rtc成功的登录事件。

为了使对eventconf.xml文件的修改能够立即生效,其实不需要重启OpenNMS,只需要通过OpenNMS提供的send-event.pl脚本发送uei.opennms.org/internal/eventsConfigChange事件即可通知OpenNMS,告知其eventconf.xml文件改变了需要重新加载。另外OpenNMS还提供了send-trap.pl用于发送snmp trap。

可以直接在数据库中查看事件,特别是可以通过执行SELECT eventparms FROM events WHERE eventid=204;来查看事件所对应的参数,例如:

 
  1. SELECTeventparmsFROMeventsWHEREeventid=204;
  2. eventparms
  3. ---------------------------------------------------------------------------------------------------------------------------
  4. ds=http(string,text);value=11.75(string,text);threshold=100.0(string,text);trigger=3(string,text);rearm=50.0(string,text)
  5. (1row)

这例表示了一个highThresholdRearmed事件的所有参数,它们也可以用于事件过滤。由于事件很多,所以很容易导致数据库膨胀,所以对于不再有用的事件可以进行删除,然而由于在数据库的故障表及通知表中可能会有外键依赖于事件表,所以只能删除那些没有外键依赖约束的事件,可以通过如下SQL语句来实现:

 
  1. DELETEFROMeventsWHEREeventidNOTIN(SELECT
  2. svclosteventidFROM
  3. outages)ANDeventidNOTIN(SELECT
  4. svcregainedeventidFROMoutages);

至此,OpenNMS的事件介绍就全部结束了,后续将继续介绍OpenNMS的通知机制。


你可能感兴趣的:(open)