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

本文主要參考: snmp學習筆記——配置使用trap(一) http//blog.chinaunix.net/u1/43391/showart_355332.html

一,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端

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

加入以下一行:

authcommunity execute,log,net public

設置所有用戶的訪問權限:可執行,記錄,傳遞

四,命令方式的過程

1,處理系統默認的trap

添加以下幾行到snmptrapd.conf中:

traphandle .1.3.6.1.6.3.1.5.1       page_me up

traphandle .1.3.6.1.4.1.2021.251.1  page_me up

traphandle .1.3.6.1.4.1.2021.251.2  page_me down

traphandle default                  log_it

用sudo snmptrapd -d -f -Lo啓動snmptrapd

PS: 如果snmptrapd啓動不起來是因爲在安裝net-snmp的時候有些模塊沒有安裝上,
可以通過:

./configure --with-mib-modules="examples/notification"
make
sudo make install

來進行安裝trap相關的模塊。

然後在agent端輸入:

snmptrap -v 2c -c public 127.0.0.1:162 "" UCD-SNMP-MIB::ucdStart

Manager端反應:

NET-SNMP version 5.4.1.2

Received 73 bytes from UDP: [127.0.0.1]:41244
0000: 30 47 02 01  01 04 06 70  75 62 6C 69  63 A7 3A 02    0G.....public.:.
0016: 04 42 8A 48  EC 02 01 00  02 01 00 30  2C 30 10 06    .B.H.......0,0..
0032: 08 2B 06 01  02 01 01 03  00 43 04 00  88 86 97 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.{.

2008-11-11 10:16:12 localhost [UDP: [127.0.0.1]:41244]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8947351) 1 day, 0:51:13.51
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:

TRAP-TEST-MIB DEFINITIONS ::= BEGIN

       IMPORTS ucdExperimental FROM UCD-SNMP-MIB;

 demotraps OBJECT IDENTIFIER ::= { ucdExperimental 990 }

 demo-trap TRAP-TYPE

       STATUS current

       ENTERPRISE demotraps

       VARIABLES { sysLocation }

       DESCRIPTION "This is just a demo"

       ::= 17

 END

Snmp2的mib:NOTIFICATION-TEST-MIB.txt:

NOTIFICATION-TEST-MIB DEFINITIONS ::= BEGIN

       IMPORTS ucdavis FROM UCD-SNMP-MIB;

 demonotifs OBJECT IDENTIFIER ::= { ucdavis 991 }

 demo-notif NOTIFICATION-TYPE

         STATUS current

         OBJECTS { sysLocation }

         DESCRIPTION "Just a test notification"

         ::= { demonotifs 17 }

 END

然後放入到mibs文件夾中

在manager端敲入命令:

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

agent端輸出:

Received 96 bytes from UDP: [127.0.0.1]:44858
0000: 30 5E 02 01  01 04 06 70  75 62 6C 69  63 A7 51 02    0^.....public.Q.
0016: 04 7D BA 0E  AA 02 01 00  02 01 00 30  43 30 10 06    .}.........0C0..
0032: 08 2B 06 01  02 01 01 03  00 43 04 00  89 19 29 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

2008-11-11 10:22:27 localhost [UDP: [127.0.0.1]:44858]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8984873) 1 day, 0:57:28.73
SNMPv2-MIB::snmpTrapOID.0 = OID: NOTIFICATION-TEST-MIB::demo-notif       SNMPv2-MIB::sysLocation.0 = STRING: just here
sh: log_it: command not found

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

3, 自己編寫處理trap腳本

建立root/bin/traps文件,輸入以下內容:

#!/bin/sh
read host
read ip
vars=
while read oid val
do
    if [ "$vars" = "" ]
    then
        vars="$oid = $val"
    else
        vars="$vars, $oid = $val"
    fi
done
echo trap: $1 $host $ip $vars

在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

在agent端輸入命令:

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

manager端的反應:

NET-SNMP version 5.4.1.2

Received 63 bytes from UDP: [127.0.0.1]:44203
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 7F 00 00    .+.....e..^@....
0032: 01 02 01 02  02 01 00 43  04 00 8A 4F  90 30 10 30    .......C...O.0.0
0048: 0E 06 09 2B  06 01 02 01  02 02 01 01  02 01 01       ...+...........

2008-11-11 10:35:42 localhost [127.0.0.1] (via UDP: [127.0.0.1]:44203) TRAP, SNMP v1, community public
        TRAP-TEST-MIB::demotraps Link Down Trap (0) Uptime: 1 day, 1:10:43.36
        IF-MIB::ifIndex = INTEGER: 1
sh: /root/bin/traps: 權限不夠

如果出現”sh: /root/bin/traps: 權限不夠”, 是因爲剛剛創建的/root/bin/traps沒有執行的權限,通過 sudo chmod 755 /root/bin/traps 修改權限。

正常的結果爲:

Received 63 bytes from UDP: [127.0.0.1]:44769
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 7F 00 00    .+.....e..^@....
0032: 01 02 01 02  02 01 00 43  04 00 8A A0  B9 30 10 30    .......C.....0.0
0048: 0E 06 09 2B  06 01 02 01  02 02 01 01  02 01 01       ...+...........

2008-11-11 10:39:10 localhost [127.0.0.1] (via UDP: [127.0.0.1]:44769) TRAP, SNMP v1, community public
        TRAP-TEST-MIB::demotraps Link Down Trap (0) Uptime: 1 day, 1:14:11.13
        IF-MIB::ifIndex = INTEGER: 1
trap: down localhost UDP: [127.0.0.1]:44769 DISMAN-EVENT-MIB::sysUpTimeInstance = 1:1:14:11.13,
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkDown, IF-MIB::ifIndex = 1, SNMP-COMMUNITY-MIB::snmpTrapAddress.0 = 127.0.0.1,
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 = "public", SNMPv2-MIB::snmpTrapEnterprise.0 = TRAP-TEST-MIB::demotraps

4, 讓agent自動產生trap

配置agent的snmpd.conf,加入以下幾行:(參考:
http://www.net-snmp.org/wiki/index.php/FAQ:Agent_17):

# From: http://www.net-snmp.org/wiki/index.php/FAQ:Agent_17
# send v1 traps
trapsink   127.0.0.1:162
# also send v2 traps
trap2sink  127.0.0.1:162
informsink 127.0.0.1:162

五,下一步

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

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

搞清楚例子的意思

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章