天天看點

snmp學習筆記——配置使用trap

本文是筆者學習net-snmp開發包時的心得,由于那個官方網站的東西比較亂,是以寫一個總結,希望後來者少走些彎路

一,trap的用途

TRAP是提供從代理程序到管理站的異步報告機制。

為了使管理站能夠及時而又有效地對被管理裝置進行監控,同時又不過分增加網絡的通信負載,必須使用陷入(TRAP)制導的輪訊過程。代理程序負責在必要時向管理站報告異常事件,得到異常事件的報告後,管理站可以查詢有關的代理,以便得到更具體的資訊,對事件的原因做進一步的分析

二,trap的工作流程

1,agent端:

A,  編寫mib檔案,确定好trap名稱等資訊。

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對應到不同的處理程式上

三,trap的環境配置

1,  manager端

a,  在/etc/hosts.allow加入允許接受的網段snmptrapd: 192.168.

b,  建立/usr/share/snmp/snmptrapd.conf(我的機器上是這個,不同機器不同,可能有的放在/etc/snmp,/usr/local/share/snmp/下,視不同情況慢慢實驗),加入以下一行:

authcommunity execute|log|net public

設定所有使用者的通路權限:可執行,記錄,傳遞

四,指令方式的過程

1,處理系統預設的trap

添加以下幾行到snmptrapd.conf中

用snmptrapd –d –f –Lo啟動snmptrapd

然後在agent端輸入snmptrap -v 2c -c public 192.168.213.64:162 "" UCD-SNMP-MIB::ucdStart

Manager端反應:

NET-SNMP version 5.3.0.1

Received 73 bytes from UDP: [192.168.213.64]:32807

0000: 30 47 02 01  01 04 06 70  75 62 6C 69  63 A7 3A 02    0G.....public.:.

0016: 04 58 92 A4  F0 02 01 00  02 01 00 30  2C 30 10 06    .X.........0,0..

0032: 08 2B 06 01  02 01 01 03  00 43 04 03  E7 18 95 30    .+.......C.....0

0048: 18 06 0A 2B  06 01 06 03  01 01 04 01  00 06 0A 2B    ...+...........+

0064: 06 01 04 01  8F 65 81 7B  01                          .....e.{.

192.168.213.64 [UDP: [192.168.213.64]:32807]: Trap , DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (65476757) 7 days, 13:52:47.57, SNMPv2-MIB::snmpTrapOID.0 = OID: UCD-SNMP-MIB::ucdStart

sh: page_me: command not found

說明收到trap ucdstart并且調用對應的腳本程式,這裡由于系統沒有page_me這個指令,是以傳回指令找不到

2,  處理自定義trap(參考http://www.net-snmp.org/wiki/index.php/TUT:snmptrap)

編寫兩個mib檔案,包括snmp1和snmp2兩種trap

Snmp1的mib:TRAP-TEST-MIB.txt

Snmp2的mib:NOTIFICATION-TEST-MIB.txt

在manager端敲入指令:

snmptrap -v 2c -c public 192.168.213.64:162 "" NOTIFICATION-TEST-MIB::demo-notif          SNMPv2-MIB::sysLocation.0 s "just here"

agent端輸出:

Received 96 bytes from UDP: [192.168.213.64]:32808

0000: 30 5E 02 01  01 04 06 70  75 62 6C 69  63 A7 51 02    0^.....public.Q.

0016: 04 17 27 54  32 02 01 00  02 01 00 30  43 30 10 06    ..'T2......0C0..

0032: 08 2B 06 01  02 01 01 03  00 43 04 03  F0 3A 1A 30    .+.......C...:.0

0048: 18 06 0A 2B  06 01 06 03  01 01 04 01  00 06 0A 2B    ...+...........+

0064: 06 01 04 01  8F 65 87 5F  11 30 15 06  08 2B 06 01    .....e._.0...+..

0080: 02 01 01 06  00 04 09 6A  75 73 74 20  68 65 72 65    .......just here

192.168.213.64 [UDP: [192.168.213.64]:32808]: Trap , DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (66075162) 7 days, 15:32:31.62, SNMPv2-MIB::snmpTrapOID.0 = OID: UCD-SNMP-MIB::ucdavis.991.17, SNMPv2-MIB::sysLocation.0 = STRING: just here

sh: log_it: command not found

其中just here就是我們想要的結果

3,  自己編寫處理trap腳本

建立root/bin/traps檔案,輸入以下内容

在manager的snmptrapd.conf加入以下幾行

traphandle SNMPv2-MIB::coldStart     /root/bin/traps cold

traphandle SNMPv2-MIB::warmStart    /root/bin/traps  warm

traphandle IF-MIB::linkDown          /root/bin/traps down

traphandle IF-MIB::linkUp            /root/bin/traps up

traphandle SNMPv2-MIB::authenticationFailure  /root/bin/traps auth

# this one is deprecated

traphandle .1.3.6.1.6.3.1.1.5.6     /root/bin/traps egp-neighbor-loss

重新開機snmptrapd:snmptrapd –d –f –Lo 161這裡要它監聽161端口

在agent端輸入指令:

snmptrap -v 1 -c public 192.168.213.64 TRAP-TEST-MIB::demotraps 192.168.213.64 2 0 ""IF-MIB::ifIndex i 1

manager端的反應:

Received 63 bytes from UDP: [192.168.213.64]:32812

0000: 30 3D 02 01  00 04 06 70  75 62 6C 69  63 A4 30 06    0=.....public.0.

0016: 0A 2B 06 01  04 01 8F 65  0D 87 5E 40  04 C0 A8 D5    .+.....e..^@....

0032: 40 02 01 02  02 01 00 43  04 03 F1 9E  99 30 10 30    @......C.....0.0

0048: 0E 06 09 2B  06 01 02 01  02 02 01 01  02 01 01       ...+...........

2007-08-07 12:54:43 192.168.213.64(via UDP: [192.168.213.64]:32812) TRAP, SNMP v1, community public

        UCD-SNMP-MIB::ucdExperimental.990 Link Down Trap (0) Uptime: 7 days, 15:47:44.25

        IF-MIB::ifIndex = INTEGER: 1

trap: down 192.168.213.64 UDP: [192.168.213.64]:32812 DISMAN-EVENT-MIB::sysUpTimeInstance = 7:15:47:44.25, SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkDown, IF-MIB::ifIndex = 1, SNMP-COMMUNITY-MIB::snmpTrapAddress.0 = 192.168.213.64, SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 = "public", SNMPv2-MIB::snmpTrapEnterprise.0 = UCD-SNMP-MIB::ucdExperimental.990

4,  讓agent自動産生trap

配置agent的snmpd.conf,加入以下幾行:(未搞出來,可能是配置檔案問題,manager端收不到任何trap)

五,下一步

仔細研究snmpd.conf和snmptrapd.conf,調試出系統自動觸發trap

學習mib結構,搞清楚如何寫自定義trap的mib

搞清楚例子的意思

研究一下在程式中發送trap的c語言api

學習perl,python等一種腳本語言,學會編寫trap處理程式

繼續閱讀