Snmp实践与总结

时间:2022-01-06 05:30:29

Snmp实践与总结

一、Snmp简介

   什么是SNMP

SNMP:“简单网络管理协议”,用于网络管理的协议。SNMP用于网络设备的管理。SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了“读”操作;管理员需要向设备执行设置操作,所以SNMP提供了“写”操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了“Trap”操作。

 Snmp实践与总结Snmp实践与总结

 

如上图,snmp分为Agent端和Manger端。Agent端用于对设备、磁盘、进程等相关信息进行监控,当有异常信息时,上报snmp报文。

 Snmp实践与总结

 Snmp实践与总结

 

Snmp Manger端负责对snmp报文的接收和进行相应的处理。

 

相应的数字表示(对象标识符OID,唯一标识一个MIB对象)为:

1.3.6.1.2.1.4.3

Snmp实践与总结

                  图2 MIB树结构

 

当网络管理协议在报文中使用MIB变量时,每个变量名后还要加一个后缀,以作为该变量的一个实例每个对象都能够通过如上结构的数字构成的OID进行唯一标识。

 

二、snmp的安装

 

   1)以网络下载的方式安装

 

     本地验证使用的是Ubuntu环境,直接使用aapt-get install snmpd安装即可。

 Snmp实践与总结

 Snmp实践与总结

Snmp实践与总结

Snmp实践与总结


 2) 以源码包编译的方式安装

 

   首先在http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.1/   网址下载最新的snmp源码包

   

  放到指定目录后,tar -xvf net-snmp-5.7.1.tar.gz 进行解压

 

   Snmp实践与总结Snmp实践与总结

 

 然后cd net-tar -xvfnet-snmp-5.7.1目录。

 

 执行 ./configure 然后,选型都使用默认值即可

 Snmp实践与总结Snmp实践与总结

 

然后执行 make 命令。最后执行make install命令。

 

安装的时候执行make命令的时候可能会报错。因为用的linux系统里不一定装了libperl-dev 

在没有安装libperl-dev 的情况下,make会报错如下:

  make[1]: *** [libnetsnmpagent.la] Error 1

解决办法:

  手动安装libperl-dev

  我本地用的是ubuntu,如下为ubuntu的安装办法。如果你使用的不是ubuntu,是suse或者别的操作系统,可以考虑使用yum或者下载rpm包后用rpm -ivh的方式安装。

 

1.安裝Perl

apt-get install perl libperl-dev

 

2. 修改 /etc/ld.so.conf,增加下列內容

/lib

/usr/lib

/usr/local/lib

 

3.重新读取  library database

ldconfig

4.安裝Net-SNMP

make

make install

 

结果如下:

  make的结果:

  Snmp实践与总结Snmp实践与总结

 

 安装后结果

  Snmp实践与总结Snmp实践与总结

 

三、snmpd的配置

 

   SnmpAgent端主要通过配置snmpd.conf文件进行监控和管理。

 

  

###############################################################################

#

#  ACCESS CONTROL

#

 

                                                 #  system + hrSystem groups only

view   systemonly  included   .1.3.6.1.2.1.1

view   systemonly  included   .1.3.6.1.2.1.25.1

 

如上内容,为snmpd.conf样例中默认有的内容。View可用于配置snmp可被snmpwalk查看和浏览的OID范围。

 

#

#  Process Monitoring

#

                               # At least one  'mountd' process

proc  mountd

                               # No more than 4 'ntalkd' processes - 0 is OK

proc  ntalkd    4

                               # At least one 'sendmail' process, but no more than 10

proc  sendmail 10 1

 

如上 proc 用于监控snmpd服务部署的环境的系统进程运行情况。

 

proc ProcessName MAX MIN

 

如上为prco的设置格式。proc后面跟的是 进程的名字。MAXMIN分别代表该进程名对应的进程实例在系统中可运行的最大数量和最小数量[MIN,MAX],当不在该范围时,就会产生对应snmp报文信息。

MAXMIN都不设置时,默认表示1到无穷大,只要有一个对应进程名的实例在运行即可。

 

Proc 对应的 OID.1.3.6.1.4.1.2021.2.1 

 

Walk proc监控信息可以使用UCD-SNMP-MIB::prTable

 

如下:

   可以walk的前提是snmpd.conf文件里配置了view的权限,否则就会看不到内容

 

root@ubuntu:/usr/software/net-snmp-5.7.1# snmpwalk -v 2c -c public 127.0.0.1 UCD-SNMP-MIB::prTable

UCD-SNMP-MIB::prTable = No more variables left in this MIB View (It is past the end of the MIB tree)

 

如上,当没有配置对应OID权限的时候就会看不到具体内容。

 

增加OID范围:

 Snmp实践与总结Snmp实践与总结

   

Snmp实践与总结

 Snmp实践与总结


对于proc监控,可以在有进程异常时,使用procfix进行修复,将进程拉起。

 

#

#  Disk Monitoring

#

                               # 10MBs required on root disk, 5% free on /var, 10% free on all other disks

disk       /     10000

disk       /var  5%

includeAllDisks  10%

 

#  Walk the UCD-SNMP-MIB::dskTable to see the resulting output

#  Note that this table will be empty if there are no "disk" entries in the snmpd.conf file

 

 

如上为设置disk的监控内容。disk后面跟具体的目录,最后面设置磁盘路径的大小或者磁盘的空闲度。当对应磁盘路劲不满足时就会报snmp报文信息。

 

Diskwalkproc类似。

 

 

 

#trap2sink    localhost public

                                    #   send SNMPv2c INFORMs

#informsink   localhost public

 

 

Trap2sink 用于将报文信息发送到指定地址,并指定发送的用户。在发送时可以在目的地址上加上端口号

 

 例如:trap2sink  127.0.0.1:171  public

 

 

 

 

指令简介:
·#号后为内容注释。
·trapsink: 指明信息发送的snmptrapd地址,1版本。
·trap2sink:指明信息发送的snmptrapd地址,2c版本。
·authtrapenable:决定是否发送身份验证失败信息。1为发送,2为不发送。
·rwuser:建立读写权限用户。
·iquerySecName:指定内部查询用户名。
·linkUpDownNotifications:在建立断开链接的时候发送通知。
·defaultMonitors:打开默认监视项。其中包括进程,磁盘等的监视,必须打开此项,否则进程,磁盘等的监视信息不会被发出。
·proc:监视指定进程,当进程数不在指定的范围时将特定标志位置1,但是不会发出trap信号,需要打开defaultMonitors,由其发送trap信号。
·disk:监视磁盘剩余空间,当剩余空间小于指定值时将特定标志位置1,同proc。
·load:系统负载,指定1,5,15分钟的系统负载,超过阈值后处理方法同proc。
·notificationEvent:自定义通知事件。
·monitor:监视指定事件。

 

 

 

  

四、Snmptrapd的配置

 

   Snmpd相当于snmpAgent端。Snmptrapd相当于snmpManager端。Snmptrapd可以配置接收snmp报文。并对报文进行过滤和进行相应的处理。

 

   一般在snmptrapd.conf文件中首先配置

 

   authCommunity log,execute,net public

 

这条指令指明以“public”为“community”请求的snmp “notification”允许的操作。

设置所有用户的访问权限:可执行,记录,传递

 

 

然后设置 traphandle,用于在snmptrapd接收到指定OID的报文信息时,做相应的处理操作。

traphandle .1.3.6.1.4.1.2021.251.1  my_command

 

如上,当收到.1.3.6.1.4.1.2021.251.1 对应的报文信息时,snmptrapd会调用my_command

命令。

 

traphandle .1.3.6.1.4.1.2021.251.1 /root/traptest/test.pl

 

或者如上,当收到.1.3.6.1.4.1.2021.251.1 对应的报文信息时,snmptrapd会调用/root/traptest/test.pl脚本。

 

traphandle .1.3.6.1.4.1.2021.251.1 /root/traptest/test.pl  test_param

 

 如上,当收到.1.3.6.1.4.1.2021.251.1 对应的报文信息时,snmptrapd会调用/root/traptest/test.pl脚本,并给脚本传递参数 test_param 。

 

Forward 选项

forward default/OID destination

 

如上,forward选项可以用于转发指定OID报文或者全部报文信息到指定的目的地址,目的地址上可以跟具体的端口号。默认162端口。

traphandle  后面也可以跟default,表示默认所有OID。

 

 

snmpTrapAddr 选项

 

   snmpTrapAddr udp:127.0.0.1:171  

 

   如上格式,snmpTrapAddr能够指定snmptrapd 接收报文的端口。默认使用端口是162. 当162 端口被占用时,启动snmptrapd 会报错失败。在不能使用默认端口的时候,可以通过snmpTrapAddr指定其他端口用于接收报文。

 

   使用 lsof -i:162  命令可以查看162端口被哪个进程占用。

 Snmp实践与总结

 Snmp实践与总结

 如图:lsof –i:22 可以看到22号端口被ssh服务占用了。

 

五、Snmp 其他命令

 

· snmptrap可以模拟snmp agent发送一个trapsnmp管理端(一般称为网管,snmp managersnmp client);

· snmpinform可以模拟snmp agent发送一个inform requestsnmp管理端(Trap是发送给SNMP管理者的通知网络状况等的警告消息,而Inform是需要SNMP管理者确认接收的Trap。与Inform相比较,Trap通知方式为不可靠传输,因为snmp管理端在收到一条Trap通知后无需回复任何确认信息,所以snmp agent无法知道Trap通知是否已经被snmp管理端正确接收);

· snmptrapd一个模拟snmp管理端接收trap/inform通知的程序;

 


 

snmptrap

-v1

-c public

10.10.12.219

1.3.6.1.4.1.1

10.10.12.219

2

3

1000

命令

Snmp协议版本

共同体

Snmp管理端IP 

Enterprise-OID

Snmp代理IP

Trap类型

 Trap特征码

uptime

 

1.3.6.1.9.9.44.1.2.1

I

12

12 1.3.4.1.2.3.1

s

test_snmptrap

被发送参数的OID

数据类型

数据值

被发送参数的OID

数据类型

数据值

 

如上,snmptrap的可以模拟发送报文信息

snmptrap -v 2c -c public 127.0.0.1 "" .1.3.6.1.4.1.2021.251.1 sysLocation.0 s  "test_info" 

snmpwalkSNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。

snmpwalk语法:

snmpwalk 交换机或路由器IP地址 -c SNMP读密码 -v 1或2(代表SNMP版本) OID(对象标示符)

用法举例:

1、snmpwalk -c public -v 1 -m ALL 127.0.0.1 .1.3.6.1.2.1.25.1    得到取得windows端的系统进程用户数等

2、snmpwalk -c public -v 1 -m ALL 127.0.0.1 .1.3.6.1.2.1.25.2.2  取得系统总内存

3、snmpwalk -c public -v 1 -m ALL 127.0.0.1 hrSystemNumUsers

4、snmpwalk -c public -v 1 -m ALL 127.0.0.1 .1.3.6.1.2.1.4.20    取得IP信息

5、snmpwalk -v 2c -c public 127.0.0.1 system   查看系统信息

6、snmpwalk -v 1 127.0.0.1 -c public ifDescr

7、如果你也不知道具体参数,那么就执行snmpwalk -v 2c -c public 127.0.0.1,就可以看到所有信息。

 

六、Snmp 发送和接收验证

   配置snmpd.conf文件

   agentAddress  udp:127.0.0.1:161

                                                 #  system + hrSystem groups only

view   systemonly  included   .1.3.6.1.2.1.1

view   systemonly  included   .1.3.6.1.2.1.25.1

view   systemonly  included   .1.3.6.1.4.1

 

                                                 #  Full access from the local host

#rocommunity public  localhost

                                                 #  Default access to basic system info

 rocommunity public  default    -V systemonly

 

#rocommunity secret  10.0.0.0/16

 

                                                 #  Full read-only access for SNMPv3

 rouser   authOnlyUser

                                                 #  Full write access for encrypted requests

                                                 #     Remember to activate the 'createUser' lines above

sysLocation    Sitting on the Dock of the Bay

sysContact     Me <me@example.org>

                                                 # Application + End-to-End layers

sysServices    72

 

 

#

#  Process Monitoring

#

                               # At least one  'mountd' process

proc  mountd

                               # No more than 4 'ntalkd' processes - 0 is OK

proc  ntalkd    4

                               # At least one 'sendmail' process, but no more than 10

proc  sendmail 10 1

 

#  Walk the UCD-SNMP-MIB::prTable to see the resulting output

#  Note that this table will be empty if there are no "proc" entries in the snmpd.conf file

 

 

#

#  Disk Monitoring

#

                               # 10MBs required on root disk, 5% free on /var, 10% free on all other disks

disk       /     10000

disk       /var  5%

includeAllDisks  10%

 

 

load   12 10 5

 

#  Walk the UCD-SNMP-MIB::laTable to see the resulting output

#  Note that this table *will* be populated, even without a "load" entry in the snmpd.conf file

 

                                    #   send SNMPv1  traps

trapsink     localhost public

 

iquerySecName   internalUser       

rouser          internalUser

                                   # generate traps on UCD error conditions

defaultMonitors          yes

                                   # generate traps on linkUp/Down

linkUpDownNotifications  yes

 

                                           #  Run as an AgentX master agent

 master          agentx

 

 

如上,配置内容为安装snmp的时候就会自带的样例内容,增加view的范围,其他的内容不变。

 

直接输入snmpd就可以启动snmpd服务。

 Snmp实践与总结

 Snmp实践与总结

 

 

配置snmptrapd.conf文件

 

增加一行内容 authCommunity log,execute,net public 

 Snmp实践与总结

 

snmptrapd.conf文件放到一指定目录。我的本地是放到和snmp.conf同一目录. /usr/local/share/snmp目录

 

snmptrapd -C -c /usr/local/share/snmp/snmptrapd.conf -df -Lo 的方式启动snmptrapd服务。

 

(注: snmptrapd -C -c /usr/local/share/snmp/snmptrapd.conf -df -Lf /tmp/log.txt的方式可以把接收的snmp报文输出到指定文件中)

 Snmp实践与总结

 Snmp实践与总结

 

启动snmpd服务。

 Snmp实践与总结Snmp实践与总结


如上,当启动snmpd的时候,snmptrapd接收到proc进程异常的snmp报文信息。

(注:snmpd服务启动后,监测到有进程等异常信息后,只会主动报一次snmp报文,不会多次上报。因此为了演示,重新启动了一下snmpd

 

 

使用snmptrap模拟发送报文:

  snmptrap -v 2c -c public 127.0.0.1 "" .1.3.6.1.4.1.2021.251.1 sysLocation.0 s  "test_info"

 

  如上,在一个终端界面输入以上信息:

 Snmp实践与总结Snmp实践与总结

 

snmptrapd的启动终端查看:

 Snmp实践与总结Snmp实践与总结

 

如图所示,收到了刚才snmptrap模拟发送的报文信息。

 

 

如上,基本展示了snmp的发送与接收基本实现。

 

 

总结:

   以上都只是snmp的基础理论知识和安装使用说明,以及snmp Agent端监控发送报文信息,snmptrapd接收报文信息的最基本的模拟。

    Snmp还有很多高级用法,以及使用snmp可以监控的很多东西还没能在本文中详细研究和展示。