SNMP-配置文件详解

摘要:
当前的SNMP服务器通常用于通过Nagios、Cacti、Zabbix等监控软件收集数据。SNMP的许多高级功能并不经常使用。因此,只需要简单和基本的SNMP配置即可满足各种监控软件的要求。通常,SNMP服务的配置文件位于/etc/SNMP/snmpd.conf中。让我们先看看这个文件:###首先,将社区名称“public”映射到“securityname”#sec.namesourcecommunitycom2secnotConfigUserdefaultpublic#将社区名称定义为public,并将其映射到安全名称notConfigUser,com2sec相当于communitysecurityname####第二,将安全用户名映射到组名:#groupNamesecurityModelsecurityNamegroupnotConfigGroupv1notConfigUser#定义要映射到notConfigGroup组的安全用户名notConfigUser。之后,我们需要一个测试来验证SNMP配置的正确性。

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

通常 SNMP 服务的配置文件位于/etc/snmp/snmpd.conf,先来看一下这个文件:

    ####
    # First, map the community name “public” into a “security name”

    # sec.name source community
    com2sec notConfigUser default public #定义community名称为 public,映射到安全名 notConfigUser,com2sec 相当于 community to security name。community相当于密码。

    ####
    # Second, map the security name into a group name:

    # groupName securityModel securityName
    group notConfigGroup v1 notConfigUser #定义安全用户名notConfigUser映射到notConfigGroup组。
    group notConfigGroup v2c notConfigUser

    ####
    # Third, create a view for us to let the group have rights to: #定义一个view,来决定notConfigUser可以操作的范围。

    # make at least snmpwalk -v 1 localhost -c public system fast again. #定义可查看的snmp的范围。
    # name incl/excl subtree mask(optional)
    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
    ####
    # Finally, grant the group read-only access to the systemview view. #给notConfigGroup组所定义view名 all 以只读权限。

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

    # —————————————————————————–

    # Here is a commented out example configuration that allows less
    # restrictive access.

    # YOU SHOULD CHANGE THE “COMMUNITY” TOKEN BELOW TO A NEW KEYWORD ONLY
    # KNOWN AT YOUR SITE. YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO
    # SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.

    ## sec.name source community
    #com2sec local localhost COMMUNITY
    #com2sec mynetwork NETWORK/24 COMMUNITY

    ## group.name sec.model sec.name
    #group MyRWGroup any local
    #group MyROGroup any mynetwork
    #
    #group MyRWGroup any otherv3user
    #…

    ## incl/excl subtree mask
    #view all included .1 80

    ## -or just the mib2 tree-

    #view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
    #view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc

    ## context sec.model sec.level prefix read write notif
    #access MyROGroup “” any noauth 0 all none none
    #access MyRWGroup “” any noauth 0 all all all

有以上这些配置其实已经能够基本满足大多数需求了,还算是比较简单的,配置 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 已经正常工作了。

现在我们在目标主机上来写一些脚本来获取 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 从监控主机上得到了目标主机上内存使用状态的两个参数,其它脚本也是一样的。

来个配置:

#定义一个使用 community 'myCommunity' 和源网络 172.17.1.0/24 的用户 'myUser'
com2sec myUser 172.17.1.0/24 myCommunity

#将 myUser 加到 'myGroup' 组,定义组权限
group    myGroup    v1        myUser
group    myGroup    v2c        myUser

view all included .1

access myGroup    ""    any    noauth     exact    all    all    none

转自:http://www.linuxde.net/2013/02/12269.html

免责声明:文章转载自《SNMP-配置文件详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ADO.NET- 中批量添加数据的几种实现方法比较第4步:创建RAC共享磁盘组下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

源码安装LNMP与搭建Zabbix

系统环境:CentOS release 6.5 (Final) 搭建Zabbix 3.0对PHP环境要求>= 5.4 一、下载NMP的软件包: N:wget http://nginx.org/download/nginx-1.8.0.tar.gz P:wget http://cn2.php.net/distributions/php-5.6.28.t...

利用linux的mtrace命令定位内存泄露(Memory Leak)

  一谈到内存泄露, 多数程序员都闻之色变。 没错, 内存泄露很容易引入, 但很难定位。  以你我的手机为例(假设不经常关机), 如果每天泄露一些内存, 那么开始的一个星期, 你会发现手机好好的, 当内存泄露积累到一定程度,  那就是各种卡死了, 系统异常, 最后死机, 不得不重启。         如果搞开发, 遇到内存泄露问题, 那就呵呵了。 你可能先...

一套完整的中小级别的企业级监控prometheus

一   相信有很多博客都已经详细的说明了prometheus的作用以及相关的作用以及原理,这里不在赘述,仅仅从部署和配置2个方面来记录一下,为公司产品组搭建的prometheus告警平台的过程以及踩过的坑,废话不多说,直接开始搭建部署,需要在一台服务器上面搭建prometheus+grafana+alertmanager+pushgateway,其余被监控...

linux 常用操作以及概念

一、常用操作以及概念 查看LINUX发行版的名称及其版本号的命令: lsb_release -a cat /etc/redhat-release(针对redhat,Fedora) 0.rpm包路径:/mnt/Packages 1. --help 指令的基本用法与选项介绍。 2. man man 是 manual 的缩写,将指令的具体信息显示出来。...

[tomcat启动报错]registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped

环境:一个tomcat ,一个工程配置了多数据源,在启动的时候报如下错误: SEVERE: The web application [/qdp-resource-job] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it...

SQL SERVER 内存学习系列(一)

        最近帮客户解决发布订阅的问题时,突然遇到这样一个问题发布订阅中报下面的错误,另外执行alter table 操作时也会报错 :            问题很奇怪发布订阅和CLR有什么关系?memtoleave内存是个啥?回忆学习体系架构的时候,确实看到过memtoleave内存,但是是什么已经完全想不起来了,所以拿起书本回味一下学习的快感....