Zabbix 正則結合JavaScript簡化Trap告警信息

場景:運維部小陳給公司的華爲雲計算節點配置了Trap告警,方便及時監控到存儲的運行狀況。但是領導看過覺得收到的Trap信息過於複雜,不便快速查看到告警信息,要小陳給處理成簡單易懂的形式,於是乎,操作如下:
環境:
zabbix4.2.5,已安裝snmptrap服務
1、從計算節點收到snmptrap如下圖:

需要提取出來的信息如下:
SNMPv2-SMI::enterprises.2011.2.290.1.1.1.2 type=4 value=STRING: 「15.1000102」 //告警ID
SNMPv2-SMI::enterprises.2011.2.290.1.1.1.8 type=4 value=STRING: 「2」 //告警類型(0-原始告警,1-清除告警,2-更新告警)
SNMPv2-SMI::enterprises.2011.2.290.1.1.1.9 type=4 value=STRING: 「3」 //告警等級(1-緊急,2-主要,3-次要,4-提示)
SNMPv2-SMI::enterprises.2011.2.290.1.1.1.5 type=4 value=Hex-STRING: 42 49 4D 26 E8 AE BE E8 AE A1 E7 AE A1 E7 90 86
EF BC 88 E6 96 B0 EF BC 89 //告警對象
SNMPv2-SMI::enterprises.2011.2.290.1.1.1.3 type=4 value=STRING: 「VM Memory Usage Exceeds the Threshold」 //告警名稱
SNMPv2-SMI::enterprises.2011.2.290.1.1.1.15 type=4 value=STRING: 「Current threshold=80.0%,VM memory usage=83.02%」 //告警附加信息
2、zabbix監控項上正則處理,如下圖所示:
匹配:OID.0.::.(\n).[\n].[\n].ING:(.)[\n].[\n].[\n].ING:(.)[\n].ING:(.)[\n].[\n].[\n].[\n].[\n].[\n].[\n].[\n].[\n].[\n].ING:(.\W.)[\n].ING:(.)[\n].*[\n].ING:(.)
輸出:告警ID:\2\1告警類型:\3\1告警等級:\4\1告警對象:\5\1告警名稱:\6\1告警附加信息:\7\1

再次發送Trap信息,得出結果:
告警ID: 「15.1000102」
告警類型: 「2」
告警等級: 「3」
告警對象: 42 49 4D 26 E8 AE BE E8 AE A1 E7 AE A1 E7 90 86
EF BC 88 E6 96 B0 EF BC 89
告警名稱: 「VM Memory Usage Exceeds the Threshold」
告警附加信息: 「Current threshold=80.0%,VM memory usage=83.02%」

3、告警對象的信息還需要用JavaScript處理,添加預處理步驟javascript
腳本如下:
var str1 = /告警ID:([\s\S])告警對象:/;
str1 = str1.exec(value)[0];
var str3 = /告警名稱:([\s\S]
)/;
str3 = str3.exec(value)[0];
var str2 = /告警對象:([\s\S]*)告警名稱/;
str2 = str2.exec(value);
str2 = str2[1]; //需要十六進制轉換
str2 = str2.replace(/\n/g,’’).replace(/./g,’’).replace(/ /g,’’); //刪除\n 刪除.字符 刪除空格
var temp = ‘’;
var m = str2.match(/…/g);
for (var i=0;m!=null, i < m.length; i++)
{
temp += ‘%’ + m;
}
str2 = decodeURI(temp);
return str1 + str2 +’\n’+ str3;

把Trap信息重新發送,進行測試的結果如下:

技術交流歡迎加入Q羣:177428068