「サーバに突然トラブル発生!」
サーバ管理者なら誰しも経験があることでしょう。
トラブル対処してハイ終了, だけでは毎回同じことの繰り返しになってしまいます。
トラブルの前のサーバ状況を把握して根本的な原因を探ることも重要です。
サーバのリソース監視を行えば, サーバの挙動の変化が一目でわかるので原因の特定が容易になります。
日々のサーバリソース状況を把握しておけば, リソース状況に変化があった際に前もってトラブルに対処できるかもしれません。
また, リソース監視は負荷対策にも非常に役立ちます。
Webアプリケーションのボトルネック部分もリソース監視グラフからすぐにわかるので, どういった対策を行えばよいのかが明確になるのです。
サーバの運用に欠かせないリソース監視ですが, 有名どころだと MRTG, cacti 等があります。
これらのリソース監視ツールは設定するまでが非常に手間で, 一つの監視項目を設定するだけでも相当骨が折れます。1)
そんな面倒な設定を一切しなくてもいい夢のようなリソース監視ツール。
それが Munin です。2)
このお手軽さを知ってしまうと, もう Munin 以外は使えなくなります。
SorceForge:Muninで最新版をダウンロードします。
現時点(2007/4/25)での最新版は 1.3.3 です。3)
Munin は Perl で書かれていて, 動作させるためにはいくつかの CPANモジュールが必要です。
クライアント/ノードでそれぞれ必要なモジュールが異なります。
1. RRDTool のインストール
グラフ描画のために RRDTool が必要です。
1.2.x では動作しないため, 1.0.x をインストールして下さい。
Debian なら apt-get で, FreeBSD/OpenBSD なら ports や pkg_add でさくっと入れてしまいましょう。
RRDTool をソースから入れる場合は, 動作に必要な以下のパッケージもインストールしておいて下さい。4)
RRDTool の Perlモジュール RRDs.pm と共有ライブラリ RRDs.so は Munin で利用するので, Perl のインクルードパスにコピーするかシンボリックリンクを作成してパスを通して下さい。
2. Munin(監視クライアント) のインストール
munin ユーザを作成します。
# groupadd -g 4949 munin # useradd -u 4949 -g munin -m -s/sbin/nologin munin
CPANモジュールをインストールします。
# cpan install Time::HiRes # cpan install HTML::Template # cpan install Net::SNMP (SNMPを利用する場合)
munin本体を解凍して監視クライアントをインストールします。
# tar zxvf munin_1.3.3.tar.gz && cd munin-1.3.3 # make install-main
デフォルトのディレクトリレイアウトは以下のようになっています。
/opt/munin/bin ・・・ cron実行ファイル /opt/munin/lib ・・・ Perlライブラリ群 /opt/munin/var ・・・ HTML や 画像保存 /etc/opt/munin ・・・ 設定ファイル /var/opt/munin ・・・ rrdファイル等保存 /var/log/munin ・・・ 各種ログ /var/run/munin ・・・ ソケットファイル保存
Makefile.conf を編集すればレイアウトを変更できるようなので, インストール先を変えたい方は編集してから make しましょう。
ノードのインストールは監視対象全てのサーバに対して行います。
muninグループを作成します。
# groupadd -g 4949 munin
CPANモジュールをインストールします。
# cpan install Net::Server::Fork
監視ノードとプラグインをインストールします。
# tar zxvf munin_1.3.3.tar.gz && cd munin-1.3.3 # make install-node install-node-plugins
プラグインの設定をしてノードのインストールは完了です。
# /opt/munin/sbin/munin-node-configure --shell | sh
デフォルトのディレクトリレイアウトは以下のようになっています。
/opt/munin/sbin ・・・ リソース値取得実行ファイル等 /opt/munin/lib/plugins ・・・ プラグイン群 /etc/opt/munin ・・・ 設定ファイルやプラグインへの symlink /var/log/munin ・・・ ノードログ /var/run/munin ・・・ pidファイル保存
監視クライアントと同様に, Makefile.config でインストール先の変更が可能です。
/etc/opt/munin/munin.conf を編集します。
必要最低限の設定は以下のようになります。
dbdir /var/opt/munin
htmldir /opt/munin/var/www
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/opt/munin/templates
[chopin.lo.y-110.net]
address 192.168.110.5
use_node_name yes
[mozart.lo.y-110.net]
address 192.168.110.6
use_node_name yes
[debussy.lo.y-110.net]
address 192.168.110.7
use_node_name yes
インストール時にディレクトリレイアウトを変更していなければ, xxxdir の部分は変更しなくても大丈夫です。
レイアウトを変更した場合は, それに合わせて xxxdir を編集する必要があるかも知れません。
Munin の監視ノードの設定はドメイン毎にグループ化して管理されます。
私の環境では内部ドメインが lo.y-110.net となっているので, ノード定義のセクションは [chopin.lo.y-110.net] や [mozart.lo.y-110.net] のようになります。
address はノードの IPアドレスかホスト名を指定します。
use_node_name を yes に指定すると /etc/opt/munin/plugins (から張られているシンボリックリンク)全てのプラグインを使用するということになります。
値が取れて困ることはないので, ここは yes で問題ありません。
必要のないプラグインはシンボリックリンクを削除してください。
/etc/opt/munin/munin-node.conf を編集します。
log_level 4 log_file /var/log/munin/munin-node.log port 4949 pid_file /var/run/munin/munin-node.pid background 1 setsid 1 # Which port to bind to; host * user root group root setsid yes # Regexps for files to ignore ignore_file ~$ ignore_file \.bak$ ignore_file %$ ignore_file \.dpkg-(tmp|new|old|dist)$ ignore_file \.rpm(save|new)$ allow ^192\.168\.110\.110$
各項目の意味は以下になります。
| log_level | ログ出力のレベル。0 だと出力しない。 |
|---|---|
| log_file | ログの出力先。 |
| port | munin-node の起動ポート。デフォルトは 4949。 |
| pid_file | pidファイルのパス。 |
| background | バックグラウンドで動作させるかどうか。 |
| setsid | sid をセットするかどうか。 |
| host | TCP/IPコネクションを受け付ける IPアドレス or ホスト名。 |
| user | munin-node の実行ユーザ。 |
| group | munin-node の実行グループ。 |
| ignore_file | 無視するファイルの正規表現。 |
| allow | 接続許可IPアドレス。 |
最低限編集する必要があるのは allow だけです。
allow には監視クライアントの IPアドレスを指定します。
デフォルトでは log_level 4 になっていて延々とログが吐かれるので, 動作確認が終わったら 0 にしたほうがよいかも知れません。
その他はデフォルトで構わないと思います。
接続するインターフェースを制限したい場合は, host に明示的にインターフェース(eth0等の)の IPアドレスを指定してください。
munin の cron にリソース監視のジョブを登録します。
/etc/crontab, /etc/cron.d/munin, crontab -u munin -e お好きな方法でどうぞ。
*/5 * * * * munin /opt/munin/bin/munin-cron 2>&1
cron に登録する前に /opt/munin/bin/munin-cron を直接実行して正常に終了するか確認して下さい。
うまく実行されない場合は, ログを確認したり -debug オプションをつけてデバッグメッセージを確認するなどして対処して下さい。
<MUNIN_SOURCE_DIR>/dists の下に各ディストリビューションのディレクトリがあり, その下に起動スクリプトの雛形があります。
munin-node の実行ファイルや設定ファイルのパスを確認して, 必要に応じて書き換えて下さい。
1. Debian
<MUNIN_SOURCE_DIR>/dists/debian/munin-node.init を使います。5)
update-rc コマンドで自動起動設定しておきましょう。
# cp munin-node.init /etc/init.d/munin-node && chmod +x /etc/init.d/munin-node # update-rc munin-node.init defaults 90
2. RedHat6)
<MUNIN_SOURCE_DIR>/dists/redhat/munin-node.rc を使います。
chkconfig コマンドで自動起動設定しておきましょう。
# cp munin-node.rc /etc/init.d/munin-node # chkconfig --add munin-node # chkconfig munin-node on
3. FreeBSD
<MUNIN_SOURCE_DIR>/dists/freebsd/munin-node/files/munin-node.sh を使います。
自動起動するように /etc/rc.conf.local を編集します。
# cp munin-node.sh /usr/local/etc/rc.d && chmod +x /usr/local/etc/rc.d/munin-node.sh
-/etc/rc.conf.local munin_node_enable="YES" munin_node_config="/etc/opt/munin/munin-node.conf"
4.OpenBSD
誰か教えて・・・直接実行してます(´・ω・`)
監視ノード・クライアント共に正常に動作していたら, 上のようなインデックスページが munin.conf の htmldir で指定したディレクトリに index.html という名前で作成されます。
デフォルトでは /opt/munin/var/www なので, Apache の DocumentRoot からシンボリックリンクを張ってやるなどしてブラウザで閲覧できるようにして下さい。
監視クライアントサーバに Webサーバが入っていない場合は, 定期的に他の Webサーバへ htmldir以下を丸ごとコピーして見るのもアリです。
各ホストのリンクをクリックすると, ホスト毎の Daily, Weekly のリソースグラフが表示されます。
インストールしただけで何も設定しなくても欲しい情報の殆どが取れていませんか?
監視ノードのインストールの段階で, インストーラがサーバの構成を確認して必要なプラグインを自動的にリンクしてくれているのです。
CPU利用率, ロードアベレージ, メモリ使用量, ハードディスク使用率, ハードディスクI/O, ネットワーク帯域使用量, スワップ率, プロセス数, メールキュー, NTP, MySQLの各種情報, etc...
Munin を利用する最大の利点は, 何もせずに殆どの情報がグラフ化できる所にあります。
MRTG や cacti では一つ一つの項目を監視ノード毎に設定しなければなりません。
サーバが数十台とかあったら泣きそうです。
情報が多すぎると感じた場合はプラグインへのリンクを削除すればいいだけです。
また, グラフ表示が動的ではなく静的ファイルを定期的に生成しているので, グラフ表示自体も軽いです。
MuninExchange にてプラグインも多数公開されており, 自分で書くことはほぼ無いと思います。