munin: Linuxの状態を監視してグラフ化する

munin


さて、しばらく前から家庭内Linuxサーバーのセットアップを続けているわけですが、無いと困る必須の機能はひととおり設定できました。

これからはサーバーのチューニングも含めて設定していきますので、まずはその効果がわかるよう、パフォーマンス記録ツールを導入しておきましょう。

この方面での定番ソフトも多数ありますが、その多くに共通するのはRRDToolをバックエンドに供えているということですね。RRDToolをキーワードにググったり、リポジトリを眺めてみたりすると、幾つかのソフトが見付かります。私は、そのなかでも、拡張性が高く、自分で計測項目を増やすプラグインを簡単に書ける munin がお気に入りです。

というわけで、今日は、そのmuninセットアップを行ないました。

インストール

muninはCentOSの公式リポジトリには入っていませんが、rpmforgeのリポジトリには含まれています。

muninは、複数のマシンをまとめて監視できる構造になっていて、監視対象となるマシン上で実際のデータの取得を行なうデーモンのパッケージ(munin-node)と、その結果をまとめて集計しグラフ化するプログラムのパッケージ(munin)に分かれています。独立した1台のマシンで使う場合は両方ともをインストールしておく必要があります。

ちなみに、私の環境では、以前書いたようにrpmforgeのリポジトリをデフォルトで無効にしているので、yum install に --enablerepo=rpmforge を付ける必要があります。また、yum-updatesd が起動していると邪魔になることがあるので、インストール中は一時停止させておきました。

# /sbin/service yum-updatesd stop
Stopping yum-updatesd:                                     [  OK  ]
# yum install --enablerepo=rpmforge munin munin-node
Loading "installonlyn" plugin
(中略)
=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing:
 munin                   noarch     1.2.5-1.el5.rf   rpmforge          128 k
 munin-node              noarch     1.2.5-1.el5.rf   rpmforge          148 k
Installing for dependencies:
 perl-Crypt-DES          i386       2.05-3.2.el5.rf  rpmforge           37 k
 perl-DateManip          noarch     5.44-1.2.1       base              144 k
 perl-HTML-Template      noarch     2.9-1.el5.rf     rpmforge           62 k
 perl-Net-SNMP           noarch     5.2.0-1.2.el5.rf  rpmforge           96 k
 perl-Net-Server         noarch     0.97-1.el5.rf    rpmforge          157 k
 perl-rrdtool            i386       1.2.23-1.el5.rf  rpmforge           49 k
 rrdtool                 i386       1.2.23-1.el5.rf  rpmforge          933 k
 sysstat                 i386       7.0.2-1.el5      base              168 k

Transaction Summary
=============================================================================
Install     10 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 1.6 M
(中略)
Complete!
# /sbin/service yum-updatesd start
Starting yum-updatesd:                                     [  OK  ]

設定

munin は全ての計測項目がプラグインとして実装されています。

munin-nodeのインストール時に、マシンの状態がチェックされて、計測出来そうなプラグインは一通り勝手に設定されていますので、適当に使うだけなら特に設定は必要ありません。

計測される項目のリスト、つまり、起動されるプラグインのリストは /etc/munin/plugins/ ディレクトリの中にあります。ここには、起動されるべきプラグインへのシンボリックリンクが収められていて、munin-nodeのデーモンはここに列挙されている物を全部端から実行します。なので、プラグインの追加や削除を行ないたい場合は、このディレクトリの中のシンボリックリンクを弄ればいいわけですね。

プラグインに引数を渡す方法は2つあります。一つは、シンボリックリンクの名前に含めてしまう方法で、例えば、Network I/F のプラグインは、実体は if_ という名前ですが、シンボリックリンクの名前を if_eth0 などとすることで、プラグインに eth0 を計測するように伝えています。なので、ファイル名には要注意です。

もう一つは /etc/munin/plugins.conf に記述する方法で、特定のプラグインをrootで動かしたり、環境変数として特定の値をセットさせたりすることが出来ます。

他にも、グラフ作成時用のconfigファイルなどもありますが、単一ホストで使っている限りは設定不要でしょう。

munin-node デーモンの起動

munin-node サービスは、インストール時にはoffになっているので、例によって chkconfig & service で起動させます。

# /sbin/chkconfig --list munin-node
munin-node     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
# /sbin/chkconfig munin-node on
# /sbin/chkconfig --list munin-node
munin-node     	0:off	1:off	2:on	3:on	4:on	5:on	6:off
# /sbin/service munin-node start
Starting Munin Node:                                       [  OK  ]

グラフを作成する munin-cron の方は、 /etc/cron.d/munin の方に設定されているので、あとは5分おきに記録が取られて、グラフが作成されるはずです。

rpmforge リポジトリの問題の修正

多分、rpmforgeでのパッケージングのバグだと思うのですが、私がインストールしたmuninパッケージには問題があり、そのままでは正常に動作しませんでした。

HTMLやグラフ画像の出力先のディレクトリとして設定されている /var/www/html/munin/ が生成されていないのです。その親のディレクトリのオーナーはrootですし、画像を出力する munin-cron はユーザーアカウントで実行されるので、このままではグラフが出力できません。

rpmのspecファイルを覗いて見たところ、パッケージング中に小細工しようとして失敗しちゃってるような気がします。というわけで、その修正をします。

対策のしかたはおおきく分けて2通りあります。

  1. htmlの出力を /var/www/html/munin/ に出せるようにする
  2. htmlの出力もCGIと同じ /var/www/munin/ に出すようにする。

とりあえず、私は、セキュリティ的に良さそうな前者で設定しました。

# mkdir /var/www/html/munin
# chown munin:munin /var/www/html/munin
# vi /etc/httpd/conf.d/munin.conf
 ( /var/www/munin/ を /var/www/html/munin/ に書き換え)

(うーん。これはrpmforgeの中の人にフィードバックしとくべきだなぁ……。)

出来たグラフを確認する

集計結果は /var/www/html/munin/ 以下にhtmlとpngで出力されます。

httpd用の設定もされていて、http://(Linuxサーバー)/munin/ でアクセスできるようになっています。

ただし、CentOSは(例えhttpdがインストールされていても)デフォルトで起動するようにはなっていないので、起動するように chkconfig & service しておきます。

# /sbin/chkconfig --list httpd
httpd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off
# /sbin/chkconfig httpd on
# /sbin/chkconfig --list httpd
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
# /sbin/service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]

あとは、適当なブラウザでアクセスしてみて、グラフが見えれば動作確認完了です。

さらに調整

これで、「とりあえず動いた」という状態にはなりました。

現状では、デフォルトでは余計なプラグインも動いてますし、逆に追加で動かしたいプラグインもあります。それに、CGI化といったこともやっておきたいところですね。今度時間があるときに、じっくり詰めることにしましょう。

(2008-07-01追記: muninのプラグインの追加/削除 - 玉虫色に染まれ!)