2011年8月3日水曜日

muninで独自プラグインを作成

どうも、俺@終業前です。

今日はmuninで独自のデータを取得する方法についてめもめも。
すごく簡単です。
例としてDB(MySQL)からとあるテーブル(fooテーブルとbarテーブル)の総件数をロギングしたいと思います。

まずmuninのプラグインのあるディレクトリに実行ファイルを作成します。
このファイルはシェルスクリプトでもphpスクリプトでも何でも構いません。決められた引数に対して決められた値を返せれば良いです。
yumでインストールした場合は、/usr/share/munin/plugins 以下になります。
# cd /usr/share/munin/plugins
# vim table_count
当然このファイルには実行権限を付けておいてください。
# chmod +x table_count

基本的には
1)引数「config」を与えられたときに値を返す(グラフ情報)
2)引数なしで実行されたときに値を返す(実際の値)
のように作成します。
他にも引数はいくつかありますが、特にMuninプラグインの作り方:ククログに詳しく書かれてありましたので参考にしてください。

引数「autoconf」と引数「suggest」についてとても参考になりました。
今回はこれらは割愛します。

まず引数「config」の時の処理を書きます。
# vim table_count
----------------------------------------
#!/bin/sh

if [ "$1" = "config" ]; then
  echo 'graph_title table count' # グラフのタイトル。
  echo 'graph_args --base 1000 -l 0' # 何も気にせず書く。
  echo 'graph_vlabel adfit_database_info' # グラフのラベル。y軸のとこに出ます。
  echo 'graph_category other' # グラフのカテゴリ。一覧のHTMLで表示されるカテゴリ。DiskとかNetworkとかOtherとかProcessesとかのやつ。
  echo 'graph_info Database data info.' # グラフの情報。詳細ページの下の方に出る。

  echo 'foo.label total foo' # fooテーブルの件数についてのラベル。
  echo 'foo.draw LINE2' # 線グラフという意。他にもAREAやSTACKがある、らしい。
  echo 'foo.info total foo table count.' # ラベルfooに対する説明。

  echo 'bar.label bar table count' # barテーブルの件数についてのラベル。
  echo 'bar.draw LINE2' # 線グラフという意。他にもAREAやSTACKがある、らしい。
  echo 'bar.info total bar table count.' # ラベルfooに対する説明。
  exit 0
fi

引き続き、引数なしで実行された時の処理を書きます。
# vim table_count
----------------------------------
echo -n "foo.value "
/path/to/mysql databasename -u username -e 'SELECT COUNT(*) FROM foo' | awk 'NR==4 { print }' | sed -e "s/ //g"

echo -n "bar.value "
/path/to/mysql databasename -u username -e 'SELECT COUNT(*) FROM bar' | awk 'NR==4 { print }' | sed -e "s/ //g"
かなりぶきっちょな書き方ですみません。もっとスマートな方法あるかも知れません。

これを実行プラグインのシンボリックリンクがあるディレクトリに、同じくシンボリックリンクを貼ります。
yumでインストールした場合は、/etc/munin/plugins になります。
# ln -s /usr/share/munin/plugins/table_count /etc/munin/plugins

最後にmunin-nodeを再起動して完了です。
# /etc/init.d/munin-node restart


これでグラフが描画されるはずです。
以上でぇぇぇぇぇぇぇぇす。