よくわからないエンジニア

よく分からないエンジニア(無音鈴鹿)の日々の記録

よくわからないエンジニア

Xymonの監視スクリプトを自作する(ファイルサイズ)

すごい久しぶりにXymonについて書きます。
内容はタイトルそのままです。

目次

自作スクリプトについて

Xymon Clientはデフォルトでも十分使えますが、自分の環境によって多少イレギュラーな監視が必要な際に自作でスクリプトを作れます。
下のサイトで丁寧に解説がありますが、基本この通りやれば自作の監視スクリプトが作れます。こちらは特定のファイルがあった場合に、ファイルの中身を送信する監視っぽいです。

Xymon監視

当方環境では特定のファイルが肥大している場合にアラートで教えて欲しいという要望があったので、自作することにしました。

ファイルサイズ監視スクリプトの作成

要件としてはこんな感じで作ります。

  • 監視対象は/tmp/test
  • 1Gbyte超えたらYellow、2Gbyte超えたらRed、3Gbyte超えたらファイルを削除
  • 実行は5分に一回実行

/tmp/testの監視

まずはXymonに通知する機能だけをサイトから抜き出します。
実行ファイルは/usr/lib/xymon/client/ext/以下に作成します。各自環境で異なるかもや。。

#!/bin/sh

COLUMN=filesize
COLOR=green
MSG="File size status:"

# Tell Xymon about it
$BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date`

${MSG}
"

exit 0

これだけでとりあえずXymonの監視項目としては機能しそうです。
後はファイルサイズを取得して、ファイルサイズによってステータスとメッセージを分岐する機能を書きます。

#!/bin/sh

COLUMN=filesize
COLOR=green
MSG="File size :"
CHECKFILE="/tmp/test"

if test -f $CHECKFILE; then
  FILESIZE=$(wc -c < $CHECKFILE)
  FILESIZE=`expr $FILESIZE`
  if test $FILESIZE -ge 3096000000 ; then
    rm -rf $CHECKFILE
    COLOR=clear
    MSG="${MSG}
         file delete.
        "
  elif test $FILESIZE -ge 2048000000 ; then
    COLOR=red
    MSG="${MSG}
         ${FILESIZE}
        "
  elif test $FILESIZE -ge 1024000000 ; then
    COLOR=yellow
    MSG="${MSG}
         ${FILESIZE}
        "
  else
    COLOR=green
    MSG="${MSG}
         ${FILESIZE}
        "
  fi
else
MSG="${MSG}

File not exist.
"
fi

# Tell Xymon about it
$BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date`

${MSG}
"

exit 0

作成したら、権限と所有者を変更しておいて下さい。

# chown xymon:xymon /usr/lib/xymon/client/ext/filesize.sh
# chmod 700 /usr/lib/xymon/client/ext/filesize.sh

実行

後は5分毎に実行させます。
/usr/lib/xymon/client/etc/clientlaunch.cfg に以下を追記します。

[filesize]
        ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
        CMD $XYMONCLIENTHOME/ext/filesize.sh
        LOGFILE $XYMONCLIENTHOME/logs/filesize.log
        INTERVAL 5m

INTERVALを変更すると実行間隔を変更出来ます。
うまく実行出来ない場合は、LOGFILEに指定した場所にlogが吐かれるのでそちらを参照ください。
※これでOKかと思ったんですが、当然ですけどファイル削除はXymonの権限で消せるファイルじゃないとPermitの関係でエラーでますね…