Amazon SQSのメッセージの古さをAmazon CloudWatchで監視出来るようになりました
メッセージキュー好きの皆様、こんにちは。
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について紹介しました。 これまでは、メッセージ数などを基準にしたアクションしか取れませんでしたが、今後は、未処理状態のメッセージの古さを基準にしたアクションも取れるようになりました。
今までなかったのが不思議な位、応用範囲が広いメトリクスです。
ぜひ、ご活用下さい。