• snmpd.conf的基础配置


    当下的 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。
    
        ####
        # 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 从监控主机上得到了目标主机上内存使用状态的两个参数,其它脚本也是一样的。

    参考链接:  https://www.linuxde.net/2013/02/12269.html

  • 相关阅读:
    039、Data Volume 之 bind mount (2019-02-28 周四)
    038、Docker 的两类存储资源(2019-02-27 周三)
    037、外部网络如何访问容器 (2019-02-26 周二)
    036、容器如何访问外部世界 (2019-02-25 周一)
    035、容器间通信的三种方式(2019-02-22 周五)
    034、理解容器之间的连通性(2019-02-21 周四)
    033、如何自定义容器网络(2019-02-20 周三)
    032、学容器必须懂bridge网络(2019-02-19 周二)
    031、none和host网络的适用场景(2019-02-18 周一)
    030、实现容器的底层技术(2019-01-25 周五)
  • 原文地址:https://www.cnblogs.com/zhukaijian/p/13211862.html
Copyright © 2020-2023  润新知