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へ