转载于: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文件“减负”。例如:
- <event-file>/opt/OpenNMS/etc/events/3Com.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/APC.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Brocade.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/CIM.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Cisco.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Fore.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/HP.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Intel.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Microsoft.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Novell.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Oracle.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/SonicWall.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Xerox.events.xml</event-file>
- <event-file>/opt/OpenNMS/etc/events/Standard.events.xml</event-file>
这些被包含的文件必须以<events></events>元素为根元素,在这之间加入<event>元素用于定义事件,定义方法与eventconf.xml文件中相同。所有的snmp trap对应的事件都按厂家放在一个文件中,并且在OpenNMS启动过程中按顺序依次加载,所以这些文件被加载的顺序,即被包含的顺序也非常重要。通过这种方式,就可以有效的将所有外部事件分离出去,而在eventconf.xml文件中只需要保存OpenNMS的内部事件即可,而且这些事件先于外部事件被加载。在eventconf.xml文件的最后,是包含通用的默认事件,它总是放在最后被加载。
这里有几个提示:
例如,如果我们要去掉rtc的登录事件,既不显示该事件,也不保存该事件,我们可以将如下事件定义添加至eventconf.xml文件,注意,它的顺序要在uei.opennms.org/internal/authentication/successfulLogin事件之前:
- <event>
- <mask>
- <maskelement>
- <mename>uei</mename>
- <mevalue>uei.opennms.org/internal/authentication/successfulLogin</mevalue>
- </maskelement>
- <varbind>
- <vbnumber>1</vbnumber>
- <vbvalue>rtc</vbvalue>
- </varbind>
- </mask>
- <uei>uei.opennms.org/internal/authentication/successfulLogin</uei>
- <event-label>OpenNMS-definedinternalevent:auserhassuccessfullyauthenticationtotheWebUI</event-label>
- <descr>
- ThiseventissentbytheWebUIwhenuserrtchassuccessfullyauthenticated
- </descr>
- <logmsgdest='donotpersist'>
- OpenNMSuser%parm[user]%hasloggedinfrom%parm[ip]%.
- </logmsg>
- <severity>Normal</severity>
- </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;来查看事件所对应的参数,例如:
- SELECTeventparmsFROMeventsWHEREeventid=204;
- eventparms
- ---------------------------------------------------------------------------------------------------------------------------
- ds=http(string,text);value=11.75(string,text);threshold=100.0(string,text);trigger=3(string,text);rearm=50.0(string,text)
- (1row)
这例表示了一个highThresholdRearmed
事件的所有参数,它们也可以用于事件过滤。由于事件很多,所以很容易导致数据库膨胀,所以对于不再有用的事件可以进行删除,然而由于在数据库的故障表及通知表中可能会有外键依赖于事件表,所以只能删除那些没有外键依赖约束的事件,可以通过如下SQL语句来实现:
- DELETEFROMeventsWHEREeventidNOTIN(SELECT
- svclosteventidFROM
- outages)ANDeventidNOTIN(SELECT
- svcregainedeventidFROMoutages);
至此,OpenNMS的事件介绍就全部结束了,后续将继续介绍OpenNMS的通知机制。