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

 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-defined internal event: a user has successfully authentication to the WebUI</event-label> 
  14.    <descr> 
  15.      This event is sent by the WebUI when user rtc has successfully authenticated 
  16.    </descr> 
  17.    <logmsg dest='donotpersist'> 
  18.      OpenNMS user %parm[user]% has logged in from %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. SELECT eventparms FROM events WHERE eventid=204
  2.  
  3.                                                         eventparms 
  4. --------------------------------------------------------------------------------------------------------------------------- 
  5.  ds=http(string,text);value=11.75(string,text);threshold=100.0(string,text);trigger=3(string,text);rearm=50.0(string,text) 
  6. (1 row) 

這例表示了一個highThresholdRearmed 事件的所有參數,它們也可以用於事件過濾。由於事件很多,所以很容易導致數據庫膨脹,所以對於不再有用的事件可以進行刪除,然而由於在數據庫的故障表及通知表中可能會有外鍵依賴於事件表,所以只能刪除那些沒有外鍵依賴約束的事件,可以通過如下SQL語句來實現:

 

  1. DELETE FROM events WHERE eventid NOT IN (SELECT 
  2. svclosteventid FROM 
  3. outages) AND eventid NOT IN (SELECT 
  4. svcregainedeventid FROM outages); 

至此,OpenNMS的事件介紹就全部結束了,後續將繼續介紹OpenNMS的通知機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章