net-snmp学习笔记- trap
来源:互联网 发布:nginx下载 linux 编辑:程序博客网 时间:2024/05/20 11:23
最近在学习net-snmp,创建trap的时候在网上网罗了一堆资料,这里整理了一下:
一、trap的用途
TRAP是提供从代理进程到管理站的异步报告机制。
为了使管理站能够及时而又有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(TRAP)制导的轮讯过程。代理进程负责在必要时 向管理站报告异常事件,得到异常事件的报告后,管理站可以查询有关的代理,以便得到更具体的信息,对事件的原因做进一步的分析。
二、trap的工作流程
配置snmp的trap需要做两方面的工作,一个是agent端,一个是manage端的,net-snmp提供了一个snmptrapd进程可以充当manage端。
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、manage端
A, 配置snmptrapd.conf文件,设置访问权限
B, 将mib导入到mibs文件夹中
C, 用perl等脚本语言编写处理trap的程序
D, 配置snmptrapd.conf文件,添加traphandler项,将不同的trap对应到不同的处理程序上
三、trap的详细配置过程
1、编写两个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
然后放入到/work/snmp/share/snmp/mibs文件夹中(我使用的snmp的安装路径是/work/snmp,如果是默认安装应该是usr/local/snmp/share/snmp/mibs这里根据个人安装的实际情况进行修改)。
2、manage端的具体配置
net-snmp有一个自带的snmptrapd进程可以充当manage端,需要对manage端进行一下配置。
A, 配置snmptrapd.conf文件,设置访问权限
默认情况下snmptrapd.conf文件是需要自己创建的,在路径/work/snmp/share/snmp(和上面一样,这里需要根据实际实况选择snmp的安装路径)下创建snmptrapd.conf文件。
加入以下一行:
authcommunity execute,log,net public
设置所有用户的访问权限:可执行,记录,传递
这条指令指明以“public”为“community”请求的snmp “notification”允许的操作。各变量意义如下:。
log权限表明收到 Trap 之后 snmptrapd 可以记录日志;
execute表明收到 Trap 之后可以执行 traphandle 中所指定的操作。
net表示 snmptrapd 可以将接收到的 Trap 信息转发到其他的 Receiver 去。(假如需要转发,还需要对给定的 OID 指定以 forward 为开始的处理细节:forward OID|default DESTINATION)
C, 用perl等脚本语言编写处理trap的程序
自定义一个trap的处理程序。
建立/bin/traps文件,输入以下内容:
#!/bin/shread hostread ipvars=while read oid valdo if [ "$vars" = "" ] then vars="$oid = $val" else vars="$vars, $oid = $val" fidoneecho trap: $1 $host $ip $vars
D, 配置snmptrapd.conf文件,添加traphandler项,将不同的trap对应到不同的处理程序上
在manager的snmptrapd.conf加入以下几行:
traphandle SNMPv2-MIB::coldStart /root/bin/traps coldtraphandle SNMPv2-MIB::warmStart /root/bin/traps warmtraphandle IF-MIB::linkDown /root/bin/traps downtraphandle IF-MIB::linkUp /root/bin/traps uptraphandle SNMPv2-MIB::authenticationFailure /root/bin/traps auth
第一个参数为从snmptrapd接收的OID,第二个参数为调用的程序。
重启snmptrapd:snmptrapd –d –f –Lo
各参数意义如下:-f: Do not fork() from the calling shell.
-L[efos]: Specify where logging output should be directed (standard error or output, to a file or via syslog).
更详细配置请参考net-snmp用户手册。
PS: 如果snmptrapd启动不起来是因为在安装net-snmp的时候有些模块没有安装上,可以通过:
./configure --with-mib-modules="examples/notification"makesudo make install
来进行安装trap相关的模块。
3、agent端的具体配置
A, 按照步骤三的1,将自定义的mib文件导入到mibs文件夹当中
B,发送各种trap命令(manager地址后面一定要加端口号162)
net-snmp的snmpd进程当中有snmptrap命令可以用来发送trap命令。
首先使用net-snmp自带的mib文件:
在agent端输入:
snmptrap -v 2c -c public 127.0.0.1:162 "" UCD-SNMP-MIB::ucdStart
Manager端反应:
NET-SNMP version 5.4.1.2Received 73 bytes from UDP: [127.0.0.1]:412440000: 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.....00048: 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.51SNMPv2-MIB::snmpTrapOID.0 = OID: UCD-SNMP-MIB::ucdStartsh: page_me: command not found
说明收到trap ucdstart并且调用对应的脚本程序,这里由于系统没有page_me这个命令,所以返回命令找不到.
其次,处理自定义的trap:
在agent端敲入命令:
snmptrap -v 2c -c public 127.0.0.1:162 "" NOTIFICATION-TEST-MIB::demo-notif SNMPv2-MIB::sysLocation.0 s "just here"
manager端输出:
Received 96 bytes from UDP: [127.0.0.1]:448580000: 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....)00048: 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 here2008-11-11 10:22:27 localhost [UDP: [127.0.0.1]:44858]:DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8984873) 1 day, 0:57:28.73SNMPv2-MIB::snmpTrapOID.0 = OID: NOTIFICATION-TEST-MIB::demo-notif SNMPv2-MIB::sysLocation.0 = STRING: just heresh: log_it: command not found
其中just here就是我们想要的结果.
在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.2Received 63 bytes from UDP: [127.0.0.1]:442030000: 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.00048: 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: 1sh: /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]:447690000: 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.00048: 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: 1trap: 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
C, 自动触发:配置snmpd.conf设置触发trap,系统发生某类错误时会自动触发相应类型的trap,发送给manager
让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 trapstrapsink 127.0.0.1:162# also send v2 trapstrap2sink 127.0.0.1:162informsink 127.0.0.1:162其中的127.0.0.1要改成接受trap信息的manage端的IP地址
D, 程序方式:一部份trap需要写c语言程序,用相应的api(send_easy_trap 或 send_v2trap)发送
仔细研究snmpd.conf和snmptrapd.conf,调试出系统自动触发trap
学习mib结构,搞清楚如何写自定义trap的mib
搞清楚例子的意思
研究一下在程序中发送trap的c语言api
ps:要记得执行export MIBS=all
- net-snmp学习笔记- trap
- NET-SNMP发Trap
- net-snmp trap实现小结
- snmp学习笔记——配置使用trap
- snmp学习笔记——配置使用trap
- snmp学习笔记之一——配置使用trap
- snmp学习笔记——配置使用trap
- snmp学习笔记——配置使用trap
- snmp学习笔记之一——配置使用trap
- snmp学习笔记——配置使用trap(一)
- [net-snmp] Net-SNMP学习笔记
- SNMP-Trap之学习路线
- 从Agent产生trap(net-snmp)
- 利用SNMP#NET 做trap接收器
- SNMP Trap
- SNMP trap
- SNMP trap
- SNMP Trap
- 插入排序算法原理与实现
- git base
- 汇编语言中的CPSR 和 SPSR
- c#窗口位置相关的细节
- 学习第二天
- net-snmp学习笔记- trap
- poj2070 Filling Out the Team
- iOS系统Crash文件分析方法
- 如何硬盘安装window 7系统
- centos 设置yum为网易的镜像
- win32应用程序中进程间通信方法分析与比较
- MFC加载位图和图标
- 黑马程序员——继承
- C#模拟web服务器