CloudWatchをチェック(Read/Write)するNagiosプラグインを下記のように作ってみました。
#!/bin/sh
. `dirname $0`/utils.sh
WARN=wrire
CRIT=read
while getopts c:w:n:r: OPTNAME; do
case "$OPTNAME" in
w)
WARN="$OPTARG"
;;
c)
CRIT="$OPTARG"
;;
n)
NAMESPACE="$OPTARG"
;;
r)
REGION="$OPTARG"
;;
*)
echo "UNKNOWN: Usage"
exit $STATE_UNKNOWN
;;
esac
done
aws --region=$REGION --output text
--endpoint-url=http://monitoring.$REGION.amazonaws.com
cloudwatch put-metric-data --namespace $NAMESPACE
--metric-data '{"metric_name":"CheckCount","value":1,"unit":"Count"}'
2>&1 | logger -i -t ${0##*/}
WRITE_STATUS=${PIPESTATUS[0]}
aws --region=$REGION --output text
--endpoint-url=http://monitoring.$REGION.amazonaws.com
cloudwatch get-metric-statistics --namespace $NAMESPACE
--metric-name CheckCount --statistics Sum --period 60
--start-time `date --iso-8601=seconds --date "5 minutes ago"`
--end-time `date --iso-8601=seconds`
2>&1 | logger -i -t ${0##*/}
READ_STATUS=${PIPESTATUS[0]}
if [ $CRIT = "read" -a $READ_STATUS -ne 0 ]; then
echo "CRITICAL : Can't read $NAMESPACE CheckCount ($REGION)."
exit $STATE_CRITICAL
fi
if [ $CRIT = "write" -a $WRITE_STATUS -ne 0 ]; then
echo "CRITICAL : Can't write $NAMESPACE CheckCount ($REGION)."
exit $STATE_CRITICAL
fi
if [ $WARN = "read" -a $READ_STATUS -ne 0 ]; then
echo "CRITICAL : Can't read $NAMESPACE CheckCount ($REGION)."
exit $STATE_WARNING
fi
if [ $WARN = "write" -a $WRITE_STATUS -ne 0 ]; then
echo "CRITICAL : Can't write $NAMESPACE CheckCount ($REGION)."
exit $STATE_WARNING
fi
if [ $WRITE_STATUS -eq 0 -a $READ_STATUS -eq 0 ]; then
echo "OK : Can read/write $NAMESPACE CheckCount ($REGION)."
exit $STATE_OK
fi
echo "UNKNOWN: ?"
exit $STATE_UNKNOWN
※Python版コマンドラインツールが利用できる環境を前提としています。
単独では下記のように実行できます
# ./check_aws_cloudwatch -c read -w write -n SUZ-LAB/TEST -r ap-northeast-1; echo $?
OK : Can read/write SUZ-LAB/TEST CheckCount (ap-northeast-1).
0
オプションは次の通りです。
- -c : CRITICALにする値
- read : 読み取りができない
- write : 書き込みができない
- -w : CRITICALにする値
- read : 読み取りができない
- write : 書き込みができない
- -n : ネームスペース
- -r : リージョン
当然ですが、存在しないバケットを指定するとエラーになります。
# ./check_aws_cloudwatch -c read -w write -n SUZ-LAB/TEST -r ap-northeast-2; echo $?
CRITICAL : Can't read SUZ-LAB/TEST CheckCount (ap-northeast-2).
2
Nagiosへの設定は下記のようになります。
# cat /etc/nagios/objects/commands.cfg
...
# 'check_aws_cloudwatch' command definition
define command{
command_name check_aws_cloudwatch
command_line $USER1$/check_aws_cloudwatch -w $ARG1$ -c $ARG2$ -n $ARG3$ -r $ARG4$
}
...
# cat /etc/nagios/objects/localhost.cfg
...
define service{
use local-service
host_name localhost
service_description AWS_CloudWatch
check_command check_aws_cloudwatch!write!read!SUZ-LAB/TEST!ap-northeast-1!
notifications_enabled 0
}
...
Nagiosを再起動すると、下記のようにWebのUIで確認することができます。
Python版コマンドラインツールは、まだSimpleDBに対応していませんでした。