Net-SNMP
サーバの負荷を監視するためにSNMPサーバを導入する。
SNMPサーバを導入するとトラフィック量、CPU使用率、メモリ使用率などが取得可能になる。
$ wget http://jaist.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.3.0.1.tar.gzSNMPサーバの設定を行う。
$ 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
設定ファイルがソースファイル中にあるので流用する。
# 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"); };SNMPサーバを起動する。
filter f_snmp { facility(local1); };
log { source(s_sys); filter(f_snmp); destination(d_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
