1. 程式人生 > >【Zabbix】SNMPtrap-實現主動監控的原理與安裝配置

【Zabbix】SNMPtrap-實現主動監控的原理與安裝配置

工欲善其事,必先利其器。作為一款強大的開源軟體,Zabbix號稱“Monitor Everything”,其所依賴的,很大程度上便是SNMP的資料採集支援。SNMP 協議是用來管理裝置的協議,目前SNMP已成為網路管理領域中事實上的工業標準,並被廣泛支援和應用,大多數網路管理系統和平臺都是基於SNMP的。如果 NMS( 網管系統 ) 需要查詢被管理裝置的狀態,則需要通過 SNMP的get 操作獲得裝置的狀態資訊。但由於告警資訊一般是由受管伺服器進行主動告警,這時候就不能通過管理方主動使用snmpget來進行,而是由受管伺服器通過SNMPTRAP進行。
 

一、什麼是SNMPTRAP

SNMP trap(SNMP 陷阱):某種入口,到達該入口會使SNMP被管裝置主動通知SNMP管理器,而不是等待SNMP管理器的再次輪詢。

SNMP Trap 是 SNMP的一部分,當被監控段出現特定事件,可能是效能問題,甚至是網路裝置介面宕掉等,代理端會給管理站發告警事件。假如在特定事件出現的時刻,不是由 Agent 主動通知 NMS,那麼NMS 必須不斷地對 Agent 進行輪詢。這是非常浪費計算資源的方法,正如人們用中斷通知 CPU 資料的到達,而不是讓 CPU 進行輪詢一樣。Trap 通知是更加合理的選擇。用一句話來說的話,SNMP Trap 就是被管理裝置主動傳送訊息給 NMS 的一種機制。

 

二、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 [email protected]
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的監控方式,主動型監控是比較推薦的選擇方式。


原文地址

SNMPtrap——主動監控的利器
(出處: 樂維_一站式運維監控管理平臺)