我负责使用ApproximateNumberOfMessagesVisible CloudWatch指标上的扩展策略负责一组SQS队列处理作业。这些作业可能由于多种原因而无法跟上所发送消息的数量:


服务降级会降低能够处理的消息的容量。

在队列深度持续增加的同时达到了AutoScaling的最大限制。
S3中断影响队列处理作业用来满足需求的其他相关AWS服务(AutoScaling服务)。

非技术团队成员,我想传达特定的队列处理延迟,这些延迟可以转化为客户可见的降级。如何使用SQS队列执行此操作?

#1 楼

与任何中断通信一样,非技术读者将主要希望了解:


它持续了多长时间?
它有多糟糕?

Amazon CloudWatch指标为SQS队列提供以下指标,可以帮助回答以下问题:



NumberOfMessagesSent:添加到队列中的消息数。

接收到的NumberOfMessages:调用ReceiveMessage API操作返回的消息数。

roximateNumberOfMessagesVisible:可从队列中检索的消息数。正确地讲,这些指标可以作为描述队列处理延迟的强大视觉辅助。这是我经历的一次中断中的几个示例,其中作业处理队列消息的能力严重下降:

NumberOfMessagesSent和NumberOfMessagesReceived




图形类型:折线图

统计数据:总和

周期:5分钟



此图绘制了对比在发送和接收的消息之间,这有助于隔离造成延迟的处理组件。在此图中,接收的指标急剧下降,而发送的指标继续保持其正常趋势,因此我们可以推断出问题出在队列读取组件而不是队列写入组件。

此答案多长时间/多严重的事件?是;描述随着时间的推移受到影响的过程。

NumberOfMessagesReceived和roximateNumberOfMessagesVisible



图形类型:堆积面积图

统计量:总和

期限:5分钟



这将在接收到的消息之上绘制队列深度图,这有助于显示队列备份的距离和恢复的方式。在此图中,我们可以看到,当队列读取组件出现问题时,队列深度急剧备份,并在队列读取组件再次开始读取消息时开始恢复。

此答案持续了多长时间/事件有多糟糕?是;描述随着时间的推移而受到影响的消息。


图表讨论

在两个图中,当线重叠时,队列处理通常被认为是健康的,而当线分开时,队列处理通常被认为是不健康的。 。这是向非技术团队成员教授的简单模式,并且可以帮助他们快速传播出现在这些图中的问题的位置和方式。

要进一步交流图中的特定点,您可以简单地对其进行批注:



图形提示:


标签单位和轴。
使用一致的颜色用于跨图匹配指标。请注意,两个图表中的NumberOfMessagesReceived均为橙色。这将有助于在不同图形之间可视化相同的度量标准。
垂直对齐描述相似度量标准的图形,以便它们可以随时间进行比较。

注意:我已经格式化了这些图形以进行展示在StackExchange上,所以这些不一定是我在停机后显示它们的方式。我在这里明确地从左轴删除了值,以使它们从StackExchange中消失。您希望将它们保存在验尸中。


其他技巧




增强团队能力:培训您的团队之后团队成员阅读这些图表,没有理由将它们隐藏起来。考虑设置CloudWatch仪表板,并为您的非技术团队成员提供IAM对CloudWatch的只读访问权限,以便他们可以随时查看这些图。

设置通知:如果超过了某些商定的较高值,请考虑根据roximateNumberOfMessagesVisible指标设置Cloudwatch警报,并订阅团队成员以通知他们潜在的问题。 Cloudwatch警报具有随通知电子邮件一起发送的描述字段-确保包含人类可读的描述,以帮助您的非技术人员传播警报。

浏览其他数据:根据Evgeny的评论,探索CloudWatch提供的功能以外的其他数据,并考虑如何将这些数据传达给团队。他在队列中使用消息生存期来创建直方图的示例就是这种创造性思维的一个很好的例子,可以通过在应用程序中记录消息发送和消息接收时间来完成。您可以通过ReceiveMessage API响应的每个队列消息上的SentTimeStamp属性获取消息Sent Timestamp。此处有更多详细信息。


评论


从不同的角度查看数据也非常有用,而不仅仅是CloudWatch提供的数据。例如,如果您可以显示每个消息在队列中停留多长时间的直方图,则表明某些消息保留X时间,而另一些消息保留X * 2时间。在停机期间,直方图会将其最高点移向X * 4或类似的东西……看起来非常有力。

– Evgeny Zislis
17 Mar 6 '17 at 5:37

另外,只想说:这是一个绝对令人惊讶的答案。

– Evgeny Zislis
17 Mar 6 '17 at 5:38

谢谢@Evgeny!这是一个好主意,我在此基础上为答案添加了另一个提示,并感谢您的评论。

–安东尼·内斯(Anthony Neace)
17 Mar 6 '17 at 17:05