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屬性的取值可以取下面中的任何一種:
logndisplay
將該事件保存至數據庫,同時在Web界面中顯示該事件logonly
只把該事件存至數據庫,並不在Web界面中顯示suppress
既不保存該事件,也不在界面中顯示donotpersist
不保存該事件到數據庫,但仍然會發送給OpenNMS的後臺中那些監聽該事件的那些服務(例如可以用於產生通知)-
discardtraps
這個只適用於通過trapd收到的trap。這會導致trapd直接丟棄trap而不會產生事件。OpenNMs中監聽該事件的後臺服務則無法收到該類型的事件。
severity:
事件嚴重度,不同嚴重度的事件在顯示效果上會不一樣,如顏色不同,字體不同等。