share facebook facebook2 twitter menu hatena pocket slack

2013.01.25 FRI

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

鈴木 宏康

WRITTEN BY鈴木 宏康

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]}で取得することができます。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。