当SQS队列在一定时间后不为空时发出警报?

Hua*_*Yin 2 amazon-sqs amazon-web-services amazon-cloudwatch

使用案例

我们有 1 个 sqs 正在被 lambda 消耗,我们想知道在某个时间戳之后 sqs 中的所有消息是否都已被消耗。

例如,其他一些系统将从早上 6 点开始向 SQS 发送消息,而 lambda 需要 4 小时才能处理所有消息。我们想知道上午 10 点时,队列中的所有消息是否都已被消费。
而我们每天只需要检测一次sqs的深度即可。

问题。

有没有一种简单的方法可以在 cloudwatch 中设置警报来实现我们的用例?

有许多潜在的解决方案,例如使用 cloudwatch 规则触发 lambda 并检测队列的大小和发送指标。我们可以对指标发出警报,但这似乎很繁重

Joh*_*ein 5

持续检查

ApproximateNumberOfMessagesVisible您可以针对队列的指标创建 Amazon CloudWatch 警报。

例如,如果您希望在过去一小时内队列不为空时收到通知,则可以在Min of ApproximateNumberOfMessagesVisible> 0 持续 60 分钟时创建警报。这表示过去一小时队列中的最小消息数大于零。

在特定时间检查

如果您想检查特定时间的队列长度,则需要使用Amazon CloudWatch Events在给定时间触发AWS Lambda 函数。

Lambda 函数可以调用get_queue_attributes()来检索ApproximateNumberOfMessages. 如果该值大于预期,Lambda 函数可以向Amazon SNS 主题发送消息。用户可以订阅该主题以接收电子邮件或短信通知。

  • @HuazheYin,尽管有这样一个习惯性的、不寻常的要求,但这些都不是繁重的工作。如果您想知道队列在某些日子的上午 10 点是否为空,则安排 Lambda 在这些日子的上午 10 点运行并简单地检查队列深度。但是,如果消息在上午 10:01 到达空队列怎么办?那么应该发生什么?您应该考虑基于事件的触发器。当某些内容到达 SQS 时,它可以触发 Lambda 来处理消息。如果它在“队列应该为空”的时间范围内到达,则通过 SNS 发出警报。 (2认同)