SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。
一、查看是否安装snmp
我的测试环境里已经安装过了snmp,这里我先卸载再安装
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]
# rpm -qa|grep -i net-snmp
net-snmp-5.5-49.el6.x86_64
net-snmp-libs-5.5-49.el6.x86_64
[root@localhost ~]
# rpm -qa|grep -i net-snmp|xargs rpm -e --nodeps
[root@localhost ~]
# rpm -qa|grep -i net-snmp
[root@localhost Packages]
# rpm -qa|grep -i sensors
lm_sensors-libs-3.1.1-17.el6.x86_64
[root@localhost Packages]
# rpm -qa|grep -i sensors|xargs rpm -e --nodeps
[root@localhost Packages]
# rpm -qa|grep -i sensors
[root@localhost Packages]
#
|
二、安装snmp
直接挂载系统安装盘,里面就有rpm安装包,
安装snmp服务需要的rpm包:
lm_sensors-libs-3.1.1-17.el6.x86_64.rpm
lm_sensors-3.1.1-17.el6.x86_64.rpm
以下这三个包有一定的版本要求,必须版本一致,否则安装无法成功。安装也有一定顺序,在安装的时候,会有提示。
net-snmp-libs-5.5-49.el6.x86_64.rpm
net-snmp-5.5-49.el6.x86_64.rpm 必须先安装net-snmp-libs
net-snmp-utils-5.5-49.el6.x86_64.rpm 不是必须安装的包,但安装它会带来不少帮助,它提供了很多工具,例如可以使用snmptranslate命令查看oid,可以使用snmpget、snmpwalk命令等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@localhost src]
# mount /dev/cdrom /mnt/
[root@localhost src]
# cd /mnt/Packages/
[root@localhost Packages]
# uname -i
x86_64
[root@localhost Packages]
# rpm -ivh lm_sensors-libs-3.1.1-17.el6.x86_64.rpm
warning: lm_sensors-libs-3.1.1-17.el6.x86_64.rpm: Header V3 RSA
/SHA1
Signature, key ID c105b9de: NOKEY
Preparing...
########################################### [100%]
1:lm_sensors-libs
########################################### [100%]
[root@localhost Packages]
# rpm -ivh lm_sensors-3.1.1-17.el6.x86_64.rpm
warning: lm_sensors-3.1.1-17.el6.x86_64.rpm: Header V3 RSA
/SHA1
Signature, key ID c105b9de: NOKEY
Preparing...
########################################### [100%]
1:lm_sensors
########################################### [100%]
[root@localhost Packages]
# rpm -ivh net-snmp-libs-5.5-49.el6.x86_64.rpm
warning: net-snmp-libs-5.5-49.el6.x86_64.rpm: Header V3 RSA
/SHA1
Signature, key ID c105b9de: NOKEY
Preparing...
########################################### [100%]
1:net-snmp-libs
########################################### [100%]
[root@localhost Packages]
# rpm -ivh net-snmp-5.5-49.el6.x86_64.rpm
warning: net-snmp-5.5-49.el6.x86_64.rpm: Header V3 RSA
/SHA1
Signature, key ID c105b9de: NOKEY
Preparing...
########################################### [100%]
1:net-snmp
########################################### [100%]
[root@localhost Packages]
# rpm -ivh net-snmp-utils-5.5-49.el6.x86_64.rpm
warning: net-snmp-utils-5.5-49.el6.x86_64.rpm: Header V3 RSA
/SHA1
Signature, key ID c105b9de: NOKEY
Preparing...
########################################### [100%]
1:net-snmp-utils
########################################### [100%]
[root@localhost Packages]
#
|
或者yum装
1
2
|
[root@localhost Packages]
# yum -y install net-snmp-libs net-snmp net-snmp-utils ^C
[root@localhost Packages]
# yum -y install net-snmp*
|
验证snmp服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@localhost Packages]
# chkconfig snmpd on
[root@localhost Packages]
# rpm -qc net-snmp
/etc/snmp/snmpd
.conf
/etc/snmp/snmptrapd
.conf
/etc/sysconfig/snmpd
/etc/sysconfig/snmptrapd
[root@localhost Packages]
# rpm -qf /etc/snmp/snmpd.conf
net-snmp-5.5-49.el6.x86_64
[root@localhost Packages]
# snmpwalk -v 2c -c public 127.0.0.1 sysName.0 #获取到本机主机名
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
[root@localhost Packages]
# snmptranslate -To|head #查oid
.1.3
.1.3.6
.1.3.6.1
.1.3.6.1.1
.1.3.6.1.2
.1.3.6.1.2.1
.1.3.6.1.2.1.1
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
.1.3.6.1.2.1.1.3
[root@localhost Packages]
#
|
启动时发生错误:
snmpd: error while loading shared libraries: libnetsnmpagent.so.25:
cannot open shared object file: No such file or directory
解决办法:#export LD_LIBRARY_PATH=/usr/local/lib
但这样只能使用一次,最好是:vi /etc/profile 在最后一行加入:export
LD_LIBRARY_PATH=/usr/local/lib
三、配置snmp
安装完成后,使用的是snmp的默认配置,通过这些默认配置,我们只能获取主机的部分信息。但一些其他的重要信息,无法获取。如主机的CPU使用情况,内存使用情况等。
1、
1
2
3
|
[root@localhost Packages]
# vim /etc/snmp/snmpd.conf
# sec.name source community
com2sec notConfigUser default public
|
首先定义一个共同体名称(community),这里是 public ,及可以访问这个 public 的用户名(sec name),这里是 notConfigUser 。public 相当于用户 notConfigUser 的密码。
2、
1
2
3
4
|
[root@localhost Packages]
# vim /etc/snmp/snmpd.conf
# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
|
定义一个组名(groupName)这里是 notConfigGroup,及组的安全级别(v1/v2c),把notConfigUser 这个用户加到这个组中。
3、修改查看设备节点的权限
1
2
3
|
[root@localhost Packages]
# snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.4.1.2021.11.11.0
UCD-SNMP-MIB::ssCpuIdle.0 = No
more
variables left
in
this MIB View (It is past the end of the MIB tree)
[root@localhost Packages]
#
|
无法获取CPU的空闲率(注:1.3.6.1.4.1.2021.11.11.0是主机CPU空闲率的oid),
view:定义了可以查看哪些节点设备的信息。snmp默认配置只能查看.1.3.6.1.2.1.1和.1.3.6.1.2.1.25.1.1节点下的设备信息,而主机CPU和内存等设备都不在这些节点下,所以无法获取这些数据。
1
2
3
4
5
6
|
[root@localhost Packages]
# vim /etc/snmp/snmpd.conf
# Make at least snmpwalk -v 1 localhost -c public system fast again.
# name incl/excl subtree mask(optional)
view all included .1
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
|
在此处添加了一行:
view all included .1
表示可以查看.1节点下的所有设备信息。
1
2
3
|
[root@localhost Packages]
# snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.4.1.2021.11.11.0
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 99
[root@localhost Packages]
#
|
4
1
2
3
4
|
[root@localhost Packages]
# vim /etc/snmp/snmpd.conf
# group context sec.model sec.level prefix read write notif
access notConfigGroup
""
any noauth exact all none none
[root@localhost Packages]
# /etc/init.d/snmpd restart
|
定义组notConfigGroup在all这个视图范围内可做的操作,这时定义了 notConfigGroup组的成员可对 .1 这个视图做只读操作。这里的名称all要和view中的名称all保持一致.这样对 snmpd.conf 文件就基本完成了.
1
2
3
4
5
6
|
[root@localhost Packages]
# snmpwalk -v 2c 127.0.0.1 -c public system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 2.6.32-431.el6.x86_64
#1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (212) 0:00:02.12
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure
/etc/snmp/snmp
.
local
.conf)
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
|
上述信息说明 SNMP 已经正常工作了
四、防火墙开启UDP 161端口
1
2
3
4
|
[root@localhost ~]
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p tcp --dport 161 -j ACCEPT
[root@localhost ~]
# /etc/init.d/iptables restart
|
SNMP安装、简单配置完成,至此,可以通过SNMP获取本地的相关信息.
现在很多监控系统都是根据SNMP进行的,而SNMP监控的性能指标很多都是通过snmpwalk采集设备的OID信息。snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等。snmpwalk没有单独的安装包,它被包含在net-snmp-utils软件包中。
一、snmpwalk安装
1
2
|
[root@localhost ~]
# yum -y install net-snmp-utils
[root@localhost ~]
# snmpwalk -h
|
snmpwalk的参数比较多,但是我们比较常用的就只有-v和-c参数:
–h:显示帮助。
–v:指定snmp的版本, 1或者2c或者3。
–c:指定连接设备SNMP密码。
–V:显示当前snmpwalk命令行版本。
–r:指定重试次数,默认为0次。
–t:指定每次请求的等待超时时间,单为秒,默认为3秒。
–l:指定安全级别:noAuthNoPriv|authNoPriv|authPriv。
–a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
–A:验证字符串。只有-l指定为authNoPriv或authPriv时才需要。
–x:加密协议:DES。只有-l指定为authPriv时才需要。
–X:加密字符串。只有-l指定为authPriv时才需要。
二、snmpwalk的使用
snmpwalk使用方法很简单:
snmpwalk -v 1或2c或3(代表SNMP版本) -c SNMP密码 IP地址 OID(对象标示符)
–v:指定snmp的版本, 1或2c或3,该参数必须有。
–c:指定连接设备SNMP读密码,该参数必须有。
IP:指定要walk的设备的IP地址,该参数必须有。
OID:代表要获取设备的指标oid,该参数不是必须的。
例如:获取10.15.44.162进程数量、系统总内存
这里使用了iReasoning MIB Browser这个MIB浏览软件以配合实验。
一些snmp常用的一些OID,比如cpu、内存、硬盘什么的。先了解这些,在使用snmp监控服务器。
系统参数(1.3.6.1.2.1.1) | |||
OID | 描述 | 备注 | 请求方式 |
.1.3.6.1.2.1.1.1.0 | 获取系统基本信息 | SysDesc | GET |
.1.3.6.1.2.1.1.3.0 | 监控时间 | sysUptime | GET |
.1.3.6.1.2.1.1.4.0 | 系统联系人 | sysContact | GET |
.1.3.6.1.2.1.1.5.0 | 获取机器名 | SysName | GET |
.1.3.6.1.2.1.1.6.0 | 机器坐在位置 | SysLocation | GET |
.1.3.6.1.2.1.1.7.0 | 机器提供的服务 | SysService | GET |
.1.3.6.1.2.1.25.4.2.1.2 | 系统运行的进程列表 | hrSWRunName | WALK |
.1.3.6.1.2.1.25.6.3.1.2 | 系统安装的软件列表 | hrSWInstalledName | WALK |
网络接口(1.3.6.1.2.1.2) | |||
OID | 描述 | 备注 | 请求方式 |
.1.3.6.1.2.1.2.1.0 | 网络接口的数目 | IfNumber | GET |
.1.3.6.1.2.1.2.2.1.2 | 网络接口信息描述 | IfDescr | WALK |
.1.3.6.1.2.1.2.2.1.3 | 网络接口类型 | IfType | WALK |
.1.3.6.1.2.1.2.2.1.4 | 接口发送和接收的最大IP数据报[BYTE] | IfMTU | WALK |
.1.3.6.1.2.1.2.2.1.5 | 接口当前带宽[bps] | IfSpeed | WALK |
.1.3.6.1.2.1.2.2.1.6 | 接口的物理地址 | IfPhysAddress | WALK |
.1.3.6.1.2.1.2.2.1.8 | 接口当前操作状态[up|down] | IfOperStatus | WALK |
.1.3.6.1.2.1.2.2.1.10 | 接口收到的字节数 | IfInOctet | WALK |
.1.3.6.1.2.1.2.2.1.16 | 接口发送的字节数 | IfOutOctet | WALK |
.1.3.6.1.2.1.2.2.1.11 | 接口收到的数据包个数 | IfInUcastPkts | WALK |
.1.3.6.1.2.1.2.2.1.17 | 接口发送的数据包个数 | IfOutUcastPkts | WALK |
CPU及负载 | |||
OID | 描述 | 备注 | 请求方式 |
. 1.3.6.1.4.1.2021.11.9.0 | 用户CPU百分比 | ssCpuUser | GET |
. 1.3.6.1.4.1.2021.11.10.0 | 系统CPU百分比 | ssCpuSystem | GET |
. 1.3.6.1.4.1.2021.11.11.0 | 空闲CPU百分比 | ssCpuIdle | GET |
. 1.3.6.1.4.1.2021.11.50.0 | 原始用户CPU使用时间 | ssCpuRawUser | GET |
.1.3.6.1.4.1.2021.11.51.0 | 原始nice占用时间 | ssCpuRawNice | GET |
. 1.3.6.1.4.1.2021.11.52.0 | 原始系统CPU使用时间 | ssCpuRawSystem. | GET |
. 1.3.6.1.4.1.2021.11.53.0 | 原始CPU空闲时间 | ssCpuRawIdle | GET |
. 1.3.6.1.2.1.25.3.3.1.2 | CPU的当前负载,N个核就有N个负载 | hrProcessorLoad | WALK |
内存及磁盘(1.3.6.1.2.1.25) | |||
OID | 描述 | 描述 | 请求方式 |
.1.3.6.1.2.1.25.2.2.0 | 获取内存大小 | hrMemorySize | GET |
.1.3.6.1.2.1.25.2.3.1.1 | .1.3.6.1.2.1.25.2.3.1.1 | hrStorageIndex | WALK |
.1.3.6.1.2.1.25.2.3.1.2 | .1.3.6.1.2.1.25.2.3.1.2 | hrStorageType[OID] | WALK |
.1.3.6.1.2.1.25.2.3.1.3 | 存储设备描述 | hrStorageDescr | WALK |
.1.3.6.1.2.1.25.2.3.1.4 | 簇的大小 | hrStorageAllocationUnits | WALK |
.1.3.6.1.2.1.25.2.3.1.5 | 簇的的数目 | hrStorageSize | WALK |
.1.3.6.1.2.1.25.2.3.1.6 | 使用多少,跟总容量相除就是占用率 | hrStorageUsed | WALK |
.1.3.6.1.4.1.2021.4.3.0 | Total Swap Size(虚拟内存) | memTotalSwap | GET |
端口: .1.3.6.1.2.1.6.13.1.3
.1.3.6.1.2.1.6.13.1.3.x.y 可以查出某个主机的某个端口的连接数(x为主机ip,y为端口号)
snmpwalk -v2c -c public 10.15.44.239 .1.3.6.1.2.1.6.13.1.3.10.15.44.239.80
用wc -l进行统计即可得出某个端口的连接数
snmpwalk -v2c -c public 10.15.44.239 .1.3.6.1.2.1.6.13.1.3.10.15.44.239.80|wc -l
进程: .1.3.6.1.2.1.25.4.2.1.2
目录: .1.3.6.1.2.1.25.4.2.1.4
挂载点: .1.3.6.1.2.1.25.3.8.1.3
本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1790343,如需转载请自行联系原作者