主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

Munin の Plugin を作成する

最終更新日 2007-05-14 07:26:49 (1年以上前の記事です)

Munin のプラグインを作ると言っても、単純な文字列と数値を出力するスクリプトを作成するだけでとても簡単です。
スクリプトは bash だろうが perl だろうが、 C 言語でも別に構わないので、好きな言語で作れる。
とりあえず、マザーと CPU の温度を表示するプラグインを作ってみた。
インストールの仕方や基本設定はCentOS に Munin をインストールするMunin を Debian にインストールするMunin のグラフ(plugin)の種類を変えるを参考。

Munin の plugin の仕様

Munin のプラグインは /usr/share/munin/plugins/ に置かれていて

$ ls /usr/share/munin/plugins

を実行すれば全プラグインが確認できる。
仕様といっても大した事ないと思う。作成するプログラムは、 autoconf や config といったパラメータ応じて必要な文字列を出力するように作成すればいい。一番分かりやすいのは、実際に既存のプラグインを実行してみることだと思う。例えばプロセス数をグラフするプラグイン processes を実行すると、

# /usr/share/munin/plugins/processes autoconf
yes
# /usr/share/munin/plugins/processes config
graph_title Number of Processes
graph_args --base 1000 -l 0
graph_vlabel number of processes
graph_category processes
graph_info This graph shows the number of processes in the system.
processes.label processes
processes.draw LINE2
processes.info The current number of processes.
# /usr/share/munin/plugins/processes
processes.value 102
という感じで結果が表示される。ここで一つ一つのパラメータを整理しておきます。

autoconf

このプラグインがこのシステムで利用可能かを示す yes か no を出力パラメータだと思う。このプログラムが必要なコマンドやファイルがそろっているかを確認して yes or no を返す。

config

munin-node によって初めに読み込まれて、このグラフの説明やグラフ表示に必要なデータ項目の設定が出力される。上記の processes の例でメモっておく。

graph_title Number of Processes

グラフのタイトルを指定する。

graph_args --base 1000 -l 0

おまじないみたいなもんだと思ってください。

graph_vlabel number of processes

グラフのラベルを指定する。

graph_category processes

HTML の目次で表示されるカテゴリを指定する。

graph_info This graph shows the number of processes in the system.

グラフの説明を指定する。

processes.label processes

項目 processes のラベルを指定する。

processes.draw LINE2

項目 processes のグラフの形状を指定する。 LINE2 は線グラフ。領域を塗りつぶしたい場合は AREA を指定したり、複数の項目を含んだグラフで AREA に追加して表示されたいときは STACK を指定できたりする。

processes.info The current number of processes.

項目 processes の説明を指定する。

その他にもいくつも定義できる項目がありますが、作成したいグラフのイメージに近いプラグインを見れば簡単に理解できると思います。

ノーパラメータ

何も引数を指定しないで実行したときには、各項目の値が表示されます。このコマンドが munin によって 5 分間隔で実行されます。

processes.value 102

processes 項目の値が 102 であることを指定します。この 102 の値が毎回変わりグラフが作成されていくわけです。

温度グラフの作成

今回は sensors コマンドで得られる結果の以下の部分を使って 3 つの項目を含むグラフを作ってみました。
$ sensors
it87-isa-0290
Adapter: ISA adapter
VCore 1:   +1.54 V  (min =  +1.42 V, max =  +1.57 V)
VCore 2:   +1.94 V  (min =  +2.40 V, max =  +2.61 V)   ALARM
+3.3V:     +6.62 V  (min =  +3.14 V, max =  +3.46 V)   ALARM
+5V:       +4.95 V  (min =  +4.76 V, max =  +5.24 V)
+12V:     +11.39 V  (min = +11.39 V, max = +12.61 V)   ALARM
-12V:     -19.63 V  (min = -12.63 V, max = -11.41 V)   ALARM
-5V:       -8.51 V  (min =  -5.26 V, max =  -4.77 V)   ALARM
Stdby:     +5.03 V  (min =  +4.76 V, max =  +5.24 V)
VBat:      +0.00 V
fan1:     3125 RPM  (min =    0 RPM, div = 8)
fan2:        0 RPM  (min = 3013 RPM, div = 8)          ALARM
fan3:        0 RPM  (min = 3013 RPM, div = 8)
M/B Temp:    +48°C  (low  =   +15°C, high =   +40°C)   sensor = thermistor
CPU Temp:    +25°C  (low  =   +15°C, high =   +45°C)   sensor = thermistor
Temp3:       +35°C  (low  =   +15°C, high =   +45°C)   sensor = diode

eeprom-i2c-0-51
Adapter: SiS96x SMBus adapter at 0x1400
Memory type:            DDR SDRAM DIMM
Memory size (MB):       512

eeprom-i2c-0-50
Adapter: SiS96x SMBus adapter at 0x1400
Memory type:            DDR SDRAM DIMM
Memory size (MB):       256
で bash で作ったプラグインは以下のような感じ。
#!/bin/sh

if [ "$1" = "autoconf" ]; then
        if [ -x /usr/bin/sensors ]; then
                echo yes
                exit 0
        else
                echo no
                exit 1
        fi
fi

if [ "$1" = "config" ]; then

        MBWARNING=40
        CPUWARNING=45
        TEMP3WARNING=45

        echo 'graph_title Temperature'
        echo "graph_order mb cpu temp3"
        echo "graph_args --base 1000 -l 0"
        echo 'graph_vlabel C'
        echo 'graph_info This graph shows Temperature'
        echo 'graph_category system'

        echo 'mb.label M/B'
        echo 'mb.draw LINE2'
        echo "mb.warning $MBWARNING"
        echo "mb.info Mother Board temperature"

        echo 'cpu.label CPU'
        echo 'cpu.draw LINE2'
        echo "cpu.warning $CPUWARNING"
        echo "cpu.info CPU temperature"

        echo 'temp3.label Temp3'
        echo 'temp3.draw LINE2'
        echo "temp3.warning $TEMP3WARNING"
        echo "temp3.info Temp3, which I dont know, temperature"

        exit 0
fi

        echo -n "mb.value "
        sensors | awk '/^M\/B/ {print $3}' | sed 's/\+\([0-9]\+\).*/\1/g'
        echo -n "cpu.value "
        sensors | awk '/^CPU Temp/ {print $3}' | sed 's/\+\([0-9]\+\).*/\1/g'
        echo -n "temp3.value "
        sensors | awk '/^Temp3/ {print $2}' | sed 's/\+\([0-9]\+\).*/\1/g'
上記で新しく出てきた設定項目は、 graph_order と各項目の warning 項目です。

graph_order mb cpu temp

各項目のグラフの表示順を指定します。上記の順だとグラフが交差した際には temp が一番前面に表示されることになります。また、グラフの種類 (draw) が AREA だったり STACK したときには特にこの順序に注意が必要です。

cpu.warning $TEMP3WARNING

これはグラフ上にある値を超えたらワーニングメッセージを表示することを指定します。 CPU の温度が 45 を超えたらメッセージが表示されます。

で、できた画像が以下のような感じです。最初失敗したんでちょっと変ですが、まあ納得いく感じです。
Munin temperature daily image

最終更新日 2007-05-14 07:26:49

コメント このエントリーをはてなブックマークに追加

フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank1, rank2, rank3, rank7, rank9, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google