【試してみた】Munin 2.0-betaを入れてリソースを監視してみた

【試してみた】Munin 2.0-betaを入れてリソースを監視してみた はてなブックマーク - 【試してみた】Munin 2.0-betaを入れてリソースを監視してみた


◆リソース監視ツールMunin 2.0 beta

Munin は主に Linux 上で動作する、リソース監視(モニタリング)用のツール。ネットワーク上でサーバのリソースを監視するだけでなく、状況の推移や「何がパフォーマンスに悪影響を与えているのか」といった問題を解決するために、非常に有用なツールです。オープンソースとして、自由に使うことができます。配布元は http://munin-monitoring.org/ です。現在の安定版は、バージョン 1.4.6 ですが、次世代の 2.0 系リリースに向けたβ版の開発が進んでいます。先月、2.0-beta7 がリリースされました。

◆2.0 は何が違うのか?

Munin2でトラフィックを表示しているところ。グラフも多少洗練

Munin 2.0 beta では、1系と大きく違う点があります。まず、見た目のインターフェースが改善されています(ここで実働サーバ情報を公開しています)。

表示されるグラフも、これまでと比べて洗練された感じになりました。内部的には、画像生成が全て CGI でリアルタイム生成になった事があげられます。これは、FastCGIとの連携がよりすすみ、画像生成にもストレスを感じなくなりました。

一番便利になったところは、「特定期間のリソースグラフを拡大表示する機能」です。これが個人的には一番2.0系らしい機能と思います。

リソースのグラフをクリックしていくと、最終的に大きくリソースグラフが拡大表示されます。例えば、イカのグラフは、CPUのリソース拡大版です。

このように大きく表示されるだけでも有り難いのですが、それだけではありません。

画像の中を「3回クリック」すると拡大表示することが出来ます。手順はシンプル。グラフ上で、まずは始点。次に、終点をクリックし、最後にその中間を(色の反転した部分)クリックすると、その指定した期間内の拡大グラフが表示されます。

あるいは、日時やエポック秒で指定することも出来ます。入力後【 UPDATE 】を押すことで、拡大画像が表示されます。

拡大すると、次のように、より詳細なグラフへと切り替わります。Munin 1系では「この時間帯に何があったんだろう、わっかんないなー」という所がありましたが、バージョン2系であれば、より把握しやすくなるでしょう。

CPUリソースの拡大表示

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 の正式版リリースが楽しみですね。

 

7 thoughts on “【試してみた】Munin 2.0-betaを入れてリソースを監視してみた

  1. pumpCurry

    リポジトリに2.0.0 rc1 が来ましたので同じく試してみました。
    ズームができるようになったのはとてもおいしいです。
    ところで、cronで1分おきにデータを取りに行っても、グラフが
    5分おきに丸めまれてしまうみたいなんですね(このページに
    添付されているグラフも丸められている)。これってデータは入って
    いるがグラフで呼んでないだけなのか、それともすでに捨てられて
    いるのか、どっちなんでしょうか(以前はズームできなかったので
    気付けなかった問題ですね)。もし捨てられているのでしたら、拾う方法
    はあるのでしょうか…

    1. 前佛 雅人 Post author

      pumpCurryさん、こんばんは! 早速試されたんですねp(^^)q
      rrdtool dump コマンドでrrdファイルをのぞいてみると、残念ながらデータ構造的に5分間(600秒)単位でデータを保持しているようです。Muninのソースをさわるなり、何かしら改良をしないと、1分おきにデータを格納するのは難しそうです。

      短期間のトレンド監視であれば、別のツールを使った方がいいかもしれません。日本語での情報は無いのですが、たとえばGraphiteであれば、ご要望を満たせるのかなと。

      Graphite – Scalable Realtime Graphing – Graphite
      http://graphite.wikidot.com/

  2. pumpCurry

    ありがとうございます、「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にするところまでは結構あちこちで解説あるんですが、ここまで書いてあるところは
    ほとんどなさげです。

    1. 前佛 雅人 Post author

      pumpCurry さん、大変参考になるコメントありがとうございます!
      update_rate 60で1分単位にして、graph_data_size custom で保持期間の調整なんですね、なるほど(._.) φ メモメモ
      このあたりの数値をいじって、僕も試してみようと思います。これなら Munin 2.0 でデータをズームする際、過去分も役立つものになりそうです。

  3. Pingback: blog.shiten.info » munin-2.0-rc1を試してみた(Debian GNU/Linux)

  4. pumpCurry

    ところで、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へはそのまま
    引き継げるようです。

  5. 前佛 雅人 Post author

    なるほど、1度データをダンプする方法であれば、アリかもしれませんね。ちょっと試してみようと思います。手動というのが、アレですが(;´Д`) 原理的にはいけそうですね。

    あと、あらら、1.4 -> 2.0 も大丈夫です? であれば、僕の手順がヘマってた可能性がありますね。他にもいくつか環境があるので、少し悩んでみます。ありがとうございます!!