◆リソース監視ツールMunin 2.0 beta
Munin は主に Linux 上で動作する、リソース監視(モニタリング)用のツール。ネットワーク上でサーバのリソースを監視するだけでなく、状況の推移や「何がパフォーマンスに悪影響を与えているのか」といった問題を解決するために、非常に有用なツールです。オープンソースとして、自由に使うことができます。配布元は http://munin-monitoring.org/ です。現在の安定版は、バージョン 1.4.6 ですが、次世代の 2.0 系リリースに向けたβ版の開発が進んでいます。先月、2.0-beta7 がリリースされました。
◆2.0 は何が違うのか?
Munin 2.0 beta では、1系と大きく違う点があります。まず、見た目のインターフェースが改善されています(ここで実働サーバ情報を公開しています)。
表示されるグラフも、これまでと比べて洗練された感じになりました。内部的には、画像生成が全て CGI でリアルタイム生成になった事があげられます。これは、FastCGIとの連携がよりすすみ、画像生成にもストレスを感じなくなりました。
一番便利になったところは、「特定期間のリソースグラフを拡大表示する機能」です。これが個人的には一番2.0系らしい機能と思います。
リソースのグラフをクリックしていくと、最終的に大きくリソースグラフが拡大表示されます。例えば、イカのグラフは、CPUのリソース拡大版です。
このように大きく表示されるだけでも有り難いのですが、それだけではありません。
画像の中を「3回クリック」すると拡大表示することが出来ます。手順はシンプル。グラフ上で、まずは始点。次に、終点をクリックし、最後にその中間を(色の反転した部分)クリックすると、その指定した期間内の拡大グラフが表示されます。
あるいは、日時やエポック秒で指定することも出来ます。入力後【 UPDATE 】を押すことで、拡大画像が表示されます。
拡大すると、次のように、より詳細なグラフへと切り替わります。Munin 1系では「この時間帯に何があったんだろう、わっかんないなー」という所がありましたが、バージョン2系であれば、より把握しやすくなるでしょう。
CPUだけでなく、トラフィック(ネットワーク帯域)やメモリ、ロードアベレージなど、Muninが対応しているリソース監視プラグインであれば、どれも拡大・期間指定が出来ます。
障害が発生した時、あとで始末書や報告書を書くのに助かりますね!(えっ)
また、設定ファイルやプラグインなどは 1系と互換性があります。そのため、1度インストールさえ済ませてしまえば、運用上は、ほぼ同じように扱えると思います。詳しくは ChangeLog を参照ください。
◆2.0-beta7のインストール方法
さて、そんな 2.0beta ですが、使い方をまとめておきます。注意点がいくつかありますので、予めご注意ください。
- 注意1:beta版なので、今後の正式版ではデータ構造の変更やプログラムやプラグインの仕様が変わり、互換性が無い場合があります。
- 注意2:同一サーバ上で Munin 1系と2系を混在するのは困難です(Perlのモジュールの関係です。複数のPerlをインストールするのであれば可能かもしれませんが、それほどの見返りがあるとは思えません)。
- 注意3:作業前には必ずバックアップを。戻せる自身がないのであれば、正式版を待ちましょう。
※以下人柱専用!! ザッと手順を眺めて無理そうなら、正式版まで我慢を推奨。
うまくいかなくても、僕は責任をとれません。ごめんなさい。
なお、手順は RHEL5 の環境用で試したものをベースにしています。ほかのディストリビューションでも、ほぼ同様の手順だと思います。できれば、ソースに同梱されている INSTALL を一緒に参照されることをオススメします。
まずは、ソースのダウンロードと展開です。
# wget http://downloads.sourceforge.net/project/munin/dev/2.0-beta/munin-2.0-beta7.tar.gz # tar xvfz munin-2.0-beta7.tar.gz # cd munin-2.0-beta7
次に、いくつか Perl モジュールのインストールが必要になります。次のコマンドを実行して、エラーが出てくるようであれば、インストールが必要です。
# perl -e 'use Time::HiRes' # perl -e 'use Module::Build' # perl -e 'use Net::SSLeay' # perl -MRRDs -e ':;'
もし、足りないモジュールがあれば「cpan -i モジュール名」を実行して、CPAN からモジュールをインストールします。手動でソースを回収して、インストールしてもかまいません。
また、私の試した環境は、ほぼ上記のチェックだけで動作しましたが、実際には次のようなモジュール群も必要との事です(INSTALLファイル参照)。
- Perl modules for server: - Time::HiRes - Storable - Digest::MD5, - HTML::Template - Text::Balanced - Params::Validate - TimeDate - Net::SSLeay if you want to use SSL/TLS - Getopt::Long - File::Copy::Recursive - Log::Log4perl (which depends on - IPC::Shareable - Log::Dispatch - Log::Dispatch::FileRotate - MIME::Lite - Mail::Sender - Mail::Sendmail - MailTools)
結構チェックが面倒ですが、地道にガンバp(^^)qです。
次に、munin 用のグループとユーザを作成します。既に作ってある場合は、そのままで構いません。
# /usr/sbin/groupadd -g 493 munin # /usr/sbin/adduser -u 495 -g munin -b /var/lib/ munin -s /sbin/nologin -c "Munin user"
それからコンパイルです。
# make
まずは make だけ実行します。エラーが出る可能性もあり、make install は非推奨です。ちなみに、自分の環境では java のプラグインの所でエラーがでて make 失敗しました。
WARNING: Possible missing or corrupt 'MANIFEST' file. Nothing to enter for 'provides' field in metafile. Created MYMETA.yml and MYMETA.json Creating new 'Build' script for 'Munin::Plugins' version '0.0.0' cd plugins && /usr/bin/perl Build Building Munin::Plugins cd plugins/javalib && javac -g -source 1.5 -target 1.5 org/munin/plugin/jmx/BasicMBeanConnection.java ---------- 1. ERROR in org/munin/plugin/jmx/BasicMBeanConnection.java (at line 15) public static MBeanServerConnection get(Config config) throws IOException, MalformedURLException ^^^^^^ Config cannot be resolved to a type ---------- 1 problem (1 error)make: *** [plugins/javalib/org/munin/plugin/jmx/BasicMBeanConnection.class] エラー 255
ぐぬぬ、という気分ですが、あきらめては行けません。Makefile.config を開き、java 関連プラグインの部分(167行目)を次のようにコメントアウトします。
#JCVALID = $(shell $(JC) -version >/dev/null 2>/dev/null && echo "yes")
これで make が通りました。エラーが出なければ、
# make install
このように、サクッとインストールします。なお、特にインストール時に指定がなければ、次の場所にファイル群がインストールされます。
- /etc/opt/munin … 設定ファイル
- /etc/opt/munin/munin.conf … マスタ設定ファイル
- /etc/opt/munin/munin-node.conf … ノード設定ファイル
- /etc/opt/munin/plugins/ … プラグインの設置先
- /opt/munin/ … その他の munin 実行ファイルやプラグイン・ログ全般
- /opt/munin/sbin/ … munin-node
- /opt/munin/bin/ … cron 用のコマンド等
- /opt/munin/log/ … ログ
- /opt/munin/www/docs/ … munin の HTML 生成ディレクトリ
- /opt/munin/www/docs/.htaccess … アクセス制限等
- /opt/munin/www/cgi/ … munin-cgi-graph があるので、ScriptAlias はここ
次に fastCGI 系のモジュールをインストールします。RHEL では、Red Hat 社からは RPM が提供されていないので、Fedora プロジェクトで公開されている EPEL のものを使えます。x86_64の場合であれば、次のように入れます。
# mkdir /usr/local/src/fcgi # cd /usr/local/src/fcgi/ # wget http://download.fedora.redhat.com/pub/epel/5/x86_64/fcgi-2.4.0-12.el5.x86_64.rpm # wget http://download.fedora.redhat.com/pub/epel/5/x86_64/fcgi-devel-2.4.0-12.el5.x86_64.rpm # wget http://download.fedora.redhat.com/pub/epel/5/x86_64/fcgi-perl-2.4.0-12.el5.x86_64.rpm # ll 合計 256 -rw-r--r-- 1 root root 46174 1月 20 2010 fcgi-2.4.0-12.el5.x86_64.rpm -rw-r--r-- 1 root root 161101 1月 20 2010 fcgi-devel-2.4.0-12.el5.x86_64.rpm -rw-r--r-- 1 root root 43135 1月 20 2010 fcgi-perl-2.4.0-12.el5.x86_64.rpm # rpm -ivh *.rpm 準備中... ########################################### [100%] 1:fcgi ########################################### [ 33%] 2:fcgi-devel ########################################### [ 67%] 3:fcgi-perl ########################################### [100%]
ここで FCGI 関係をいれておかないと、動的なグラフ生成に支障がでます。画像が出ない時に Apache のエラーログを見て「Can’t locate FCGI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /..」と出ている場合、この手順が抜けています。
以降、既に Munin 1.x の記述がある場合は、設定の削除・変更が必要です(通常のままでは、共存できません)。Apache の Alias や munin-node の重複起動等、注意して作業をすすめる必要があります。
次は、cron の設定をします。
# vi /etc/cron.d/munin
中身は、ソース中にある build/resources/linux-cron.d_munin を、コピーします。
# # cron-jobs for munin, drop in /etc/cron.d on a Linux machine. # MAILTO=root */5 * * * * munin if [ -x /opt/munin/bin/munin-cron ]; then /opt/munin/bin/munin-cron; fi
Apacheの設定を追加します。
# vi /etc/httpd/conf.d/munin.conf
中身は次のようにします。私の場合は /munin2/ に Alias をはりましたが、/munin/ でも構いません。環境にあわせて書き換えてください。
# Munin2 Alias /munin2/ /opt/munin/www/docs/ <Directory /opt/munin/www/data/> AllowOverride All Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ /opt/munin/www/cgi/ <Directory /opt/munin/www/cgi/> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
Muninへの BASIC 認証設定を行います。これは admin という ID でパスワードを設定する場合の例です。
# htpasswd -c /etc/opt/munin/munin-htpasswd admin New password: Re-type new password: Adding password for user admin
次に、ログファイルの所有者・パーミッションの設定変更を行います。
# chgrp -R apache /opt/munin/log/munin # ls -al /opt/munin/log/munin # chmod 775 /opt/munin/log/munin
この手順も忘れず行ってください。これが無いと、グラフ生成に失敗し「munin-cgi-graph: Can’t open /opt/munin/log/munin/munin-cgi-graph.log (Permission denied) at /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm line 103., referer:」とエラーがでます。なお、ログをローテートさせる時は、グループ所有者が apache(RHELの場合の apache ユーザの所属グループ)になるように、記述を注意してください。このあたりは、Munin の CGI 対応手順と同じです。
あとは、munin.conf や munin-node の設定(ほぼデフォルトで大丈夫でしょう)を行います。
なお、私の環境では、munin 1 用のノードそのままを使い続ける事ができました。node に関しては、見かけ上の互換があるようなので、まずは動いてるものがあれば、そのまま使うのが良さそうです。munin 2 用のノードを使うときは、plugins ディレクトリ (/etc/opt/munin/plugins/)がカラッポなので /opt/munin/lib/plugins から、必要なプラグインをリンクするなりコピーする必要があるので用注意です。
ノード munin-node を起動します。
# /opt/munin/sbin/munin-node
RHELで munn-node を RPM でインストール済みであれば、init スクリプトを転用できます。スクリプトは vi /etc/init.d/munin などで開き、PID の場所や config のパス等をいじれば、使えます。
あとは、$ telnet localhost 4949 を実行し、list で応答があれば大丈夫です。
$ telnet localhost 4949 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. # munin node at node1.pocketstudio.net list
最後に、ブラウザからアクセスして、確認します。
ただしく画像が表示されない・データがアップデートされない場合は、各種ログを参照してください。確認ポイントは次の2点です。
- Apache のログ … /var/log/httpd/error_log など
- 画像生成ログ … /opt/munin/log/munin/munin-graph.log ほか、同ディレクトリにあるログファイル各種
いずれかに原因となるエラーが記載されていると思いますので、うまく動作しないなと思ったときは、ログを参照してください。
…以上、簡単にご紹介でした。ますます使い勝手がよくなる Munin 、を手放せなくなりそうです。Munin 2.0 の正式版リリースが楽しみですね。
リポジトリに2.0.0 rc1 が来ましたので同じく試してみました。
ズームができるようになったのはとてもおいしいです。
ところで、cronで1分おきにデータを取りに行っても、グラフが
5分おきに丸めまれてしまうみたいなんですね(このページに
添付されているグラフも丸められている)。これってデータは入って
いるがグラフで呼んでないだけなのか、それともすでに捨てられて
いるのか、どっちなんでしょうか(以前はズームできなかったので
気付けなかった問題ですね)。もし捨てられているのでしたら、拾う方法
はあるのでしょうか…
pumpCurryさん、こんばんは! 早速試されたんですねp(^^)q
rrdtool dump コマンドでrrdファイルをのぞいてみると、残念ながらデータ構造的に5分間(600秒)単位でデータを保持しているようです。Muninのソースをさわるなり、何かしら改良をしないと、1分おきにデータを格納するのは難しそうです。
短期間のトレンド監視であれば、別のツールを使った方がいいかもしれません。日本語での情報は無いのですが、たとえばGraphiteであれば、ご要望を満たせるのかなと。
Graphite – Scalable Realtime Graphing – Graphite
http://graphite.wikidot.com/
ありがとうございます、「rrdの初期設定で5分置きになるらしい」、というところが、
探索の手がかりになりました。
出てきた答えから行くと、「設定を加えたあとデータをリセットすると1分置きに取れます」。
ただし超おもたい。ありゃりゃ。
UpdateWorker.pm L694あたりに、「sub _create_rrd_file」がありまして、ここで
munin.confの「graph_data_size」に「normal」または「huge」がテンプレート値として
使えるようになっています。
またソースに入っていたコメントに詳細はここを見てね、というURLがありました:
原文: http://munin-monitoring.org/wiki/format-graph_data_size
翻訳: http://www.excite-webtl.jp/world/english/web/?wb_url=http%3A%2F%2Fmunin-monitoring.org%2Fwiki%2Fformat-graph_data_size&wb_lp=ENJA&wb_dis=
そこを読むと、munin.conf の監視先サーバ設定の前に以下の設定がデフォルトで書いてあると
一緒になるようです:
graph_data_size normal
normalだと、hour=5分精度(5分*1)を48時間まで/day=30分精度(5分*6)を9日分/month=2時間(5分*24)精度を45日分/year=1日精度(5分*288)を450日
これだとあの日なにがあったが追えなくなるので、
にするとgraph_data_size huge
どのグラフの精度も 5分精度で400日持ってくれます
これを先程のドキュメントにあった値を見ると
> normal meaning custom 576, 6 432, 24 540, 288 450
> huge meaning custom 115200
とあります。
この値が、単位時間が 300秒になっているので、すべて5分の倍数になってます。そこで
update_rate を指定して、450日持たせるには以下のようにすればできるようです:
update_rate 60
graph_data_size custom 648000
この設定を加えたら、/var/opt/munin 等のディレクトリをいったんまっさらに掃除
する必要があります(rrdがすでにあるとダメで、初回ファイル生成時に命運が決まります)
つまり、いままでとってきたデータを活かしつつ途中から1分精度上げて連続して見たい、はできないようです。
この設定はver1.4からできるらしいですが、公式サイトwikiにあるmunin.confの書き方には
説明がありません(‘A`) 2012/02/17現在
hugeにするところまでは結構あちこちで解説あるんですが、ここまで書いてあるところは
ほとんどなさげです。
pumpCurry さん、大変参考になるコメントありがとうございます!
update_rate 60で1分単位にして、graph_data_size custom で保持期間の調整なんですね、なるほど(._.) φ メモメモ
このあたりの数値をいじって、僕も試してみようと思います。これなら Munin 2.0 でデータをズームする際、過去分も役立つものになりそうです。
Pingback: blog.shiten.info » munin-2.0-rc1を試してみた(Debian GNU/Linux)
ところで、5分周期で取っていたものを1分間隔のデータとのマージは不能っぽい?と
先のコメントには書いたのですが
http://www.maruko2.com/mw/rrdtool_%E3%81%AE_RRD_%E3%81%AF%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B%E3%81%A8%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84
こちらをみてdumpしたあと、xmlにしたものを手動でマージしたらいけたりするんでしょうか。
マージ手順としては:
1) munin-nodeはストップさせる
2) 古い環境にあるrrdtool dumpしてxmlファイルを取得(重要:サーバをまたぐと変換できないことがある)
3) 新しい環境で仮稼働していたグラフから、rrdtool dumpしてxmlファイルを取得
4) ヘッダ情報やら実データ以外の部分を新環境のものにそろえ、手動でマージ
5) 新しい環境で rrdtool restore
6) munin-node起動。そしてグラフを見てみる
ただしこの戦略が生きるのは graph_data_size huge等をしていた場合に限りそうなのと、
「munin-nodeを停止させダンプしてマージしてリストアしてデータ書き戻ししてmunin-node再起動する」の間、あとでデータを入れるとかできないと欠測時間が必ず生まれる
ということです
手元に5分間隔データが今ないので、ネタだけ提起しておきます…
ちなみに5分間隔データのままいく場合で、ハードウエア構成(CPUやOSが
32/64bitかが影響)が同一の場合は、nodeを止めてそのままrrdファイルを
コピペして持ってきてnodeを再スタートしてあげれば1.4から2.0へはそのまま
引き継げるようです。
なるほど、1度データをダンプする方法であれば、アリかもしれませんね。ちょっと試してみようと思います。手動というのが、アレですが(;´Д`) 原理的にはいけそうですね。
あと、あらら、1.4 -> 2.0 も大丈夫です? であれば、僕の手順がヘマってた可能性がありますね。他にもいくつか環境があるので、少し悩んでみます。ありがとうございます!!