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>

以上の設定で、見たい時だけグラフが描画されます。エコですね。