2013年1月24日木曜日

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に対応してなかった...
--------
http://www.suz-lab.com

0 コメント: