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で処理数をチェックする期間を指定しています。

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