Amazon SQSのメッセージの古さをAmazon CloudWatchで監視出来るようになりました
この記事は公開されてから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 を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | $ 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について紹介しました。 これまでは、メッセージ数などを基準にしたアクションしか取れませんでしたが、今後は、未処理状態のメッセージの古さを基準にしたアクションも取れるようになりました。
今までなかったのが不思議な位、応用範囲が広いメトリクスです。
ぜひ、ご活用下さい。