生活随笔
收集整理的這篇文章主要介紹了
OpenNMS全接触-事件及通知(九)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?在上一篇文章OpenNMS全接觸-事件及通知(八)中,介紹了OpenNMS在收到受管設備發出的SNMP Trap之后,如何將收到的SNMP Trap與eventconf.xml文件中定義的事件(event)進行匹配,從而觸發該事件的發生。主要是引入了<mask>標簽元素。在此基礎上,OpenNMS還提供了根據SNMP Trap帶上來的varbinds對SNMP Trap進一步過濾。
我們還是以ciscoC3800SysAggregateStatusChange事件為例,當Cisco C3800的Aggregate狀態發生變化時,便會發出SNMP Trap,并觸發該事件。然而該事件的嚴重度如何?該狀態變化是“好”(比如由不可操作變為可操作)還是“壞”(由可操作變為不可操作)?其實這個信息在發上來的SNMP Trap中就已經包含了,其對應的就是parm中的第三個參數,即trap的嚴重度等級。
OpenNMS從1.1版本開始,就加入了根據varbinds對SNMP trap進行過濾的功能。這也是通過在<mask>中實現的,我們可以重寫OpenNMS全接觸-事件及通知(八)中提到的event中的mask元素:
?
<mask>???<maskelement>?????<mename>id</mename>?????<mevalue>.1.3.6.1.4.1.9.9.70.2</mevalue>???</maskelement>???<maskelement>?????<mename>generic</mename>?????<mevalue>6</mevalue>???</maskelement>???<maskelement>?????<mename>specific</mename>?????<mevalue>17</mevalue>???</maskelement>???<varbind>?????<vbnumber>3</vbnumber>?????<vbvalue>3</vbvalue>???</varbind>?</mask>? 在原來的基礎上加入了<varbind>元素,加入該元素后,那么該匹配條件就更嚴格,在原來的基礎上,即OID為.1.3.6.1.4.1.9.9.70.2,且generic為6,而specific為17,又加入了對第三個參數即trap serverity只
關注等級為3的snmp trap,當然這里的等級3是由設備在發送snmp trap時確定的。比如這里的3代表著Cisco給定的等級“主要的”。
當然,我們還可以通過多個varbinds對snmp trap進行過濾。例如:
?
<varbind>???<vbnumber>3</vbnumber>???<vbvalue>2</vbvalue>???<vbvalue>3</vbvalue>?</varbind>?<varbind>???<vbnumber>4</vbnumber>???<vbvalue>2</vbvalue>???<vbvalue>3</vbvalue>?</varbind>? 該過濾條件將匹配出第3個參數為2或者3,第4個參數為2或者3的snmp trap。
從OpenNMS1.6版本開始,還加入了通過正則表達式對varbinds的值進行過濾,只要在表達式之前加~
?
<varbind>???<vbnumber>1</vbnumber>???<vbvalue>~[Dd]own</vbvalue>?</varbind>? 該過濾條件將過濾出第1個參數取值為“Down”或者“down"。
另外還可以通過通配符%進行快速前綴匹配,如:
?
<varbind>???<vbnumber>1</vbnumber>???<vbvalue>Error:%</vbvalue>?</varbind>? 這將會匹配出所有第一個參數以Error:開頭的所有值。
很多MIB庫對某些OID的值進行了編碼,即分配了一些特定值,例如snmp agent對ifAdminStatus及ifOperStatus就進行了編碼處理:1代表Up,2代表Down。
而因為OpenNMS沒有自帶的Mib Browser,所以OpenNMS是將這種映射關系定義在event的事件描述中的。只要event配置正確,也可以在event的logmsg中將snmp trap中帶的數值轉換為更有意義的字符描述信息。
讓我們以Cisco?HSRP 的狀態變化為例,(該trap對應的OID .1.3.6.1.4.1.9.9.106.2 generic 6 and specific 1),對應的事件為uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange。
該trap中包含有一個varbind,其名稱為cHsrpGrpStandbyState,其取值范圍為從1到6,含義如下:
initial(1) learn(2) listen(3) speak(4) standby(5) active(6).
該事件的原始定義如下:
?
<event>??<mask>???<maskelement>????<mename>id</mename>????<mevalue>.1.3.6.1.4.1.9.9.106.2</mevalue>???</maskelement>???<maskelement>????<mename>generic</mename>????<mevalue>6</mevalue>???</maskelement>???<maskelement>????<mename>specific</mename>????<mevalue>1</mevalue>???</maskelement>??</mask>??<uei>uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange</uei>??<event-label>CISCO-HSRP-MIB?defined?trap?event:?cHsrpStateChange</event-label>??<descr><p>A?cHsrpStateChange?notification?is?sent?when?a??cHsrpGrpStandbyState?transitions?to?either?active?or??standby?state,?or?leaves?active?or?standby?state.?There??will?be?only?one?notification?issued?when?the?state?change??is?from?standby?to?active?and?vice?versa.</p><table>??<tr><td><b>??cHsrpGrpStandbyState</b></td><td>%parm[#1]%??</td><td><p;>??initial(1)?learn(2)?listen(3)?speak(4)?standby(5)?active(6)</p>??</td;></tr></table>??</descr>??<logmsg?dest='logndisplay'><p>Cisco?Event:?HSRP?State?Change.</p></logmsg>??<severity>Minor</severity>??</event>? 現在我們要求在事件的logmsg中看到狀態變化的值,即要求包含有cHsrpGrpStandbyState的當前值。而直接將其取值如2,顯示在logmsg中是沒有多大意義的,除非用戶自己知道
這個數字的含義。那么現在我們就可以通過varbind解碼的方法將這個值映射為其字符串描述即learn。
?
<event>??<mask>???<maskelement>????<mename>id</mename>????<mevalue>.1.3.6.1.4.1.9.9.106.2</mevalue>???</maskelement>???<maskelement>????<mename>generic</mename>????<mevalue>6</mevalue>???</maskelement>???<maskelement>????<mename>specific</mename>????<mevalue>1</mevalue>???</maskelement>??</mask>??<uei>uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange</uei>??<event-label>CISCO-HSRP-MIB?defined?trap?event:?cHsrpStateChange</event-label>??<descr><p>A?cHsrpStateChange?notification?is?sent?when?a??cHsrpGrpStandbyState?transitions?to?either?active?or??standby?state,?or?leaves?active?or?standby?state.?There??will?be?only?one?notification?issued?when?the?state?change??is?from?standby?to?active?and?vice?versa.</p><table>??<tr><td><b>??cHsrpGrpStandbyState</b></td><td>%parm[#1]%??</td><td><p;>??initial(1)?learn(2)?listen(3)?speak(4)?standby(5)?active(6)</p>??</td;></tr></table>??</descr>??<logmsg?dest='logndisplay'><p>Cisco?Event:?HSRP?State?Change?to?%parm[#1]%.</p></logmsg>??<severity>Minor</severity>??<varbindsdecode>??<parmid>parm[#1]</parmid>??<decode?varbindvalue="1"?varbinddecodedstring="initial"/>??<decode?varbindvalue="2"?varbinddecodedstring="learn"/>??<decode?varbindvalue="3"?varbinddecodedstring="listen"/>??<decode?varbindvalue="4"?varbinddecodedstring="speak"/>??<decode?varbindvalue="5"?varbinddecodedstring="standby"/>??<decode?varbindvalue="6"?varbinddecodedstring="active"/>??</varbindsdecode>?</event>? 那么在該定義中,第一個參數varbind將通過<varbindsdecode>定義的映射關系將其取值替換為字符描述。例如,如果該snmp trap的第一個參數其值為6的話,則在logmsg中將顯示:
<p>Cisco?Event:?HSRP?State?Change?to?active</p>
在后續文章中將介紹如何根據MIB庫中定義的trap轉換為eventconf.xml文件中的事件。
?
轉載于:https://blog.51cto.com/njulinq/291192
總結
以上是生活随笔為你收集整理的OpenNMS全接触-事件及通知(九)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。