■Muninのプラグインとは?
Munin の画面は、様々なグラフで構成されています。これらのグラフを1つ1つ定義する単位が「プラグイン」です。プラグインそのものは、単純な値を返すスクリプトです。殆どが、シェルスクリプトや Perl で書かれている他、サードパーティ製のスクリプトには PHP のほか、Puthon や Ruby で書かれているものもあります。
■プラグインの設置と有効化・無効化
プラグインの設置場所は「/etc/munin/plugins/」です。このディレクトリ内に、実行可能なファイルがあれば、プラグインとして認識されます。パッケージで Munin をセットアップした場合、プラグインの実体は /usr/share/plugins/ にあり、/etc/munin/plugins/ にはシンボリックリンクが置かれます。
例えば Load Average を表示するプラグインは /etc/munin/plugins/load です。このファイルの実体は、/usr/share/munin/plugins です。
有効・無効にしたいときは、ファイルを /etc/munin/plugins/ に設置・削除した後、munin-node の再起動が必要です。
# /sbin/service munin-node restart
Apache や MySQL など、一部のプラグインの場合は設定ファイルの追記が必要な場合もあります。プラグイン用の設定ファイルは、/etc/munin/plugin-conf.d/ に置きます。一般的に /etc/munin/plugin-conf.d/munin-node に記述しますが、プラグイン毎にファイルを分けることも出来ます。
プラグインは、標準で配付の他に、有志によるサードパーティ製のプラグインが公開されています。これらのプラグインを利用するほか、必要があれば、自分でプラグインを書くことも出来ます。
■プラグインの動作テストとデバッグ
プラグインの動作確認を行うには、グラフが描画されるのを待つだけではありません。コマンドラインで試せる、2つの方法があります。1つはポート 4949 に nc や telnet で接続し、「fetch プラグイン名」を実行して、値が返るかどうか見る方法。もう1つは munin-run コマンドを使う方法です。
例えば Load Average の load プラグインのテストを行うには、次のように実行します。munin-run の引数に、プラグイン名 load を記述します。
$ /usr/sbin/munin-run load load.value 0.49
出力された結果が「プラグイン名.value 値」の形式であれば、正常です。もしエラーが出る場合はプラグインが正常に読み込まれず、グラフ描画も出来ません。ファイル設置のパーミッションが適切かどうかや、プラグイン(スクリプト)が正しいかどうか、確認します。
チェック時に役立つ munn-run の引数が ‘–debug’ オプションです。こちらをつけますと、より、詳細な情報が取得できます。
$ /usr/sbin/munin-run --debug load # Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node # Setting up environment # About to run '/etc/munin/plugins/load' load.value 0.49
グラフ描画に関する指定が適切かどうかを確認することもできます。その場合は、引数 ‘config’ を使います。
$ /usr/sbin/munin-run load config graph_title Load average graph_args --base 1000 -l 0 graph_vlabel load graph_scale no graph_category system load.label load graph_info The load average of the machine describes how many processes are in the run-queue (scheduled to run "immediately"). load.info 5 minute load average
■解説:load プラグイン
Load Average を表示する「 load 」プラグインを見てみましょう。load プラグインは、5 分間のロードアベレージ(サーバの平均負荷)を表示するものです。Munin が認識しているこのプラグインは /etc/munin/plugins/load ですが、実体は /usr/share/munin/plugins/load です。
スクリプトの末尾を参照しますと、プラグインが何を処理し、どのような値を表示するか分かります。
echo -n "load.value " cut -f2 -d' ' < /proc/loadavg
もう少し詳しく見ていきましょう。Munin が取得出来るのは、「プラグイン名.value 値」という書式のデータです。そのため、1行目の記述では echo コマンドを用いて「load.value 」を表示しています。’-n’ オプションは、改行コードを挿入しないという意味です。
2行目の「cut -f2 -d’ ‘ < /proc/loadavg」がロードアベレージを取得して、書式を整形している箇所です。「/proc/loadavg」がデータの参照元です。これは、cat でも参照する事ができます。
$ cat /proc/loadavg 0.93 0.49 0.38 2/128 24612
表示される値は、左から 1分・5分・15分あたりのロードアベレージです(正確には、実行キュー内またはディスク I/O 待ちのジョブ数です)。ロードアベレージは、サーバの処理状況を判断する指標の1つとして用いられますね。いわゆる、サーバが重い軽いと例えられるとき、この数値が客観的に用いられます。
なお、4番目の数字は、プロセスとスレッド数(カーネルスケジュールエンティティ = Kernel Scheduled Entities; KSE)のうち、スラッシュの左側は実行中、右側はシステム上に存在する数。この表示例では、システム上に 128 の KSE が存在し、うち 2 つが実行中であることがわかります。5番目の数字は、最新の PID です。詳細は、man proc を参照ください。
load プラグインは、/proc/loadavg の中でも、全てのデータを必要とはしていません。これが cut コマンドの役割です。’-f’ オプションは、参照するフィールドのデータを表示するモノです。’-f2’は、2つめのデータを表示するという意味ですので、左から2つめのデータ、すなわち 5 分間のロードアベレージを取得しています。また、’-d’ は区切り文字の指定です。 -d’ ‘ は、’ ‘(空白スペース)を区切りに用います。
以上の事から、先ほどの ‘munin-run load’ を実行した結果、すなわち ‘load’ プラグインが参照しているデータは、5分間あたりのロードアベレージであることがわかります。
$ /usr/sbin/munin-run load load.value 0.49
この表示結果では、ロードアベレージが ‘0.49’ であることが分かります。
もし、1分間のロードアベレージ値を取得したい場合は、’-f2′ の箇所を ‘-f1′ と書き換えます。’-f3′ としますと、15 分間のロードアベレージを取得出来ます。
…というプラグイン解説を、ゆるゆるやっていこうかなと思っています( ^ω^)