更多文章
本篇將說明如何用 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 設定完成
IBM V7000)
被監控的設備只需要設定 SNMP Trap 功能
IBM V7000 > Settings > Notifications > SNMP > Actions > Add
QNAP NAS)
QNAP Admin > System Settings > Network Services > SNMP
TIPs:
QNAP 的 SNMP 包含了 SNMP 與 SNMP Trap 兩個應用服務,SNMP 可用於蒐集系統的各項資訊,與本篇使用 SnmpTrap 有關的只需要填入 Trap address。
IBM DS 3400/4300/4800 Storage)
必須找一台 CentOS Linux 並安裝 IBM DS Storage Management,將 storage 的 IP 加入軟體的管理。
IBM DS Manager > 選擇要管理的 storage > 按右鍵選 Configure Alerts > SNMP
V7000 測試方法)
V7000 的設備可以拔掉兩個 node 中擔任 standby node 的網路線(不要拔 primary node),系統就會發出一個 Error 的訊息。
V7000 的畫面
Nagios 的畫面
QNAP NAS 測試方法)
要使 QNA NAS 發出 Warning 事件,較安全的做法就是,找一台 Linux 然後執行
$> snmpwalk -v 2c -c public <QNAP IP>
因為 QNAP 預設會啟動 DDos 保護,這個指令會讓 QNAP 發出 SNMP 被攻擊的警告事件。
TIPs:
* 錯誤事件的詳細資訊會被記錄在 Nagios 的 Status Information 欄位。
* 事件發生後,如果 Nagios 沒有顯示,可以檢查 /var/log/snmptt/snmptt.log
| 文件 | 大小 | 日期 | 附件上傳者 | |||
|---|---|---|---|---|---|---|
| IBM-DS_SM10_R3.mib MIB for IBM DS 3400/4300/4800 Storage | 7.13 KB | 13:37, 12 Oct 2015 | alang | 動作 | ||
| ibm_v7000-snmp.png 無描述 | 28.25 KB | 17:45, 7 Oct 2015 | alang | 動作 | ||
| QNAP_NAS.mib MIB for QNAP NAS | 46.01 KB | 15:39, 9 Oct 2015 | alang | 動作 | ||
| snmptrap-ibm_DS.png 無描述 | 61.98 KB | 13:34, 12 Oct 2015 | alang | 動作 | ||
| snmptrap-nagios.png 無描述 | 54.43 KB | 09:16, 8 Oct 2015 | alang | 動作 | ||
| snmptrap-qnap.png 無描述 | 55.45 KB | 15:48, 9 Oct 2015 | alang | 動作 | ||
| snmptrap-v7k.png 無描述 | 20.65 KB | 09:16, 8 Oct 2015 | alang | 動作 | ||
| snmptt how it works.png 無描述 | 16.37 KB | 16:51, 6 Oct 2015 | alang | 動作 | ||
| SVC_MIB_7.5.0.MIB MIB for IBM V7000 Storage | 10.31 KB | 17:47, 6 Oct 2015 | alang | 動作 | ||