生活随笔
收集整理的這篇文章主要介紹了
OpenNMS全接触-事件及通知(九)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?在上一篇文章OpenNMS全接觸-事件及通知(八)中,介紹了OpenNMS在收到受管設(shè)備發(fā)出的SNMP Trap之后,如何將收到的SNMP Trap與eventconf.xml文件中定義的事件(event)進(jìn)行匹配,從而觸發(fā)該事件的發(fā)生。主要是引入了<mask>標(biāo)簽元素。在此基礎(chǔ)上,OpenNMS還提供了根據(jù)SNMP Trap帶上來(lái)的varbinds對(duì)SNMP Trap進(jìn)一步過(guò)濾。
我們還是以ciscoC3800SysAggregateStatusChange事件為例,當(dāng)Cisco C3800的Aggregate狀態(tài)發(fā)生變化時(shí),便會(huì)發(fā)出SNMP Trap,并觸發(fā)該事件。然而該事件的嚴(yán)重度如何?該狀態(tài)變化是“好”(比如由不可操作變?yōu)榭刹僮?#xff09;還是“壞”(由可操作變?yōu)椴豢刹僮?#xff09;?其實(shí)這個(gè)信息在發(fā)上來(lái)的SNMP Trap中就已經(jīng)包含了,其對(duì)應(yīng)的就是parm中的第三個(gè)參數(shù),即trap的嚴(yán)重度等級(jí)。
OpenNMS從1.1版本開始,就加入了根據(jù)varbinds對(duì)SNMP trap進(jìn)行過(guò)濾的功能。這也是通過(guò)在<mask>中實(shí)現(xiàn)的,我們可以重寫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 > ? 在原來(lái)的基礎(chǔ)上加入了<varbind>元素,加入該元素后,那么該匹配條件就更嚴(yán)格,在原來(lái)的基礎(chǔ)上,即OID為.1.3.6.1.4.1.9.9.70.2,且generic為6,而specific為17,又加入了對(duì)第三個(gè)參數(shù)即trap serverity只
關(guān)注等級(jí)為3的snmp trap,當(dāng)然這里的等級(jí)3是由設(shè)備在發(fā)送snmp trap時(shí)確定的。比如這里的3代表著Cisco給定的等級(jí)“主要的”。
當(dāng)然,我們還可以通過(guò)多個(gè)varbinds對(duì)snmp trap進(jìn)行過(guò)濾。例如:
?
< varbind > ???< vbnumber > 3</ vbnumber > ? ??< vbvalue > 2</ vbvalue > ? ??< vbvalue > 3</ vbvalue > ? </ varbind > ?< varbind > ???< vbnumber > 4</ vbnumber > ? ??< vbvalue > 2</ vbvalue > ? ??< vbvalue > 3</ vbvalue > ? </ varbind > ? 該過(guò)濾條件將匹配出第3個(gè)參數(shù)為2或者3,第4個(gè)參數(shù)為2或者3的snmp trap。
從OpenNMS1.6版本開始,還加入了通過(guò)正則表達(dá)式對(duì)varbinds的值進(jìn)行過(guò)濾,只要在表達(dá)式之前加~
?
< varbind > ???< vbnumber > 1</ vbnumber > ? ??< vbvalue > ~[Dd]own</ vbvalue > ? </ varbind > ? 該過(guò)濾條件將過(guò)濾出第1個(gè)參數(shù)取值為“Down”或者“down"。
另外還可以通過(guò)通配符%進(jìn)行快速前綴匹配,如:
?
< varbind > ???< vbnumber > 1</ vbnumber > ? ??< vbvalue > Error:%</ vbvalue > ? </ varbind > ? 這將會(huì)匹配出所有第一個(gè)參數(shù)以Error:開頭的所有值。
很多MIB庫(kù)對(duì)某些OID的值進(jìn)行了編碼,即分配了一些特定值,例如snmp agent對(duì)ifAdminStatus及ifOperStatus就進(jìn)行了編碼處理:1代表Up,2代表Down。
而因?yàn)镺penNMS沒(méi)有自帶的Mib Browser,所以O(shè)penNMS是將這種映射關(guān)系定義在event的事件描述中的。只要event配置正確,也可以在event的logmsg中將snmp trap中帶的數(shù)值轉(zhuǎn)換為更有意義的字符描述信息。
讓我們以Cisco?HSRP 的狀態(tài)變化為例,(該trap對(duì)應(yīng)的OID .1.3.6.1.4.1.9.9.106.2 generic 6 and specific 1),對(duì)應(yīng)的事件為uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange。
該trap中包含有一個(gè)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 > ? 現(xiàn)在我們要求在事件的logmsg中看到狀態(tài)變化的值,即要求包含有cHsrpGrpStandbyState的當(dāng)前值。而直接將其取值如2,顯示在logmsg中是沒(méi)有多大意義的,除非用戶自己知道
這個(gè)數(shù)字的含義。那么現(xiàn)在我們就可以通過(guò)varbind解碼的方法將這個(gè)值映射為其字符串描述即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 > ? 那么在該定義中,第一個(gè)參數(shù)varbind將通過(guò)<varbindsdecode>定義的映射關(guān)系將其取值替換為字符描述。例如,如果該snmp trap的第一個(gè)參數(shù)其值為6的話,則在logmsg中將顯示:
<p>Cisco?Event:?HSRP?State?Change?to?active</p>
在后續(xù)文章中將介紹如何根據(jù)MIB庫(kù)中定義的trap轉(zhuǎn)換為eventconf.xml文件中的事件。
?
轉(zhuǎn)載于:https://blog.51cto.com/njulinq/291192
總結(jié)
以上是生活随笔 為你收集整理的OpenNMS全接触-事件及通知(九) 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。