はじめに
お手軽で便利なモニタリングツールのmuninですが、セットアップが簡単で見た目も重くなさそうなので、小規模なプロダクト(サーバ)では比較的使っているケースが多いかと思われます。
ただ、実はこの子そのままだとリソースばっかり食ってしまってどうしようもないんですよね。
5分おきにグラフを生成したりするので、言い換えれば5分おきにPerlのバッチ処理が走る事になります。
しかもその処理にはシステム情報を取るスクリプトも含まれているので、色々巻き込んで大変なことに。
EC2のt1.microインスタンスあたりでは、こいつだけでCPUもメモリもほぼ100%食いつぶすなんてこともあります。
なので、ここで簡単にできるチューニングをまとめます。
手順1. 実行間隔の調整
muninは/etc/cron.d/muninで定義した通りにcronで実行されます。
デフォルトでは以下の通りです。
# vi /etc/cron.d/munin
#
# cron-jobs for munin
#
MAILTO=root
*/5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron
/usr/bin/munin-cronは、引数を特に与えなければ/usr/bin/munin-update(各データを取得する)と/usr/bin/munin-graph(各データのグラフを生成する)と/usr/bin/munin-html(muninのページ全体を更新する)の3つを順次実行します。
つまり、デフォルトのままでは、バカ正直に上記3つを5分毎に繰り返しているということになります。
munin-updateはともかくとして、munin-graphは別にさほど急いで更新されなくても問題ないケースが大半です。
ましてmunin-htmlなど1日1回も更新すれば十分なので、ここは3つそれぞれ分離してしまいましょう。
そうすると、こんな感じです。
# vi /etc/cron.d/munin
MAILTO=root
*/5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-update
10 */1 * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-graph
30 08 * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-html
なお、1時間おきにする場合は、なるだけ00分などlogrotateやその他cronとバッティングしないように調整しましょう。
グラフ生成は比較的負荷がかかります。
手順2. 不要なプラグインを外す
munin-node-configureという便利ツールを使用すると、プラグインを自動的にインストールしてくれます。
これはほんとうに便利なんですが、例えば「NTPなんて見ないよ!」「mysqlはRDSにしちゃったし他で管理するからいいや!」なんてことになった時に意外と外すのを忘れがちです。
プラグインは以下の場所にあります。
# ls -l /etc/munin/plugins
lrwxrwxrwx 1 root root 40 1月 28 19:54 2013 apache_accesses -> /usr/share/munin/plugins/apache_accesses
/usr/share/munin/plugins/uptime
lrwxrwxrwx 1 root root 31 1月 23 18:13 2013 vmstat -> /usr/share/munin/plugins/vmstat
外し方は簡単で、このシンボリックリンクをrmコマンドで削除してmunin-nodeを再起動するだけです。
これだけでもmunin-updateやmunin-graphを実行する際の負荷がかなり変わります。
手順3. 外部連携を極力なくす
設定していないことも多いと思われますが、muninはlocalホスト以外にも外部のmunin-nodeの生成したデータを参照することが可能です。
しかしこれは便利な一方で参照する側・される側両方の負荷の温床にもなります。
停止したサーバや関係のなくなったサーバの設定は逐次/etc/munin/munin.confから削除しましょう!
手順4. Perlをアップデートする
muninの大半の部分はPerlで書かれています。
Perlは大分枯れて安定している言語ですが、今でもちょくちょくアップデートが配信されています。
Perlのアップデートでパフォーマンスが上がることも考えられるので、ぜひアップデートしておきましょう!
※ muninもPerlもyumなどのパッケージでインストールしていれば基本的に問題ありませんが、依存性に十分ご注意ください。
muninは時代遅れと言われることはありますが、お手軽かつ比較的信頼性の高いツールなのでまだまだ現役張っていけると思います。
中身をイジイジすることも簡単にできるので、そっちのチューニングにも今後手を伸ばしてみたいとおもいます。