Munin性能評価のプラグイン2つ(munin_statsとmunin_update)

Munin性能評価のプラグイン2つ(munin_statsとmunin_update) はてなブックマーク - Munin性能評価のプラグイン2つ(munin_statsとmunin_update)


「Muninが重い( #^ω^)ピキピキ」

という時、ありませんか?ありますよね。この「重い」には、実は種類があります。1つは「Muninの動いているサーバが重い」場合。もう1つは、動的にHTML/画像を生成している場合「Muninの描画(表示)が重い」場合です。

今回の記事は、「Muninの何が重いか?」を視覚化する munin_stat プラグインと、ノード毎のデータ収集時間を計測する munin_update プラグインをご紹介します。

munin_stats プラグインのグラフ。HTML生成やグラフ生成など、Muninの定時処理で何処が重いのか把握しやすくなります。ちなみに、このグラフのサーバでは動的に画像を生成させているため、グラフ部分はカウントされていません。

■俺のMuninがこんなに軽いはずがない

Munin のサーバが重たい原因、一般的には、ノード数が増加して描画対象のグラフが増えることが多いと思います。思います、というのは、時に必ずしもグラフが原因でない場合も有るからです。また、ある時点で、グラフは動的生成に切り替えたくなる時があります(常にグラフを見ている訳でも無いのに、Muninは、5分毎に全部のグラフをご丁寧に作り直してくれるのです。。)。

munin_updateプラグインは、各サーバからのデータ収集にどれくらい時間がかかったか分かります。無駄に時間がかかるようであれば、不要なプラグインのチェックや、対象ノードのリソース状況が適切かどうか確認すべきです。

具体的に Munin の何の処理が原因で重たくなっているか、調べるのは面倒です。通常は、ログを確認します。/var/log/munin/ 以下に書き出される各種のログのうち、たとえば、更新記録のログ munin-update.log の末尾には、次のような記録があります。

 

2013/07/02 22:35:12 [INFO]: Munin-update finished (11.23 sec)

これは、各ノードからデータ回収にかかった時間が 11.23 秒でした、という意味です。同様にグラフ生成や HTML 生成の時間も確認できます。

注意しなくてはいけないのは、Munin は、5分に1回 cron で自動実行される点です。Muninの処理は、データ収集→グラフ生成→HTMLページ生成→閾値確認の順番で、5分おきに実行します。そのため、もし、一連の処理が5分以上かかる場合は、サーバの処理能力不足です。

そのような状況を、客観的に推移として確認できるのが munin_stats プラグインです。そして、munin-update (データ収集 ) 時、どこか特定のノードで重たい処理が走っていないか確認できるのが、munin_update プラグインです。

■munin_stats プラグインと munin_update プラグインの有効化

作業自体はシンプルです。まずは、例によってシンボリックリンクを作成します。

# ln -s /usr/share/munin/plugins/munin_stats /etc/munin/plugins/
# ln -s /usr/share/munin/plugins/munin_update /etc/munin/plugins/

/etc/munin/plugin-conf.d/munin-node には、以下の2行を追加します。

[munin_*]
    user munin

これは、プラグインが実行するにあたり /var/log/munin/ 以下のログを参照します。そのログファイルの所有者が munin のため、このように設定しておきます。

次は munin-run を使った実行テストです。次のように、表示されるかどうか確認します。

# /usr/sbin/munin-run munin_stats
update.value 40.65
graph.value U
html.value 15.44
limits.value 0.22

graph.value が ‘U’ と表示されていますが、このコマンドを実行した環境では、グラフを動的生成しているため、ログが出力されていないためです。HTML も動的に生成している場合、html.value も ‘U’ となります。

もしも実行時「Can’t open /var/log/munin/munin-limits.log for reading」とエラーが出ることがあれば、ファイルの所有者やパーミッションを確認してください。

munin_update プラグインも、同様に動作確認します。

# /usr/sbin/munin-run munin_update
localhost_localdomain.value 20.71
node1.value 49.77
node2.value 10.43
node3.value 20.96
www.value 38.01

ノード毎に、処理にかかった秒数が表示されます。

最後に munin-node を再起動して、設定を有効にします。

# /sbin/service munin-node restart

あとはグラフに反映されるまで待ちましょう。

※2013/07/03 21:52 追記。@namikawa さんからツッコミをいただきました、「重い」について補足させてください。ご指摘いただいたように、純粋に munin_upate による処理に時間がかかることと、Munin の稼働するサーバが重いこと、描画する画面表示が重いことは、直接はイコールではありません。ご指摘ありがとうございました。色々皆様からツッコミ、お待ちしておりますm(__)m