====== Munin でらくらくリソース監視生活 ======
「**サーバに突然トラブル発生!**」\\
サーバ管理者なら誰しも経験があることでしょう。
*ディスク溢れ
*ハードディスクの故障
*ネットワーク障害
*アクセスの集中
*etc
トラブル対処してハイ終了, だけでは毎回同じことの繰り返しになってしまいます。\\
トラブルの前のサーバ状況を把握して根本的な原因を探ることも重要です。
サーバの**リソース監視**を行えば, サーバの挙動の変化が一目でわかるので原因の特定が容易になります。\\
日々のサーバリソース状況を把握しておけば, リソース状況に変化があった際に前もってトラブルに対処できるかもしれません。
また, リソース監視は負荷対策にも非常に役立ちます。\\
Webアプリケーションのボトルネック部分もリソース監視グラフからすぐにわかるので, どういった対策を行えばよいのかが明確になるのです。
サーバの運用に欠かせないリソース監視ですが, 有名どころだと [[http://www.mrtg.jp/|MRTG]], [[http://www.cacti.net/|cacti]] 等があります。\\
これらのリソース監視ツールは設定するまでが非常に手間で, 一つの監視項目を設定するだけでも相当骨が折れます。((実際, cacti の設定途中であまりにも面倒くさくて投げ出してしまいました:-())
そんな面倒な設定を一切しなくてもいい夢のようなリソース監視ツール。\\
それが ''[[http://munin.projects.linpro.no/|Munin]]'' です。((ムーニンと発音するんでしょうか?ムーニンって聞くとどうしても某谷に生息するカバのような妖精を思い浮かべてしまいます。))\\
このお手軽さを知ってしまうと, もう Munin 以外は使えなくなります。
==== install ====
[[http://sourceforge.net/project/showfiles.php?group_id=98117|SorceForge:Munin]]で最新版をダウンロードします。\\
現時点(2007/4/25)での最新版は 1.3.3 です。((開発版ですが特に問題なく使えています^_^))
Munin は Perl で書かれていて, 動作させるためにはいくつかの CPANモジュールが必要です。\\
クライアント/ノードでそれぞれ必要なモジュールが異なります。
== 監視クライアントの install ==
**1. RRDTool のインストール**
グラフ描画のために [[http://oss.oetiker.ch/rrdtool/|RRDTool]] が必要です。\\
1.2.x では動作しないため, 1.0.x をインストールして下さい。\\
Debian なら apt-get で, FreeBSD/OpenBSD なら ports や pkg_add でさくっと入れてしまいましょう。
RRDTool をソースから入れる場合は, 動作に必要な以下のパッケージもインストールしておいて下さい。((CentOS 4.4 の yumリポジトリには rrdtool は見当たりませんでした))
* libart_lgpl
* libpng
* libpng-devel
* freetype
* freetype-devel
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 しましょう。
== 監視ノードの install ==
ノードのインストールは**監視対象全て**のサーバに対して行います。
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 オプションをつけてデバッグメッセージを確認するなどして対処して下さい。
== 監視ノードの起動 ==
/dists の下に各ディストリビューションのディレクトリがあり, その下に起動スクリプトの雛形があります。\\
munin-node の実行ファイルや設定ファイルのパスを確認して, 必要に応じて書き換えて下さい。
**1. Debian**
/dists/debian/munin-node.init を使います。((Debian 3.1 の環境では munin-1.3.3 の起動スクリプトが使えませんでした・・・1.3.2 のでは OK でした。))\\
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. RedHat**((CentOS, (たぶん)Fedoraも同じ手順で OK です。))
/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**
/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**
誰か教えて・・・直接実行してます(´・ω・`)
==== リソース監視グラフ ====
{{sysad:muninインデックス.jpg|Muninインデックス}}
監視ノード・クライアント共に正常に動作していたら, 上のようなインデックスページが munin.conf の htmldir で指定したディレクトリに index.html という名前で作成されます。\\
デフォルトでは /opt/munin/var/www なので, Apache の DocumentRoot からシンボリックリンクを張ってやるなどしてブラウザで閲覧できるようにして下さい。\\
監視クライアントサーバに Webサーバが入っていない場合は, 定期的に他の Webサーバへ htmldir以下を丸ごとコピーして見るのもアリです。
各ホストのリンクをクリックすると, ホスト毎の Daily, Weekly のリソースグラフが表示されます。
{{sysad:muninグラフ.jpg?640|Muninグラフ}}
== Munin のいいところ ==
インストールしただけで**何も設定しなくても**欲しい情報の殆どが取れていませんか?\\
監視ノードのインストールの段階で, インストーラがサーバの構成を確認して必要なプラグインを自動的にリンクしてくれているのです。\\
CPU利用率, ロードアベレージ, メモリ使用量, ハードディスク使用率, ハードディスクI/O, ネットワーク帯域使用量, スワップ率, プロセス数, メールキュー, NTP, MySQLの各種情報, etc...
Munin を利用する最大の利点は, **何もせずに殆どの情報がグラフ化できる**所にあります。\\
MRTG や cacti では一つ一つの項目を監視ノード毎に設定しなければなりません。\\
サーバが数十台とかあったら泣きそうです。
情報が多すぎると感じた場合はプラグインへのリンクを削除すればいいだけです。\\
また, グラフ表示が動的ではなく静的ファイルを定期的に生成しているので, グラフ表示自体も軽いです。
[[http://muninexchange.projects.linpro.no/|MuninExchange]] にてプラグインも多数公開されており, 自分で書くことはほぼ無いと思います。
== Munin の課題点 ==
*期間指定でグラフが描画できない