munin: Linuxの状態を監視してグラフ化する
さて、しばらく前から家庭内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通りあります。
- htmlの出力を /var/www/html/munin/ に出せるようにする
- 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のプラグインの追加/削除 - 玉虫色に染まれ!)