以前、「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 WARN_STATUS=`echo "$METRIC_DATA 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