snmpd安装配置

介绍

当下的 SNMP 服务器通常用来被诸如 Nagios、Cacti、Zabbix 等监控软件收集数据,SNMP 的很多高级特性用的不是特别频繁。因而只需对 SNMP 进行一些简单、基础的配置以满足各种监控软件的需求。

安装

没有什么特别的选项直接yum安装即可

yum install -y net-snmp net-snmp-utils

配置文件

通常 SNMP 服务的配置文件位于/etc/snmp/snmpd.conf

com2sec notConfigUser  default      public
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
#view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1
access  notConfigGroup ""      any       noauth    exact  systemview none none
syslocation hangzhou
syscontact module@hangzhou.com
dontLogTCPWrappersConnects yes

有以上这些配置其实已经能够基本满足大多数需求了,还算是比较简单的,配置 SNMP 可以参考以下步骤:

首先定义一个共同体名称(community),这里是 public ,及可以访问这个 public 的用户名(sec name),这里是 notConfigUser 。public 相当于用户 notConfigUser 的密码。

# sec.name                source      community
  com2sec notConfigUser  default       public

定义一个组名(groupName)这里是 notConfigGroup,及组的安全级别,把 notConfigGroup 这个用户加到这个组中。

#  groupName         securityModel    securityName
group   notConfigGroup   v1           notConfigUser  
group   notConfigGroup   v2c          notConfigUser

定义一个可操作的视图(view)名, 这里是 all,范围是 .1。

# name           incl/excl     subtree         mask(optional)
  view  all      included        .1

定义 notConfigUser 这个组在 all 这个视图范围内可做的操作,这时定义了 notConfigUser 组的成员可对 .1 这个视图做只读操作。

# group        context sec.model sec.level prefix read   write  notif
 access  notConfigGroup ""      any       noauth    exact  all  none none

这样对 snmpd.conf 文件就基本完成了,用service snmpd restart重启 snmpd 服务。

测试

之后,我们需要一个测试,验证 SNMP 配置的正确性。在监控主机中执行以下命令:

snmpwalk -v 1 192.168.1.220 -c public system

Timeout: No Response from 192.168.1.220

snmpwalk -v 1 192.168.1.220 -c public system

SNMPv2-MIB::sysDescr.0 = STRING: Linux chenyi 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (797) 0:00:07.97
SNMPv2-MIB::sysContact.0 = STRING: Root  (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: chenyi
.....................

上述信息说明 SNMP 已经正常工作了。

实例

现在我们在目标主机上来写一些脚本来获取 Memory、CPU、DiskIO 等状态。

Memory

#!/bin/sh
/usr/bin/free -m | grep Mem |awk '{print $4}'
/usr/bin/free -m | grep Mem |awk '{print $2}'

CPU

#!/bin/sh
idle=`sar  -u 1 3 | grep Average | awk '{print $6}'`
used=`echo "101 - $idle" | bc -l -s`
echo $used
echo $idle

Disk I/O

#!/bin/sh
used1=`sar -d 1 3 | tail -1 | awk '{print $4}'`
used2=`echo "$used1 / 2" | bc -l`
echo $used2
echo $used2

现在我们已经能得到这数据了,怎么才能让监控主机通过 snmpd 得到这些数据呢?可以在目标主机的/etc/snmp/snmpd.conf文件中加入这些配置:

exec .1.3.6.1.4.1.2021.53 memory /bin/sh /root/memory.sh
exec .1.3.6.1.4.1.2021.54 cpu /bin/sh /root/cpu.sh
exec .1.3.6.1.4.1.2021.55 disk /bin/sh /root/disk.sh

重启 service snmpd restart

这样在监控主机上运行:

snmpwalk -v 1 192.168.1.220 -c public .1.3.6.1.4.1.2021.53
UCD-SNMP-MIB::ucdavis.53.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.53.2.1 = STRING: "memory"
UCD-SNMP-MIB::ucdavis.53.3.1 = STRING: "/bin/sh /root/memory.sh"
UCD-SNMP-MIB::ucdavis.53.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: "442"
UCD-SNMP-MIB::ucdavis.53.101.2 = STRING: "1006"
UCD-SNMP-MIB::ucdavis.53.102.1 = INTEGER: 0

其中UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: "442"中的 442 就是 mem.sh 输出的第一个数据,1006 是 mem.sh 输出的第二个数据。

我们已经通过 snmpd 从监控主机上得到了目标主机上内存使用状态的两个参数,其它脚本也是一样的。