OpenNMS的主要功能之一就是對事件及通知的管理。其實,對于任意一個網管系統而言,其功能都可以描述為檢測網絡的變化,而每一個這種變化都可以了解為一個事件。
OpenNMS通過一個名為Eventd的服務來管理事件(可以在%opennms_home%/etc/service-configuration.xml檔案中看到該服務的身影:) )。在OpenNMS中有兩種類型的事件:一種是OpenNMS自己内部産生的事件,還有一種就是外部産生的SNMP Trap事件。背景的服務可以生成事件,如discovery服務當收到某個接口對ping的響應後,就會産生一個newSuspect事件,同時這些背景服務也可以作為事件監聽者來監聽這些事件,當這些事件發生後,可以做相應的處理,例如capsd服務當收到newSuspect事件後,就開始對該事件對應的接口進行服務掃描。
當産生事件時,還可以針對事件設定一些參數,如事件描述資訊、用于生成日志的消息内容以及事件的嚴重度。另外一些自動化的操作也可以用于當事件發生時将這些事件的參數發送給外部的一些腳本程式,進而觸發它們的執行。而這些都可以通過eventconf.xml檔案來定義。後面我們會詳細介紹該檔案的内容。
OpenNMS還提供了功能豐富的通知系統,一些事件可以用于發送通知,例如通過頁面通知或者email通知。
下面介紹一下eventconf.xml檔案中的内容:
該檔案預設路徑為%opennms_home%/etc/. 該檔案定義了如何處理事件。首先看下該檔案的最頂層定義如下:
- <events xmlns="http://xmlns.opennms.org/xsd/eventconf">
- <global>
- <security>
- <doNotOverride>logmsg</doNotOverride>
- <doNotOverride>operaction</doNotOverride>
- <doNotOverride>autoaction</doNotOverride>
- <doNotOverride>tticket</doNotOverride>
- <doNotOverride>script</doNotOverride>
- </security>
- </global>
eventconf.xml檔案的最頂層元素為events。Eventd服務監聽5817端口,是以即使外部的程序也可以向eventd發送事件。這裡的security标簽用于阻止外部程序發送的事件覆寫該檔案中定義的對事件的處理方法。在這個針對全局的設定之後,開始是針對每個事件的具體定義了,我們以其中一個作為執行個體看下如何定義一個事件:
- <event>
- <uei>uei.opennms.org/nodes/nodeLostService</uei>
- <event-label>OpenNMS-defined node event: nodeLostService</event-label>
- <descr>
- &lt;p&gt;A %service% outage was identified on interface
- %interface%.&lt;/p&gt; &lt;p&gt;A new Outage record has been
- created and service level availability calculations will be
- impacted until this outage is resolved.&lt;/p&gt;
- </descr>
- <logmsg dest='logndisplay'>
- %service% outage identified on interface %interface%.
- </logmsg>
- <severity>Major</severity>
- </event>
這裡顯示的是nodeLostService事件,我們看下事件的組成部分:
UEI:
其全稱為 Universal Event Identifier,它隻是一個用于标記事件的全局唯一的一個标記。對于OpenNMS的内部事件,事件的UEI是在代碼中寫死的,是以除非修改源代碼,否則是沒辦法修改的。
event-label:
事件标簽,這隻是一個事件的普通文本表示的标簽,會在前台Web界面中用到。
descr:
描述資訊,關于事件的描述資訊。可以在描述資訊中嵌入HTML元素,在事件描述中你可以嵌入一些元素,如%interface%,這些相當于變量,在實際顯示某個資訊時,它會根據實際的内容替換這些元素。
logmsg:
關于事件的簡單的描述或者概括。該元素的dest屬性的取值可以取下面中的任何一種:
-
将該事件儲存至資料庫,同時在Web界面中顯示該事件logndisplay
-
隻把該事件存至資料庫,并不在Web界面中顯示logonly
-
既不儲存該事件,也不在界面中顯示suppress
-
不儲存該事件到資料庫,但仍然會發送給OpenNMS的背景中那些監聽該事件的那些服務(例如可以用于産生通知)donotpersist
-
這個隻适用于通過trapd收到的trap。這會導緻trapd直接丢棄trap而不會産生事件。OpenNMs中監聽該事件的背景服務則無法收到該類型的事件。discardtraps