muninのグラフを画面表示時に動的に生成
皆大好き?モニタリングツールMunin。インストールが簡単、豊富なプラグインは自作も割と手軽に出来ます。
数10台くらいのモニタリングならさほど気にならないんですが、数100台規模になるとmuninサーバーで目立ってくるのがmunin-graphの負荷。muninサーバーはデフォルトで5分に一度モニタリング対象のmunin-nodeからrrdのデータを取得して同時にグラフを生成するのですが、このグラフ生成が数100台分実行されるとひ弱なサーバーだとかなりの高負荷になります。
グラフが見たいといっても1時間に何度も見るものでもないし、同時に10ホスト分を見たりもあまりしないので結構効率が悪いです。ぶっちゃけ見たい時にグラフが見れればいいので何か方法無いか探してたところ、munin 1.4からグラフ表示時にfastcgiで動的に生成出来るようになってたのでやってみました。
サーバーのOSはCentOS4。CentOS5用のsrc.rpmをリビルドして利用しました。
munin バージョンは1.4.5-4。
※epel リポジトリにmuninもありますけど、バージョンが古いので使えません。(1.2.6-4)
こちらを参考: Munin graphing by CGI
今回はapacheを使いますが、↑ のhow toでは、lighttpdやnginxを使ったケースも紹介されています。
/etc/munin/munin.conf設定
cgiを利用するように設定します。今回はfastcgiを使いたいので以下の2設定
graph_strategy cgi
cgiurl_graph /cgi-bin/munin-fastcgi-graph
/usr/bin/munin-cron修正
munin-cronの内部でmunin-graphを呼び出してるんですが、こいつが負荷になるので修正します。本家手順でもmunin.confのgraph_strategy見て分岐した方がいいよね微妙みたいに書いてあります。下記該当部分をコメントアウト。
# nice /usr/share/munin/munin-graph --cron $@ 2>&1 |
# fgrep -v "*** attempt to put segment in horiz list twice"
munin関連ファイルの所有権設定
cgiの動作でapacheがファイルを読み書き出来るようにするため設定を変更します。本家手順ではwww-dataですが、CentOSのデフォルトはapacheなのでそこは読み替え、以下のコマンド。
sudo chgrp apache /usr/share/munin/munin-graph
sudo chgrp apache /var/log/munin /var/log/munin/munin-graph.log
sudo chmod g+w /var/log/munin /var/log/munin/munin-graph.log
sudo chgrp -R apache /var/www/html/munin/tnmt.info
sudo chmod -R g+w /var/www/html/munin/tnmt.info
tnmt.infoの部分は既に出来てるグラフのドメインです。
logrotateの設定変更
logrotateが走っても、/var/log/munin/munin-graph.log が apache で読み書きできるように設定。 /etc/logrotate.d/munin を編集
# change this:
/var/log/munin/munin-graph.log {
daily
missingok
rotate 7
compress
notifempty
create 640 munin adm # !!!
}
# to this:
/var/log/munin/munin-graph.log {
# [...]
create 660 munin apache # !!!
}
mod_fcgid
epelからインストール
sudo yum --enablerepo=epel install mod_fcgid
fastcgi用設定
/etc/httpd/conf.d/munin.conf をこんな風に設定しました。
ScriptAlias /cgi-bin/munin-fastcgi-graph /var/www/html/munin/cgi/munin-fastcgi-graph
<Location /cgi-bin/munin-fastcgi-graph>
SetHandler fcgid-script
</Location>
以上の設定で、見たい時だけグラフが描画されます。エコですね。