この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
メッセージキュー好きの皆様、こんにちは。
2016/08/31からAmazonのメッセージングサービス Simple Queue Service(SQS)において、削除されていない最も古いメッセージの古さを Amazon CloudWatch のメトリクスで監視出来るようになりました。
ApproximateAgeOfOldestMessage の意味
今回の追加された CloudWatch の SQS 向けメトリクス ApproximateAgeOfOldestMessage は、Amazon SQS キューにある削除されていない最も古いメッセージのおおよそ(Approximate)の古さを秒で表したものです。
メトリクス ApproximateAgeOfOldestMessage が 0 に近い場合、キューイングされたメッセージがほぼリアルタイムで処理されていることを意味します。
このメトリクスがある程度の大きさである場合、メッセージが溜まっていて、リアルタイムでは処理しきれていないことを意味します。
このメトリクスが漸増する場合、コンシューマーの処理が止まっている、あるいは、コンシューマーの処理が追いついていないといったことが考えられます。
Amazon Kinesis Streams とのアナロジー
リアルタイムストリーミングサービスの Amazon Kinesis には GetRecords.IteratorAgeMilliseconds というメトリクスが存在し、SQS の ApproximateAgeOfOldestMessage と同等の意味を持ちます。
使ってみる
利用に当たって
このCloudWatchメトリクスを利用するにあたって、特別な設定は不要です。 ただし、SQS キューから少なくとも一度はメッセージを取得しないと、CloudWatch 画面にこのメトリクスが登録されないようです。
CloudWatchのメトリクス一覧
SQS向けメトリクス一覧に「ApproximateAgeOfOldestMessage」が追加されているのがわかります。
メトリクスの推移
SQS キューにメッセージを出し入れすると、「ApproximateAgeOfOldestMessage」は次の様なグラフになりました。
Y軸の単位は秒です。たとえば、600とあれば、600秒=10分です。
アラーム通知
ApproximateAgeOfOldestMessageはCloudWatch の1メトリクスのため、アラームとの相性も良いです。
ApproximateAgeOfOldestMessage向けのアラーム例です。
Namespace : AWS/SQS, Metric Name: ApproximateAgeOfOldMessageを選択します。
5分間(Period)の最大値(Statistic)が3回連続(Consecutive Periods)で600以上になると、イベントを発火するように設定しています。
アラートをEC2 AuroscalingやECSと連携させれば、コンシューマーにより多くのメッセージを処理させることもできますね。
AWS CLI から操作
AWS CLI からは、いつもの様に get-metric-statistics API を使います。
$ aws cloudwatch get-metric-statistics \
--metric-name ApproximateAgeOfOldestMessage \
--start-time 2016-09-06T18:00:00 \
--end-time 2016-09-06T18:30:00 \
--period 60 \
--namespace AWS/SQS \
--statistics Maximum \
--dimensions Name=QueueName,Value=test-age
{
"Datapoints": [
{
"Timestamp": "2016-09-06T18:20:00Z",
"Maximum": 310.0,
"Unit": "Seconds"
},
{
"Timestamp": "2016-09-06T18:15:00Z",
"Maximum": 449.0,
"Unit": "Seconds"
},
{
"Timestamp": "2016-09-06T18:10:00Z",
"Maximum": 152.0,
"Unit": "Seconds"
},
{
"Timestamp": "2016-09-06T18:05:00Z",
"Maximum": 0.0,
"Unit": "Seconds"
},
{
"Timestamp": "2016-09-06T18:25:00Z",
"Maximum": 0.0,
"Unit": "Seconds"
}
],
"Label": "ApproximateAgeOfOldestMessage"
}
まとめ
SQS のCloudWatchに追加された、地味だけと便利なメトリクスApproximateAgeOfOldestMessageについて紹介しました。 これまでは、メッセージ数などを基準にしたアクションしか取れませんでしたが、今後は、未処理状態のメッセージの古さを基準にしたアクションも取れるようになりました。
今までなかったのが不思議な位、応用範囲が広いメトリクスです。
ぜひ、ご活用下さい。