2013年1月24日木曜日

S3をチェック(Read/Write)するNagiosプラグイン

スズキです。

下記のように作ってみました。
# cat /usr/lib64/nagios/plugins/check_aws_s3
#!/bin/sh

. `dirname $0`/utils.sh

WARN=wrire
CRIT=read

while getopts c:w:b:t:f: OPTNAME; do
    case "$OPTNAME" in
    w)
        WARN="$OPTARG"
        ;;
    c)
        CRIT="$OPTARG"
        ;;
    b)
        BACKET="$OPTARG"
        ;;
    t)
        TEMP="$OPTARG"
        ;;
    f)
        FILE="$OPTARG"
        ;;
    *)
        echo "UNKNOWN: Usage"
        exit $STATE_UNKNOWN
        ;;
    esac
done

echo "s3 test" > $TEMP

s3cmd -c $FILE --no-progress put $PATH s3://$BACKET/ 2>&1 | logger -i -t ${0##*/}
WRITE_STATUS=${PIPESTATUS[0]}

s3cmd -c $FILE --no-progress --force get s3://$BACKET/`basename $TEMP` $TEMP 2>&1 | logger -i -t ${0##*/}
READ_STATUS=${PIPESTATUS[0]}

rm -rf $TEMP

if [ $CRIT = "read"  -a $READ_STATUS  -ne 0 ]; then
    echo "CRITICAL : Can't read  \"s3://$BACKET/"`basename $TEMP`"\"."
    exit $STATE_CRITICAL
fi
if [ $CRIT = "write" -a $WRITE_STATUS -ne 0 ]; then
    echo "CRITICAL : Can't write \"s3://$BACKET/"`basename $TEMP`"\"."
    exit $STATE_CRITICAL
fi
if [ $WARN = "read"  -a $READ_STATUS  -ne 0 ]; then
    echo "CRITICAL : Can't read  \"s3://$BACKET/"`basename $TEMP`"\"."
    exit $STATE_WARNING
fi
if [ $WARN = "write" -a $WRITE_STATUS -ne 0 ]; then
    echo "CRITICAL : Can't write \"s3://$BACKET/"`basename $TEMP`"\"."
    exit $STATE_WARNING
fi
if [ $WRITE_STATUS -eq 0 -a $READ_STATUS -eq 0 ]; then
    echo "OK : Can read/write \"s3://$BACKET/"`basename $TEMP`"\"."
    exit $STATE_OK
fi

echo "UNKNOWN: ?"
exit $STATE_UNKNOWN
※"s3cmd"が利用できる環境を前提としています。

単独では下記のように実行できます。
# ./check_aws_s3 -c read -w write -b www.suz-lab.com -t /tmp/s3-test.txt -f /tmp/s3cfg; echo $?
OK : Can read/write "s3://www.suz-lab.com/s3-test.txt".
0

オプションは次の通りです。
  • -c : CRITICALにする値
    • read : 読み取りができない
    • write : 書き込みができない
  • -w : CRITICALにする値 
    • read : 読み取りができない
    • write : 書き込みができない
  • -b : チェック用一時ファイルを置くバケット  
  • -t : チェック用一時ファイル
  • -f : 設定ファイル(パーミッションに注意)

当然、存在しないバケットを指定するとエラーになります。
# ./check_aws_s3 -c read -w write -b www.suz-lab.com2 -t /tmp/s3-test.txt -f /tmp/s3cfg; echo $?
CRITICAL : Can't read  "s3://www.suz-lab.com2/s3-test.txt".
2

Nagiosへの設定は下記のような感じになります。
# cat /etc/nagios/objects/commands.cfg
...
# 'check_aws_s3' command definition
define command{
    command_name    check_aws_s3
    command_line    $USER1$/check_aws_s3 -w $ARG1$ -c $ARG2$ -b $ARG3$ -t $ARG4$ -f /tmp/s3cfg
}
...
# cat /etc/nagios/objects/localhost.cfg
...
define service{
    use                         local-service
    host_name                   localhost
    service_description         AWS_S3
    check_command               check_aws_s3!write!read!www.suz-lab.com!/tmp/s3-test.txt!
    notifications_enabled       0
}
...

Nagiosを再起動すると下記のようにWebのUIで確認することができます。


パイプでつないだ最初のコマンドのステータスコードは${PIPESTATUS[0]}で取得できます...
--------
http://www.suz-lab.com

0 コメント: