システム

Muninで監視 設定編

2009.05.21

カテゴリー >

タグ > ,

今回は、前回インストールした Munin の設定をあれこれいじってみます。

Muninの構造

munin-node デーモンは監視側からの計測要求を受けると、各種の計測を行う小さなプログラム (Munin プラグイン)を実行し、その結果を送り返します。
Munin プラグインは、CentOS で yum からインストールした場合には /etc/munin/plugins ディレクトリに配置されます。
FreeBSD で Ports からインストールしたときは /usr/local/etc/munin/plugins です。

まずはプラグインディレクトリを覗いてみましょう。(CentOSの例)

# ls -l /etc/munin/plugins
合計 0K
lrwxrwxrwx 1 root root 28  *月 ** **:** cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root 27  *月 ** **:** df -> /usr/share/munin/plugins/df
lrwxrwxrwx 1 root root 33  *月 ** **:** df_inode -> /usr/share/munin/plugins/df_inode
lrwxrwxrwx 1 root root 32  *月 ** **:** entropy -> /usr/share/munin/plugins/entropy
lrwxrwxrwx 1 root root 30  *月 ** **:** forks -> /usr/share/munin/plugins/forks
lrwxrwxrwx 1 root root 32  *月 ** **:** if_err_eth0 -> /usr/share/munin/plugins/if_err_
lrwxrwxrwx 1 root root 32  *月 ** **:** if_err_eth1 -> /usr/share/munin/plugins/if_err_
...

中身はシンボリックリンクばかり、どれも同じディレクトリ(/usr/share/munin/plugins)にあるファイルを参照しています。

実は、標準添付の Munin プラグインの実体はすべて /usr/share/munin/plugins ディレクトリにインストールされていて /etc/munin/plugins には作動させたいプラグインへのシンボリックリンクを置く、という仕組みになっています。

ほとんどのシンボリックリンクは実体のファイルと同じ名前で作られています。
実体のファイル名がアンダースコアで終わっているもの(if_err_, if_ など)は、何かがプラグインファイル名に くっついた名前でシンボリックリンクが作られていますが、これは、監視対象(ネットワークデバイスなど)を 連結した名前でシンボリックリンクを作成することで、ひとつのプラグインが複数の監視対象を別々にグラフ化する 場合に用いられる方法です。

最初に Munin をインストールしたままの状態だと、ケーブルがささっていないネットワークデバイスなど、監視の 必要がないものまでグラフ化されているはずです。

そこで、まず不要なプラグインを外していくところから始めてみます。
今回は eth0 以外のネットワークデバイスと、MTA に Postfix を採用しているので監視の必要がない Sendmail 関連の プラグインを外していきます。
と言っても、作業はシンボリックリンクを削除するだけです。

# rm /etc/munin/plugins/if_err_eth[12] /etc/munin/plugins/if_eth[12]
# rm /etc/munin/plugins/if_err_eth[12] /etc/munin/plugins/if_eth[12]
# rm /etc/munin/plugins/sendmail_*

munin-node の設定を変更したときは、稼働中の munin-node を再起動するまでは設定内容が反映されません。 忘れずに再起動しておきましょう。

# /etc/init.d/munin-node restart
Stopping Munin Node agents:                                [  OK  ]
Starting Munin Node:                                       [  OK  ]

少し待ってからブラウザで Munin の出力を見てみると、グラフの数が少なくなっているのが確認できます。

次に、新しいプラグインを導入してみましょう。
今回は Apache、MySQL、Postfix を監視するプラグインを追加してみます。
と言っても、削除と同様にシンボリックリンクを作成するだけです。

#ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
#ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
#ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
#ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes
#ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
#ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads
#ln -s /usr/share/munin/plugins/postfix_mailqueue /etc/munin/plugins/postfix_mailqueue
#ln -s /usr/share/munin/plugins/postfix_mailstats /etc/munin/plugins/postfix_mailstats
#ln -s /usr/share/munin/plugins/postfix_mailvolume /etc/munin/plugins/postfix_mailvolume

忘れずに munin-node を再起動して、少し待ってからグラフを見てみましょう。
プラグインを追加した分だけ、グラフが増えているのが確認できます。

/usr/share/munin/plugins ディレクトリの中を見てみると、ほかにもいろいろ役に立ちそうなプラグインが 見つかると思います。

グラフが出ないときは

もしかすると、書いてある通りに設定してもグラフに何も出てこない!!とお怒りの方がいるかもしれません。
そこで、そのような場合の対処法についても説明します。

まず、グラフのタイトルだけが表示されていて画像が出てこない場合ですが、これは munin-node がプラグインの 実行中にコケて何も返せなかった状態が考えられます。
通常インストールした状態で運用されていれば、/var/log 以下のどこかに munin-node のログファイルが 作成されているはずなので、そちらをあたってみるのが解決の近道です。

次に、グラフの画像は表示されているのに、数字がすべて非数(NaN)になっているケースがあります。
これは、Munin プラグインの実行は正常に完了していても、有効な計測値が得られていない状態が考えられます。
こちらのケースについても、munin-node のログファイルに解決のヒントがあるはずです。

もっともこれだけでは不親切なので、先ほど追加したプラグインを導入したときに起こりそうなトラブルについて 解決方法を紹介しておきます。

1.Apache の場合

Apache を監視するプラグインは、実は Apache の mod_status モジュールにアクセスし、結果を返す仕組みに なっています。
Apache をインストールしたときに、この mod_status が組み込まれていなかったり、組み込まれていても アクセスが拒否されていたり、Munin プラグインが期待する情報を返していないと、munin-node が値を返せない 状態になります。

Apache の設定を確認して、1)mod_status モジュールが組み込まれていること、2)localhost(127.0.0.1)から /server-status へのアクセスを許可していること、3)ExtendedStatus ディレクティブが On に設定されていること、 を確認してみてください。

2.MySQL の場合

MySQL を監視するプラグインは、mysqladmin コマンド経由で実際に MySQL データベースに接続して情報を取得します。
このとき、mysqladmin コマンドに PATH が通っていなかったり、MySQL の root ユーザーにパスワードが設定されて いたりすると、Munin プラグインは情報を取得することが出来ません。

実は、/etc/munin/plugin-conf.d ディレクトリ以下に Munin プラグインの設定ファイルがあり、ここに設定を記述 しておくことで、プラグインに実行時オプションを渡すことができます。
※FreeBSD の場合は /usr/local/etc/munin/plugin-conf.d ディレクトリ
※設定ファイル名はOS環境によって異なります。各自の環境で確認してみてください。

以下は mysql のプラグインについての設定例です。
mysqladmin コマンドがインストールされているパスと、MySQL ユーザー名とパスワードをそれぞれ設定しています。

[mysql*]
env.mysqladmin /usr/local/bin/mysqladmin
env.mysqlopts --user=muni --password=hogehoge

1行目で、設定を適用するプラグインをmysqlで始まる名前のプラグインに限定しています。
2行目以下は Munin プラグインに環境変数を渡すときの書き方です。mysqladmin と mysqlopts という環境変数を セットしています。

3.Postfix の場合

Postfix を監視する Munin プラグインは、実は /var/log 以下にあるログファイルを解析して、その 結果を返すようになっています。
munin-node は一般ユーザー権限でプラグインを実行するため、ログファイルへのアクセスにroot権限が ないと必要な場合には結果を返すことができません。

この場合も、munin-node の設定変更によって問題を解決できます。
MySQL のときと同じように、プラグインの設定ファイルに以下の設定を書き加えます。

[postfix*]
user root
env.logdir /var/log
env.logfile maillog

1行目で、以下の設定の適用範囲を"postfix"で始まる名前のプラグインに限定しています。
2行目では munin-node がプラグインを実行するときのユーザーを指定しています。
3行目以下ではプラグインが参照するログファイルが置かれているディレクトリとログファイル名を指定しています。

このように各プラグインの設定を行い、最後に munin-node を再起動すれば、今度こそグラフが見られるように なっているはずです。

もし他にこのような問題に遭遇したときは、プラグインのソースコードを読んでみてください。
大抵は Perl で書かれた小さなプログラムです。
各プラグインが参照する環境変数についても、ソースの冒頭でコメントしてあるはずです。

また、いちいちグラフが更新するまで待たないと設定を確認できない、というのは非常に不便ですが そういうときのために、munin-run コマンドが用意されています。
下記のようにプラグインの名前を引数で渡すと、指定したプラグインを実行してくれます。

# munin-run apache_access
accesses80.value 182410

もっとプラグインを増やしたいときは

標準添付のほかに、色々なプラグインを集めた MuninExchange というサイトがあります。
MuninExchange http://muninexchange.projects.linpro.no/

"Search"をクリックして検索画面を開き、カテゴリーと対象のOSを選ぶとプラグイン名の一覧が出てきます。
一覧からプラグインを1つ選ぶと、簡単な紹介とグラフのサンプル、コメントが見えます。
気に入ったプラグインがあったらダウンロードしてみてください。

社内では、この中から apache_activity、mysql_qcache、 mysql_qcache_mem、passenger_status、memcached 系の各種プラグイン などを追加しています。

このあと更に続きます。

トラックバック> http://www.oro.co.jp/mt/mt-tb.cgi/269

コメントを投稿

コメント投稿フォーム

ページ先頭へ戻る

  • デザイン
  • Flash
  • システム
  • フロントエンド
Web Creator Tips
システムについて

オロのWebシステムチームスタッフによる、Web開発に関するノウハウやTIPSを紹介するコラムです。