MRTGによるサーバ監視(Linux編)

NET-SNMP > MRTG

MRTGは、ルータ等のトラヒックをグラフで表示するツールです。ルータの構成を変更したためADSL側の監視ができなくなり、寂しいのとサーバの様子を見たかったので、ucd(net)-snmpとmrtgでトラヒック、CPU使用率、空きメモリ量、ディスク使用率を測るようにしました。下記は、現在の状況ですが、グラフをクリックすると詳細情報を見ることができます。
なお、SNMPやMRTGに関しては、SNMPによるネットワークモニタリングで詳しく解説されているので、こちらを参考すればよいでしょう。


トラヒック
day
CPUロードアベレージ
day
CPU使用率
day
空きメモリ量
day
ディスク使用率
day


しかく必要なソフトやモジュール

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
設定しなければならない項目は以下のとおりです。
  1. コミュニティ名
  2. セキュリティグループ
  3. ビュー
  4. アクセス権限
  5. システム情報
ここでの前提は、localhostを監視するものとして設定していきます、言い換えればサーバ機本体をサーバ機で監視するということになりますが、他のサーバも監視するのであれば、ターゲットでも同様の設定が必要になります。但し、そのとき必要なのはSNMPエージェント機能だけですから、上記のnet-snmp以外(mrtg以下)は不要です。
  1. コミュニティ名

    コミュニティ名は、下記の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

  2. セキュリティグループ

    セキュリティグループは、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


  3. ビュー

    view行では、管理情報の公開範囲を指定するが、デフォルトでは全て公開という設定になっている。今回は、localhostのみなのでそのままとした。

    # incl/excl subtree mask 80
    view all included .1 80

  4. アクセス権限

    ここでは、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


  5. システム情報

    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
続いて、MRTGの設定を行います。


Top Pageへ

AltStyle によって変換されたページ (->オリジナル) /