配置 SNMP 可以参考以下步骤:
1. 首先定义一个共同体名称(community),这里是 public ,及可以访问这个 public 的用户名(sec name),这里是 notConfigUser 。public 相当于用户 notConfigUser 的密码。
# sec.name source community com2sec notConfigUser default public
2. 定义一个组名(groupName)这里是 notConfigGroup,及组的安全级别,把 notConfigGroup 这个用户加到这个组中。
# groupName securityModel securityName group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser
3. 定义一个可操作的视图(view)名, 这里是 all,范围是 .1。
# name incl/excl subtree mask(optional) view all included .1
4. 定义 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 配置的正确性。在监控主机中执行以下命令:
[root@chenyi Packages]# snmpwalk -v 1 192.168.1.220 -c public system Timeout: No Response from 192.168.1.220 [root@chenyi Packages]# 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 <root@localhost> (configure /etc/snmp/snmp.local.conf) SNMPv2-MIB::sysName.0 = STRING: chenyi .....................
上述信息说明 SNMP 已经正常工作了。
################################################################################################
其实配制一个 snmpd.conf 文件不算太难,
1,首选是定义一个共同体名 (community) ,这里是 public ,及可以访问这个 public 的用户名( sec name ),这里是 notConfigUser 。 Public 相当于用户 notConfigUser 的密码:)
#sec.name source community
com2sec notConfigUser default public
2,定义一个组名( groupName )这里是 notConfigGroup ,及组的安全级别,把 notConfigGroup 这个用户加到这个组中。
groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
3,定义一个可操作的范围 (view) 名, 这里是 all ,范围是 .1
# name incl/excl subtree mask(optional)
view all included .1
4,定义 notConfigUser 这个组在 all 这个 view 范围内可做的操作,这时定义了 notConfigUser 组的成员可对.1 这个范围做只读操作。
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact all none none
ok, 这样我们的 snmpd.conf 文件就基本配成了,用 service snmpd restart 重启 snmpd 服务。
################################################################################################
现在我们在目标主机上来写一些脚本来获取 Memory、CPU、DiskIO 等状态。
Memory 脚本:
#!/bin/sh /usr/bin/free -m | grep Mem |awk '{print $4}' /usr/bin/free -m | grep Mem |awk '{print $2}'
[root@chenyi ~]# sh memory.sh 809 1006
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
[root@chenyi ~]# service snmpd restart 停止 snmpd: [确定] 正在启动 snmpd: [确定]
这样在监控主机上运行:
[root@chenyi ~]# 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 输出的第二个数据。
略作修改:(此处参照其他文章)
[root@chenyi ~]# snmpwalk -v 1 192.168.1.220 -c public .1.3.6.1.4.1.2021.53 | grep 53.101 | awk -F\" '{print $2}' 443 1006
我们已经通过 snmpd 从监控主机上得到了目标主机上内存使用状态的两个参数,其它脚本也是一样的。