2013年3月27日水曜日

NagiosのCloudWatchプラグイン(Python版AWSコマンドラインツール版)

スズキです。

以前、下記のようにNagiosでCloudWatchのメトリックスを監視するプラグインを
作りましたが、
NagiosのCloudWatchプラグイン(PHP版)
次で紹介したようにPython版AWSコマンドラインツールが利用できるように
なったので、そちらを利用する形で作り直してみました。
Python版AWSコマンドラインツールでCloudWatchのメトリックス情報を取得

プラグインは下記のような感じです。
# cat check_cloudwatch 
#!/bin/sh

. `dirname $0`/utils.sh

set -e
trap 'echo "UNKNOWN: $?"; exit $STATE_UNKNOWN' ERR

WARN=0
CRIT=0
REVERSE=false

while getopts c:w:n:m:d:s:r OPTNAME; do
    case $OPTNAME in
    w)
        WARN=$OPTARG
        ;;
    c)
        CRIT=$OPTARG
        ;;
    n)
        NAMESPACE=$OPTARG
        ;;
    m)
        METRIC_NAME=$OPTARG
        ;;
    d)
        DIMENSIONS=$OPTARG
        ;;
    s)
        STATISTICS=$OPTARG
        ;;
    r)
        REVERSE=true
        ;;
    *)
        echo "UNKNOWN: Usage"
        exit $STATE_UNKNOWN
        ;;
    esac
done

START_TIME=`date -u -d '10 minutes ago' +%Y-%m-%dT%TZ`
END_TIME=`date -u +%Y-%m-%dT%TZ`

METRIC_DATA=`aws cloudwatch get-metric-statistics \
--namespace   $NAMESPACE   \
--metric-name $METRIC_NAME \
--dimensions  $DIMENSIONS  \
--statistics  $STATISTICS  \
--period      60           \
--start-time  $START_TIME  \
--end-time    $END_TIME    \
| jq ".Datapoints[0] | .$STATISTICS" \
| cut -d\" -f2`

if [ $REVERSE = "true" ]; then
    CRIT_STATUS=`echo "$METRIC_DATA < $CRIT" | bc`
    WARN_STATUS=`echo "$METRIC_DATA < $WARN" | bc`
else
    CRIT_STATUS=`echo "$METRIC_DATA > $CRIT" | bc`
    WARN_STATUS=`echo "$METRIC_DATA > $WARN" | bc`
fi

if   [ $CRIT_STATUS -eq 1 ]; then
    echo "CRITICAL $NAMESPACE $METRIC_NAME $DIMENSIONS $STATISTICS: $METRIC_DATA"
    exit $STATE_CRITICAL
elif [ $WARN_STATUS -eq 1 ]; then
    echo "WARNING $NAMESPACE $METRIC_NAME $DIMENSIONS $STATISTICS: $METRIC_DATA"
    exit $STATE_WARNING
elif [ $CRIT_STATUS -eq 0 -a $WARN_STATUS -eq 0 ]; then
    echo "OK $NAMESPACE $METRIC_NAME $DIMENSIONS $STATISTICS: $METRIC_DATA"
    exit $STATE_OK
fi

echo "UNKNOWN: End"; exit $STATE_UNKNOWN
※同一フォルダに"utils.sh"(/usr/lib64/nagios/plugins/utils.sh)が必要になります。

取得した値と閾値との比較は"bc"コマンドで行っているので下記のように
インストールしておく必要もあります。
# yum -y install bc
...

実行すると下記のようになります。(閾値を上に超えたらCritical/Warningになります)
# ./check_cloudwatch -c 2 -w 0 -n AWS/EC2 -m CPUUtilization -d '{"name":"InstanceId","value":"i-xxxxxxxx"}' -s Average
CRITICAL AWS/EC2 CPUUtilization {"name":"InstanceId","value":"i-f2f016f0"} Average: 2.3440000000000003

閾値を下に超えたらCritical/Warningになるようにするには"-r"オプションを付けます
# ./check_cloudwatch -c 2 -w 0 -n AWS/EC2 -m CPUUtilization -d '{"name":"InstanceId","value":"i-xxxxxxxx"}' -s Average -r
OK AWS/EC2 CPUUtilization {"name":"InstanceId","value":"i-f2f016f0"} Average: 2.3440000000000003

もう少し手を入れたらGitHubに上げてRPMにして...
--------
http://www.suz-lab.com

0 コメント: