正确计算发送到死信 SQS 队列的消息数
Posted
技术标签:
【中文标题】正确计算发送到死信 SQS 队列的消息数【英文标题】:Correctly calculate number of sent messages to Dead Letter SQS queue 【发布时间】:2019-10-10 00:10:09 【问题描述】:我希望 grafana 在任何给定时间报告死信队列中有多少消息。由于最终进入此队列的性质,最终进入此队列的消息将被评估和解析。
我已将 grafana 配置为从 dead-letter
队列中读取 NumberOfMessagesSent
,但是该值始终为 0
,因为;我认为最终到达这里的消息是从另一个队列(通过 SQS)发送的。
即使我可以看到消息已发送到 dead-letter
队列(不是以编程方式),而是通过在 X 次接收后配置的另一个队列。
有解决办法吗?
【问题讨论】:
有趣! CloudWatch 将NumberOfMessagesSent
定义为“添加到队列中的消息数”。我猜移动到 DLQ 不会被归类为“添加到队列”?
好像是这样。
【参考方案1】:
快速回答:
您可以在 SQS DLQ 上真正监控的唯一指标是 ApproximateNumberOfMessagesVisible
。
TLDR:
当新消息到达 SQS DLQ 时,NumberOfMessagesSent
或 NumberOfMessagesReceived
都不会增加。
来自AWS Documentation的引用:
如果您手动将消息发送到死信队列,则会被捕获 由 NumberOfMessagesSent 指标。但是,如果将消息发送到 由于处理尝试失败而导致的死信队列,它不是 由该指标捕获。因此,有可能的值 NumberOfMessagesSent 和 NumberOfMessagesReceived 不同。
NumberOfMessagesSent
表示:
您已发送到队列的消息数量(由于失败而到达 DLQ 的消息除外)
NumberOfMessagesReceived
表示:
您从队列中收到了多少条消息
ApproximateNumberOfMessagesVisible
表示:
队列中可见的总数或消息。 (请记住,当您从队列接收消息时,您必须设置可见性超时==您收到的消息有多长时间不对其他人可见。还请记住,您应该在成功处理后删除消息,否则它将在可见性超时后对其他人可用。 )
【讨论】:
【参考方案2】:由于 NumberOfMessagesReceived 和 NumberOfMessagesSent 的指标取决于 David Navrkal 提到的消息的排队方式,因此我使用指标 ApproximateNumberOfMessagesDelayed 为我们的需求设计了一个新的解决方案。在 dlq 设置中,我添加了使用此指标的延迟。
ie: DelaySeconds: 60 #用于警报
对于 yaml,请参阅 Configure SQS Dead letter Queue to raise a cloud watch alarm on receiving a message。
【讨论】:
以上是关于正确计算发送到死信 SQS 队列的消息数的主要内容,如果未能解决你的问题,请参考以下文章