更多文章
本篇將說明如何用 Nagios 監控有支援 SNMP Trap 的 IT 設備,比如 Cisco 網路設備或 IBM V7000 儲存設備。
SNMP Trap 與 SNMP 最大不同就是應用面,一者用於設備故障時發出警示事件,另一個則用於蒐集系統各項資訊,例如網路頻寬、CPU/RAM 耗用資訊等等。
本例就以 IBM V7000 儲存設備為例,也附上 Cisco 網路設備的做法。
各項原件 Nagios、SNMPTT、snmptrapd 彼此運作原理大致如下:
新增 SNMP_TRAP 服務的範本
TIP:
max_check_attempts 要設為 1,因為被監控的設備一般只會發出一次的 snmp trap,如果大於 1 警告郵件就不會寄出。
#> /etc/nagios/objects/templates.cfg define service { name SNMP_TRAP service_description SNMP_TRAP active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized process_perf_data 0 obsess_over_service 0 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts check_command check-host-alive ; This will be used to reset the service to "OK" is_volatile 1 check_period 24x7 max_check_attempts 1 normal_check_interval 1 retry_check_interval 1 notification_interval 120 notification_period 24x7 notification_options w,u,c,r contact_groups netops-24x7 ; Modify this to match your Nagios contact group definitions register 0 }
新增 V7000 主機檢查檔
TIP:
服務定義檔的 check_interval 建議保持 120 分鐘,這裡的時間決定了網頁上的 CRITICAL 狀態要保持多久,過了這個時間後,服務狀態會自動恢復為 OK;假使想立即解除 CRITICAL 狀態,可以進入該服務的頁面,從右框執行 Re-schedule the next check of this service。
#> vi /etc/nagios/objects/STORAGES.cfg define host{ use generic-host host_name ibm_v7k01 alias IBM V7000 #1 address 10.4.1.51 check_command check-host-alive max_check_attempts 5 check_period 24x7 notification_interval 120 notification_period 24x7 notification_options d,r contact_groups adm-alang notifications_enabled 1 ;0=disable, 1=enable } define hostgroup{ hostgroup_name fs-storage alias FileServer Storages members ibm_v7k01 } define service { use SNMP_TRAP host_name ibm_v7k01 service_description SNMP_TRAP check_interval 120 ; Don't clear for 2 hours contact_groups adm-alang notifications_enabled 1 }
套用設定
#> service nagios reload
模擬主機異常發生的測試
#> /usr/lib64/nagios/plugins/eventhandlers/submit_check_result ibm_v7k01 SNMP_TRAP 2 "TESTING"
NOTE: 以上指令可以模擬發出如下的異常資訊,可以從 Nagios 網頁上檢視異常發生,等一會兒後,網頁上狀況會自動恢復成正常。
異常主機: ibm_v7k01
異常服務: SNMP_TRAP
狀況代碼: 2 = Critical
輸出資訊: TESTING
指令 submit_check_result 更多說明
# $1 = host_name (Short name of host that the service is
# associated with)
# $2 = svc_description (Description of the service)
# $3 = return_code (An integer that determines the state
# of the service check, 0=OK, 1=WARNING, 2=CRITICAL,
# 3=UNKNOWN).
# $4 = plugin_output (A text string that should be used
# as the plugin output for the service check)
修改 Nagios 指令 submit_check_result
#> vi /usr/lib64/nagios/plugins/eventhandlers/submit_check_result 第一行 #!/bin/sh 改成 #!/bin/bash
下載並上傳 MIB 檔
#> cp SVC_MIB_7.5.0.MIB /usr/share/snmp/mibs/SVC_MIB_7.5.0.MIB.txt
TIPs:
如果是下載 Cisco 網路設備的 MIB 可以前往 ftp://ftp.cisco.com/pub/mibs/v2/
設定 snmptrapd
#> vi /etc/snmp/snmptrapd.conf disableAuthorization yes traphandle default /usr/sbin/snmptthandler
套用設定
#> service snmptrapd restart
轉換 MIB 成 snmptt 設定檔
#> snmpttconvertmib --in=/usr/share/snmp/mibs/SVC_MIB_7.5.0.MIB.txt --out=/etc/snmp/snmptt.conf --debug --exec='/usr/lib64/nagios/plugins/eventhandlers/submit_check_result $r SNMP_TRAP 2'
轉換成功後的輸出:
Line: 135
NOTIFICATION-TYPE: tsveWTrap
Variables: tsveMACH tsveSERI tsveERRI tsveERRC tsveSWVE tsveFRUP tsveCLUS tsveNODE tsveERRS tsveTIME tsveOBJT tsveOBJI tsveADD1 tsveADD2 tsveCOPY tsveMPNO tsveOBJN
Enterprise: ibm2145TSVE
Looking up via snmptranslate: IBM-SVC-MIB::tsveWTrap
Bad month in timestamp (201517040000Z): At line 15 in /usr/share/snmp/mibs/SVC_MIB_7.5.0.MIB.txt
OID: .1.3.6.1.4.1.2.6.190.2
#
Line: 161
NOTIFICATION-TYPE: tsveITrap
Variables: tsveMACH tsveSERI tsveERRI tsveERRC tsveSWVE tsveFRUP tsveCLUS tsveNODE tsveERRS tsveTIME tsveOBJT tsveOBJI tsveADD1 tsveADD2 tsveCOPY tsveMPNO tsveOBJN
Enterprise: ibm2145TSVE
Looking up via snmptranslate: IBM-SVC-MIB::tsveITrap
Bad month in timestamp (201517040000Z): At line 15 in /usr/share/snmp/mibs/SVC_MIB_7.5.0.MIB.txt
OID: .1.3.6.1.4.1.2.6.190.3
Done
Total translations: 3
Successful translations: 3
Failed translations: 0
錯誤: Could not find DEFINITIONS ::= BEGIN statement in MIB file!
解決: 檢查MIB檔案的第一行格示是否有錯,如下
IBM-SVC-MIB DEFINITIONS ::= BEGIN
snmptt.conf 的內容大致如下:
EVENT tsveITrap .1.3.6.1.4.1.2.6.190.3 "Status Events" Normal
FORMAT tsve information trap $*
EXEC /usr/lib64/nagios/plugins/eventhandlers/submit_check_result $r SNMP_TRAP 2 "tsve information trap $*"
SDESC
tsve information trap
Variables:
1: tsveMACH
2: tsveSERI
3: tsveERRI
4: tsveERRC
5: tsveSWVE
6: tsveFRUP
7: tsveCLUS
8: tsveNODE
9: tsveERRS
10: tsveTIME
11: tsveOBJT
12: tsveOBJI
13: tsveADD1
14: tsveADD2
15: tsveCOPY
16: tsveMPNO
17: tsveOBJN
EDESC
重啟 snmptt 服務
#> service snmptt restart
Nagios 設定完成
被監控的設備只需要設定 SNMP Trap 功能
IBM V7000 > Settings > Notifications > SNMP > Actions > Add
V7000 的設備只要拔掉兩個 node 的任一個管理端網路線,系統就會發出一個 Error 的訊息。
V7000 的畫面
Nagios 的畫面
TIPs:
錯誤事件的詳細資訊會被記錄在 Nagios 的 Status Information 欄位。