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