工欲善其事,必先利其器。作為一款強大的開源軟體,Zabbix號稱“Monitor Everything”,其所依賴的,很大程度上便是SNMP的數據採集支持。SNMP 協議是用來管理設備的協議,目前SNMP已成為網路管理領域中事實上的工業標準,並被廣泛支持和應用,大多數網路管理系統和平臺都是基於SNM ...
工欲善其事,必先利其器。作為一款強大的開源軟體,Zabbix號稱“Monitor Everything”,其所依賴的,很大程度上便是SNMP的數據採集支持。SNMP 協議是用來管理設備的協議,目前SNMP已成為網路管理領域中事實上的工業標準,並被廣泛支持和應用,大多數網路管理系統和平臺都是基於SNMP的。如果 NMS( 網管系統 ) 需要查詢被管理設備的狀態,則需要通過 SNMP的get 操作獲得設備的狀態信息。但由於告警信息一般是由受管伺服器進行主動告警,這時候就不能通過管理方主動使用snmpget來進行,而是由受管伺服器通過SNMPTRAP進行。
二、SNMPTRAP功能特點
1、事件驅動,第一時間收到設備故障告警 以事件為驅動,由被監控的主機、網路設備、應用在發生故障時向NMS發送SNMP Trap,通過對接收到的SNMP Trap進行翻譯和展現,以最快速度向管理人員發送告警。SNMP Trap不同於SNMP的主動採集,SNMP採集伺服器按照固定的時間間隔,由網管系統以詢問的方式,採集被監控端性能指標,因此發現被監控端性能問題的快慢取決於採集的頻率間隔。而SNMP Trap是以事件為驅動,在被監控端設置陷阱,一旦被監控端設備出現相關問題,立刻發送SNMP Trap,因此能夠在最短的時間內發現故障,避免因為設備故障帶來的經濟損失。 2、提供SNMPTrap的接收,並通過對Trap信息翻譯,展現事件 支持設備,主機和應用的SNMP Trap信息,從被動變為主動,全面監控IT系統。通過對SNMP Trap的翻譯和展現,一旦某個IT組件出現問題,可以在短時間之內,即可收到故障信息,滿足企業的快速發現問題的需要。 通過SNMPTrap的接收規則定義,管理員可以過濾非重要設備的Trap信息,也可以過濾被監控設備的非重要故障信息,幫助管理員在第一時間收到真正需要的管理信息。 3、定製SNMPTrap告警規則觸發告警,提供多種方式發送告警信息 用戶通過管理端定製需要告警的SNMP Trap信息,針對特定SNMP Trap事件通過郵件、簡訊、語音、微信等方式向相關人員發送報警,幫助管理人員快速收到IT系統故障信息。 4、支持事件導出 彙總特定時間內特定SNMPTrap事件,同時可以以Excel格式導出事件數據,便於管理人員對故障信息進行統計和分析。 5、支持各類設備廠家MIB庫的導入 雖然國內各種網路設備都支持SNMP Trap,但是各個廠家的MIB庫並不能很好的支持公共標準,因此,很多監控系統都支持私有MIB庫的導入,確保能夠全面相容各個廠家設備的SNMP Trap信息。 三、SNMPTRAP工作流程1、Agent端
A、編寫MIB文件,確定好TRAP名稱等信息(一般MIB設備廠商會提供)
B、命令方式:發送各種TRAP命令(Manager地址後面一定要加埠號162),在Manager端看反應結果,在Agent端無反應
C、自動觸發:配置snmpd.conf設置觸發TRAP,系統發生某類錯誤時會自動觸發相應類型的TRAP,發送給Manager
D、程式方式:一部份TRAP需要寫C語言程式,用相應的api(send_easy_trap或send_v2trap)發送 2、Manager端
A、配置snmptrapd.conf文件,設置訪問許可權
B、將MIB文件導入到mibs文件夾中
C、用perl等腳本語言編寫處理trap的程式
D、配置snmptrapd.conf文件,添加traphandler項,將不同的TRAP對應到不同的處理程式上
3、流程圖
圖中在測試機 M1 上啟動 snmptrapd 進程,並且在 UDP 162 埠上監聽 SNMP Trap 信息,一旦收到 Trap,snmptrapd 將所接收到的 Trap 信息內容列印到一個本地的文本文件中。 機器 M2 模擬發送 SNMP Trap 的設備,將調用 net-snmp 的命令行程式 snmptrap 發送一個 Trap。
四、SNMPTRAP在ZABBIX上實現過程
1、設置ZABBIX接收SNMP Trap
1)、安裝依賴的程式包
yum install -y net-snmp-utils net-snmp-perl
2)、下載和解壓Zabbix源碼包
tar -zxvf zabbix-2.2.1.tar.gz
3)、從源碼文件中複製腳本和添加執行許可權
cp ./zabbix-2.2.1/misc/snmptrap/zabbix_trap_receiver.pl /usr/binchmod +x /usr/bin/zabbix_trap_receiver.pl
4)、設置Trap接收器和團體名稱
vi /etc/snmp/snmptrapd.conf
# you can set multiple community names:
# authCommunity execute public
# authCommunity execute S7di@kjh8
authCommunity execute public
perl do "/usr/bin/zabbix_trap_receiver.pl"
5)、編輯zabbix_server.conf配置文件啟用SNMP Trap
vi /etc/zabbix/zabbix_server.conf
StartSNMPTrapper=1
SNMPTrapperFile=/tmp/zabbix_traps.tmp (註:必須跟zabbix_trap_receiver.pl腳本中設置的相同)
6)、重啟zabbix_server服務使配置生效
/etc/init.d/zabbix-server restart
7)、設置SNMP MIBs
MIBs預設在系統目錄/usr/share/snmp/mibs下,添加MIB名稱到/etc/snmp/snmp.conf配置文件中(如果不存在則手動新建配置文件),它們將被Net-SNMP進程用來解析trap OID值。
例:mibs +JUNIPER-MIB:JUNIPER-FABRIC-CHASSIS:BGP4-MIB
8)、重啟snmptrapd服務
/etc/init.d/snmptrapd restart
2、配置ZABBIX
1)、創建"SNMP trap fallback"模板和"SNMP trap fallback"監控項:
監控項名稱: SNMP trap fallback
類型: SNMP trap
鍵值: snmptrap.fallback
數據類型: Log
註:該監控項用來收集所有不匹配的trap
2)、創建觸發器以通知管理員關於新的不匹配trap:
觸發器名稱: Unmatched SNMP trap received from {HOST.NAME}
表達式: {Template SNMP trap fallback:snmptrap.fallback.nodata(300)}=0
3)、創建"Template SNMP traps"模板並鏈接到"Template SNMP trap fallback"
在"Template SNMP traps"模板中,為trap創建需要的監控項. key值使用snmptrap[regex]格式,
例:
Key: snmptrap["SNMPv2-MIB::coldStart"]
替代OID值(數字或文本),您可以使用任何從一個trap文本中的單詞/短語:
Key: snmptrap["No route to host"]
在這種情況下,Zabbix從匹配的地址中捕獲所有SNMP Trap包含"No route to host"。
4)、為監控項創建觸發器
在前面創建的模板,為必要的項目(Trap)創建觸發器.
這裡涉及一些變數,以前面例子中的監控項為例創建觸發器:
表達式:
{Template SNMP traps:snmptrap["SNMPv2-MIB::coldStart"].nodata(5m)}=0
意思是如果5分鐘後,trap接收和自動返回OK狀態,則觸發器進入警告狀態
5)、查看ZABBIX獲取到的數據 五、總結
SNMP Trap是一種事件驅動型的監控方式,避免了監控系統的資源浪費,提高了警告的及時性和準確性。目前很多監控系統都提供SNMP Trap的監控方式,主動型監控是比較推薦的選擇方式。