MRTGによるサーバ監視(Linux編)
MRTGは、ルータ等のトラヒックをグラフで表示するツールです。ルータの構成を変更したためADSL側の監視ができなくなり、寂しいのとサーバの様子を見たかったので、ucd(net)-snmpとmrtgでトラヒック、CPU使用率、空きメモリ量、ディスク使用率を測るようにしました。下記は、現在の状況ですが、グラフをクリックすると詳細情報を見ることができます。
トラヒック
CPUロードアベレージ
CPU使用率
空きメモリ量
ディスク使用率
■必要なソフトやモジュール
RedHatでは、必要なソフトやモジュールは全てインストールされているので、必要な設定をして起動するだけでよく、改めてインストールは不要です。のはずだったのですが、RedHat標準のucd(net)-snmpはうまくメモリやディスク関連のMIBが取得できませんでした。そこで、rpmを削除し、net-snmp(net-snmpとucd-snmpは同じものです)をソースから入れなおしました。必要なものは下記のとおりですが、その他のものは改めてインストールは不要でした。
ソフト・モジュール名
|
概 要
|
ucd(net)-snmp |
SNMPエージェント |
mrtg |
SNMPマネージャ・グラフ化ツール |
perl
|
mrtgはperlで記述されている |
gd |
グラフィック描画用ライブラリ |
libpng |
PNG形式のイメージ作成用ライブラリ |
zlib |
圧縮ライブラリ |
crond |
定期起動用デーモン |
■ucd(net)-snmpのインストールと設定
ucd(net)-snmpを削除し、ソースからインストールして設定していきます。RedHat
8.0の場合、削除するとetherealまでパッケージ依存で削除しなければならないので、そのままでも構わない。但し、起動スクリプトは、snmpd2辺りの名称で別に作成しておくことと、既存のスクリプトが起動しないようにしておく必要がある。
◆ucd(net)-snmpのrpmの削除
rpmコマンドを使用してインストールされているパッケージ名を調査(-qaオプション)し、ucd(net)-snmp-xxxxxというパッケージ名を全てアンインストール(-eオプション)します。
# rpm -qa
・
・
ucd-snmp-utils-4.2.5-7.73.0
ucd-snmp-4.2.5-7.73.0
・
・
# rpm -e ucd-snmp-utils-4.2.5-7.73.0
# rpm -e ucd-snmp-4.2.5-7.73.0 rpm # |
◆net-snmpのインストール
net-snmpのソースファイルを
こちらからダウンロードします。いろいろ置いてあるので間違えないように。おやじがダウンロードしたのは、5.0.7
source codeにあるnet-snmp-5.0.7.tar.gzです。
インストールは、任意の場所(インストール専用ユーザを作成しておくと良い)にソースを展開してコンパイルします。
$ cd ~
$ tar zxfv net-snmp-5.0.7.tar.gz
$ cd net-snmp-5.0.7
$ ./configure |
configureの途中でいろいろ問い合わせがあります。内容としては、デフォルトのsnmpバージョン(v3)、管理者のメールアドレス、機器の設置場所、ログファイル(var/log/snmpd.log)や管理情報の保存場所(/var/net-snmp)を聞かれます。snmpバージョンはv3のままだとパスワード等の設定が必要になるのでV2cに変更し、管理者のメールアドレス、機器の設置場所は後で設定できるので適当に、ファイルの場所は変える理由もないのでデフォルトのままenterすればよいと思います。
snmpバージョンはデフォルトではv3になっており、セキュリティのことを考えるとv3を使うべきなのでしょうが、v3はいろいろ設定が面倒くさいのと、localhostでのモニタだけなのでv2を選択しました。
configureが完了したらmakeしinstallしますが、installする前にファイルを書き換えられないよう、umaskでroot権限に設定しておきます。makeはかなりの時間がかかるのでじっくり待ちましょう。
$ make
$ su
# umask 022
# make install |
◆ucd(net)-snmpの設定
ucd-snmpのSNMPエージェント機能を動かすため、snmpd.confを設定します。ソースからインストールした場合は自分で作成する必要があり、ソースを展開したディレクトリ内にあるEXAMPLE.confというファイルを、/usr/local/share/snmpディレクトリにsnmpd.confという名前でコピーして、設定していきます。
# cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf |
設定しなければならない項目は以下のとおりです。
- コミュニティ名
- セキュリティグループ
- ビュー
- アクセス権限
- システム情報
ここでの前提は、localhostを監視するものとして設定していきます、言い換えればサーバ機本体をサーバ機で監視するということになりますが、他のサーバも監視するのであれば、ターゲットでも同様の設定が必要になります。但し、そのとき必要なのはSNMPエージェント機能だけですから、上記のnet-snmp以外(mrtg以下)は不要です。
- コミュニティ名
コミュニティ名は、下記のcom2sec行で管理範囲とともに設定する。コミュニティ名は、デフォルトでは「COMMUNITY」となっているが、一般的にローカル環境では「private」、グローバル環境では「public」を使うことが多いらしいが、snmp v1/2ではコミュニティ名だけで接続できるので、セキュリティ上は変更したほうがよいとのこと。ここでは、説明のためlocalhostを「private」,家庭内のLANから接続できるコミュニティ名を「public」とし、 NETWORK/24のところは、家庭内で使用しているサブネットを指定した。但し、今回はサーバ機以外に監視対象はないため、localhostの設定のみを生かし、他はコメントアウトした。
# sec.name source community
com2sec local localhost COMMUNITY
com2sec mynetwork NETWORK/24 COMMUNITY |
↓変更
# sec.name source community
com2sec local localhost private
#com2sec mynetwork 192.168.1.0/24 public |
- セキュリティグループ
セキュリティグループは、group行で設定するが、4項のアクセス権限で各グループ権限が付与される。ここでは、localhostでのモニタだけのための設定にしてある。
# sec.model sec.name
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
group MyROGroup v1 mynetwork
group MyROGroup v2c mynetwork
group MyROGroup usm mynetwork
|
↓変更
# sec.model sec.name
group MyROGroup v1 local
group MyROGroup v2c local
group MyROGroup usm local
#group MyRWGroup v1 local
#group MyRWGroup v2c local
#group MyRWGroup usm local
#group MyROGroup v1 mynetwork
#group MyROGroup v2c mynetwork
#group MyROGroup usm mynetwork
|
- ビュー
view行では、管理情報の公開範囲を指定するが、デフォルトでは全て公開という設定になっている。今回は、localhostのみなのでそのままとした。
# incl/excl subtree mask 80
view all included .1 80 |
- アクセス権限
ここでは、access行で、group行で設定した各グループに対してのアクセス権限を設定する。ここでは、読み書きできるMyRWGroupそのものが未定義なので、デフォルトのままでも良いが、一応、読込み権限だけのMyROGroupを残しMyRWGroupはコメントアウトした。認証も不要なので、「noauth」のままとした。
# context sec.model sec.level match read write notif
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
|
↓変更
# context sec.model sec.level match read write notif
access MyROGroup "" any noauth exact all none none
#access MyRWGroup "" any noauth exact all all none
|
- システム情報
syslocation行とsyscontact行で、機器の場所や用途(管理用なので極端なこととを言えばなんでも良い)などと、管理者のメールアドレス情報を登録する。
syslocation Right here, right now.
syscontact Me <me@somewhere.org>
|
↓変更
syslocation Home server
syscontact oyaji <oyaji@localhost>
|
■net-snmpの起動
SNMPエージェントを動かすには、rootユーザーとしてログインしてsnmpdを実行すればいいのですが、RedHatの起動スクリプトがあったので、パスを変更して流用しました。これで、自動起動も問題ありません。下記を/etc/rc.d/init.d/snmpdとして保存します。
#!/bin/bash
# ucd-snmp init file for snmpd
#
# chkconfig: - 50 50
# description: Simple Network Management Protocol (SNMP) Daemon
#
# processname: /usr/local/sbin/snmpd
# config: /usr/local/share/snmp/snmpd.conf
# pidfile: /var/run/snmpd
# source function library
. /etc/init.d/functions
OPTIONS="-s -l /dev/null -P /var/run/snmpd -a"
RETVAL=0
prog="snmpd"
start() {
echo -n $"Starting $prog: "
daemon /usr/local/sbin/snmpd $OPTIONS
RETVAL=$?
echo
touch /var/lock/subsys/snmpd
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc /usr/local/sbin/snmpd
RETVAL=$?
echo
rm -f /var/lock/subsys/snmpd
return $RETVAL
}
reload(){
echo -n $"Reloading $prog: "
killproc /usr/local/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|status|restart|condrestart|reload}"
RETVAL=1
esac
exit $RETVAL
|
実行権を付与し、chkconfigして登録を確認しておきます。
# chmod 755 snmpd
# chkconfig --add snmpd
# chkconfig --list snmpd
snmpd 0:オフ 1:オフ 2:オフ 3:オフ 4:オフ 5:オン 6:オフ |
snmpdを起動し、psで起動した確認します。/usr/local/sbin/snmpd -s -l /dev/null -P /var/run/snmpd -aが出ていれば起動されています。
# /etc/rc.d/init.d/snmpd
# ps -ax | grep snmpd
1714 ? S 0:00 /usr/local/sbin/snmpd -s -l /dev/null -P /var/run/snmpd
-a
1725 pts/0 S 0:00 grep snmpd
|
Top Pageへ