SQSのメッセージ数の監視をNagiosで実施しています。
キュー内のメッセージ数(ApproximateNumberOfMessagesVisible)を監視するのですが、メッセージ数が閾値を
超えていなくても、処理数(NumberOfMessagesReceived )が、ある一定の期間0であった場合、
アプリケーションの方で障害があって処理できてないと見なし、アラート通知するようにしてみました。
実際のNagiosプラグインは下記となります。
# cat check_sqs #!/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:q:p: OPTNAME; do
case $OPTNAME in
w)
WARN=$OPTARG
;;
c)
CRIT=$OPTARG
;;
q)
QUEUE=$OPTARG
;;
p)
PERIOD=$OPTARG
;;
*)
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`
DIMENSIONS={"name":"QueueName","value":"$QUEUE"}
METRIC_DATA=`aws cloudwatch get-metric-statistics
--namespace AWS/SQS
--metric-name ApproximateNumberOfMessagesVisible
--dimensions $DIMENSIONS
--statistics Average
--period 60
--start-time $START_TIME
--end-time $END_TIME
| jq '.Datapoints[0] | .Average'
| cut -d" -f2`
CRIT_STATUS=`echo "$METRIC_DATA > $CRIT" | bc`
WARN_STATUS=`echo "$METRIC_DATA > $WARN" | bc`
OK_STATUS=`echo "$METRIC_DATA == 0" | bc`
if [ $CRIT_STATUS -eq 1 ]; then
echo "CRITICAL ApproximateNumberOfMessagesVisible: $METRIC_DATA"
exit $STATE_CRITICAL
elif [ $WARN_STATUS -eq 1 ]; then
echo "WARNING ApproximateNumberOfMessagesVisible: $METRIC_DATA"
exit $STATE_WARNING
elif [ $OK_STATUS -eq 1 ]; then
echo "OK ApproximateNumberOfMessagesVisible: $METRIC_DATA"
exit $STATE_OK
fi
METRIC_DATA=`aws cloudwatch get-metric-statistics
--namespace AWS/SQS
--metric-name NumberOfMessagesReceived
--dimensions $DIMENSIONS
--statistics Average
--period $PERIOD
--start-time $START_TIME
--end-time $END_TIME
| jq '.Datapoints[0] | .Average'
| cut -d" -f2`
RECEIVE_STATUS=`echo "$METRIC_DATA == 0" | bc`
if [ $RECEIVE_STATUS -eq 1 ]; then
echo "CRITICAL NumberOfMessagesReceived: $METRIC_DATA"
exit $STATE_CRITICAL
elif [ $RECEIVE_STATUS -eq 0 ]; then
echo "OK ApproximateNumberOfMessagesVisible: $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
実行は下記の通りです。
# ./check_sqs -c 3 -w 3 -q suz-lab-queue -p 600
OK ApproximateNumberOfMessagesVisible: 0.0
-qでキュー名を指定し、-pで処理数をチェックする期間を指定しています。