我在amazon sqs中处理死信队列。我希望每当队列接收到新消息时,它都会引发cloudwatch警报。问题是我在度量上配置了一个警报: number_of_messages_sent
但是在AmazonSQSDeadLetterQueues-AmazonSimpleQueueService文档中提到的死信队列的情况下,这个度量不能像预期的那样工作。
现在有人提出了一些建议 number_of_messages_visible
但我不知道如何在警报中配置它。所以如果我设置这个值 metric>0
这与在队列中获取新消息不同。如果存在旧消息,则度量值将始终为 >0
. 我可以做一些数学表达式来得到这个度量中某个特定时段(比如一分钟)的增量,但是我在寻找更好的解决方案。
5条答案
按热度按时间x8goxv8g1#
我也遇到了同样的问题,答案是改用numberofmessagessent。然后我可以为在配置的时间段内传入的新消息设置条件。以下是我在云信息中的工作原理。
请注意,如果警报处于持续故障的警报状态,则不会发生单独的警报。你可以设置另一个闹钟来捕捉这些。ie:使用相同方法在1小时内发生100个错误时发出警报。
更新:因为numberofmessagesreceived和numberofmessagessent的度量取决于消息的排队方式,所以在向dlq设置添加延迟后,我使用度量approximateEnumberOfMessagesDelayed设计了一个新的解决方案来满足我们的需要。如果要手动将消息添加到队列中,则numberofmessagesreceived将起作用。否则,请在设置延迟后使用ApproximateEnumberOfMessagesDelayed。
xdnvmnnf2#
很难达到问题中的要求。如果cloudwatch alarm的端点是发送电子邮件或通知用户dlq消息到达,您可以在sqs、sns和lambda的帮助下执行类似的操作。从cloudwatch中,您可以看到每当您收到任何电子邮件时,dlq消息是如何准时增长的。
为现有队列创建sqs dlq。
创建一个sns主题并订阅sns主题以发送电子邮件。
创建一个小lambda函数,用于侦听sqs队列中的传入消息,如果有任何新的传入消息,则将其发送到sns。由于sns订阅了电子邮件,所以每当任何新消息进入sqs队列时,您都会收到电子邮件。显然lambda函数的触发器是sqs,批大小是1。
bnl4lu3b3#
您可以创建一个lambda,将事件源作为您的dlq。从lambda可以将定制的度量数据发布到cloudwatch。当您的数据满足条件时会触发报警。
使用此参考来配置lambda,以便在将消息发送到dlq时触发:using aws lambda with amazonsqs-aws lambda
下面是一个很好的代码解释,它建议我们如何将自定义度量从lambda发布到cloudwatch:使用代码示例从lambda发送cloudwatch自定义度量
一旦发布了度量,cloudwatch警报将触发,因为它将匹配度量。
nfs0ujit4#
我用了度量数学函数
RATE
每当消息到达死信队列时触发警报。选择两个指标
ApproximateNumberOfMessagesVisible
以及ApproximateNumberOfMessagesNotVisible
你的死信队列。将度量表达式配置为
RATE(m1+m2)
,将阈值设置为0
并选择比较运算符作为GreaterThanThreshold
.m1+m2
是给定时间队列中的消息总数。每当新消息到达队列时,此表达式的速率将高于零。这就是它的工作原理。eimct9ow5#
我们有同样的问题,并通过使用2个指标和创建一个数学表达式来解决它。
周期很重要,因此最小值和最大值要在较长的时间内进行评估。