CentOS

2006/5/02 01:20 PM 更新

Net-SNMP

サーバの負荷を監視するためにSNMPサーバを導入する。
SNMPサーバを導入するとトラフィック量、CPU使用率、メモリ使用率などが取得可能になる。

Net-SNMPの公式サイトより最新のソースファイルを入手しインストールする。
$ wget http://jaist.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.3.0.1.tar.gz
$ tar net-snmp-5.3.0.1.tar.gz
$ cd net-snmp-5.3.0.1
$ ./configure --prefix=/usr/local/net-snmp --disable-manuals
$ make
# make install
SNMPサーバの設定を行う。
設定ファイルがソースファイル中にあるので流用する。
# cp $SOURCE/EXAMPLE.conf /usr/local/net-snmp/share/snmp/snmpd.conf
  /usr/local/net-snmp/share/snmp/snmpd.conf
# 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                private
com2sec  mynetwork 192.168.1.0/24       public

##     group.name sec.model  sec.name

#group MyROGroup  any        mynetwork
#
group MyRWGroup  v1          local
group MyRWGroup  v2c         local
group MyRWGroup  usm        local
group MyROGroup  v1           mynetwork
group MyROGroup  v2c          mynetwork
group MyROGroup  usm         mynetwork

##           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


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


###########################################################
# System contact information
#

# It is also possible to set the sysContact and sysLocation system
# variables through the snmpd.conf file:

syslocation boris
syscontact info <info@kajukaju.net>
起動スクリプトを作成する。
  /etc/rc.d/init.d/snmpd
#!/bin/bash
# net-snmp init file for snmpd
#
# chkconfig: 345 50 50
# description: Simple Network Management Protocol (SNMP) Daemon
#
# processname: /usr/local/net-snmp/sbin/snmpd
# config: /usr/local/net-snmp/share/snmp/snmpd.conf
# pidfile: /var/run/snmpd.pid

# source function library
. /etc/init.d/functions

OPTIONS="-Ls 1 -Lf /dev/null -p /var/run/snmpd.pid -a"
RETVAL=0
INIT_PROG="snmpd"

start() {
        echo -n $"Starting $INIT_PROG: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                daemon /usr/local/net-snmp/sbin/snmpd $OPTIONS
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/snmpd
        fi;
        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $INIT_PROG: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                killproc /usr/local/net-snmp/sbin/snmpd
                RETVAL=$?
                [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/snmpd
        fi;
        echo
        return $RETVAL
}

reload(){
        echo -n $"Reloading $INIT_PROG: "
        killproc /usr/local/net-snmp/sbin/snmpd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

restart(){
        stop
        start
}

condrestart(){
    [ -e /var/lock/subsys/snmpd ] && restart
    return 0
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        condrestart
        ;;
  status)
        status snmpd
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
        RETVAL=1
esac

exit $RETVAL
起動スクリプトを登録する。
# chmod 755 /etc/rc.d/init.d/snmpd
# /sbin/chkconfig --add snmpd
# /sbin/chkconfig --list
snmpd            0:オフ  1:オフ  2:オフ  3:オン  4:オン  5:オン  6:オフ
ログをシスログに出力するためsyslog-ngを設定する。
  /usr/local/etc/syslog-ng.conf
destination d_snmp { file("/var/log/snmp.log"); };
filter f_snmp { facility(local1); };
log { source(s_sys); filter(f_snmp); destination(d_snmp); };
SNMPサーバを起動する。
# /sbin/service net-snmp start
Starting snmpd:                                            [  OK  ]

# ps -ax |grep snmp
 9687 ?        S      0:00 /usr/local/net-snmp/sbin/snmpd -Ls 1 -Lf /dev/null -p /var/run/snmpd.pid -a

# netstat -an |less
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address             State
udp        0      0 0.0.0.0:161             0.0.0.0:*
動作確認する。
●ローカルホストの情報取得
# /usr/local/net-snmp/bin/snmpwalk -v 1 -c private localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux boris 2.4.21-27.0.2.ELcustom #2 2005年 3月 27日 日曜日 22:02:02 JST i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (26806) 0:04:28.06
SNMPv2-MIB::sysContact.0 = STRING: info <info@kajukaju.net>
SNMPv2-MIB::sysName.0 = STRING: boris
SNMPv2-MIB::sysLocation.0 = STRING: boris
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (2) 0:00:00.02

●リモートホストの情報取得
# /usr/local/net-snmp/bin/snmpwalk -v 1 -c public 192.168.1.xx system
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 2 Stepping 4 AT/AT COMPATIBLE - Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (45973680) 5 days, 7:42:16.80
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: ALICE
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 76
サーバ稼働時のログ。
# tail /var/log/messages
May 2 12:04:19 boris snmpd: snmpd起動 succeeded

# tail /var/log/snmp.log
May 2 12:04:19 boris snmpd[9687]: NET-SNMP version 5.3.0.1
ログのローテート設定を追加
  /etc/logrotate.d/snmp
/var/log/snmp.log
    create 0644 root root
    monthly
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` 2> /dev/null
    endscript
SNMPコマンドの使い方
●全てのMIB情報を取得
# /usr/local/net-snmp/bin/snmpwalk -v 1 -c public 192.168.1.xx .1
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 2 Stepping 4 AT/AT COMP
ATIBLE - Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (45979257) 5 days, 7:43:12.57
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: ALICE
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 76
(省略)

●MIBの名前解決
# /usr/local/net-snmp/bin/snmptranslate -On IF-MIB::ifInOctets.2
.1.3.6.1.2.1.2.2.1.10.2

# /usr/local/net-snmp/bin/snmptranslate .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2