share facebook facebook2 twitter menu hatena pocket slack

2013.04.01 MON

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

鈴木 宏康

WRITTEN BY鈴木 宏康

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

プラグインは、下記のようになります。


# 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

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

鈴木 宏康

鈴木 宏康

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