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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM