share facebook facebook2 twitter menu hatena pocket slack

2013.01.25 FRI

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

鈴木 宏康

WRITTEN BY鈴木 宏康

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に対応していませんでした。

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

鈴木 宏康

鈴木 宏康

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