亚马逊 SQS 的可用 CloudWatch 指标 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 SQS 的可用 CloudWatch 指标

Amazon SQS 将以下指标发送至。 CloudWatch

注意

由于 Amazon SQS 采用分布式架构,某些指标的结果为近似值。在大多数情况下,该计数应接近队列中的实际消息数。

Amazon SQS 指标

Amazon SQS 会自动在命名空间 CloudWatch下向AWS/SQS亚马逊发布运营指标。这些指标可帮助您监控队列运行状况和性能。由于 SQS 的分布式特性,许多值都是近似值,但对于大多数运营决策来说足够准确。

注意
  • 仅当队列处于活动状态时,所有指标才会发出非负值。

  • 有些指标(例如SentMessageSize)要等到至少发送一条消息后才会发出。

指标 描述 单位 举报行为 关键笔记
ApproximateAgeOfOldestMessage 队列中最早的未处理消息的年龄。

如果队列中至少包含一条活动消息,则会报告。
  • 对于标准队列,如果一条消息被接收三次或更多次但未被删除,SQS 会将其移到队列的后面。然后,该指标会反映下一封未超过接收阈值的消息的存在时间。即使有重新驾驶政策,也会发生这种重新排序。

  • 在成功处理之前,Poison-pill 消息(重复收到但从未删除过的消息)将排除在此指标之外。

  • 当一封邮件在超过 DLQ 后被移至 DLQ 时maxReceiveCount,保留期就会重置。在这种情况下,DLQ 的指标反映的是消息的移动时间,而不是最初发送的时间。

  • FIFO 队列不会为了保持顺序而对消息进行重新排序。失败的消息会阻止其消息组,直到该消息组被删除或过期。如果配置了 DLQ,则消息将在达到接收阈值后发送到那里。

ApproximateNumberOfGroupsWithInflightMessages 仅适用于 FIFO。包含一条或多条正在发送的消息的消息组的数量。

计数

已报告 FIFO 队列是否处于活动状态。
  • 消费者从队列中收到消息,但尚未删除或过期后,该消息即被视为正在进行中。

  • 此指标可帮助您排查和优化 FIFO 队列吞吐量。值越高通常表示并发性强。

  • 如果队列有大量待办事项并且该值仍然很低,请考虑扩大使用者规模或增加活动消息组的数量。

  • 有关吞吐量和飞行中限制,请参阅Amazon SQS 配额

ApproximateNumberOfMessagesDelayed

队列中延迟且无法立即检索的消息数量。

计数

如果队列中存在延迟消息,则会报告。
  • 适用于配置了默认延迟的队列以及使用DelaySeconds参数发送的单个消息。

  • 延迟消息在延迟期到期之前一直对消费者隐藏,这可能会影响感知到的队列积压或吞吐量。

ApproximateNumberOfMessagesNotVisible 已收到但尚未删除或过期的飞行中消息的数量。

计数

如果存在飞行中消息,则会报告。
  • 消息通过 ReceiveMessageAPI 发送给消费者后进入传输状态。

  • 在可见性超时窗口内,这些消息会暂时向其他使用者隐藏。

  • 使用此指标来跟踪消息处理延迟或卡住的消费者。

ApproximateNumberOfMessagesVisible 当前可供检索和处理的消息数量。

计数

报告队列是否处于活动状态。
  • 反映队列中当前正在处理的待办事项列表。

  • 可以累积的消息数量没有硬性限制,但它们受队列配置的保留期的限制。

  • 持续较高的值可能表示消费者配置不足或处理逻辑停滞。

NumberOfEmptyReceives¹ 未返回任何消息的 ReceiveMessageAPI 调用次数。

计数

在接收操作期间报告。
  • 该指标可以帮助识别轮询行为中的效率低下或未充分利用的消费者实例。

  • 当队列为空、使用者使用短轮询或者消息处理速度快于生成速度时,可能会出现高值。

  • 这不是队列状态的精确指标。它反映了服务端的行为,可能包括重试。

NumberOfDeduplicatedSentMessages 仅适用于 FIFO。经过重复数据删除但未添加到队列中的已发送消息的数量。

计数

如果检测到重复的MessageDeduplicationId值或内容,则会报告。
  • SQS 根据MessageDeduplicationId或基于内容的哈希(如果启用)对消息进行重复数据删除。

  • 较高的值可能表示生产者在 5 分钟的重复数据删除窗口内重复发送相同的消息。

  • 使用此指标对冗余的生产者逻辑进行故障排除或确认重复数据删除是否按预期运行。

NumberOfMessagesDeleted¹

成功从队列中删除的消息数量。

计数

使用有效的收据账号对每个删除请求进行报告。
  • 该指标会计算所有成功的删除操作,即使同一封邮件被删除了不止一次。

  • higher-than-expected价值观的常见原因包括:

    • 在可见性超时到期并再次收到消息后,使用不同的收据句柄多次删除同一条消息。

    • 使用相同的收据句柄进行重复删除,该句柄仍会返回成功状态并增加指标。

  • 使用此指标来跟踪邮件处理成功率,但不要将其视为唯一已删除邮件的确切计数。

NumberOfMessagesReceived¹ ReceiveMessageAPI 返回的消息数量。

计数

在接收操作期间报告。
  • 这包括返回给消费者的所有消息,包括那些由于可见性超时过期而稍后返回到队列的消息。

  • 如果一条消息未被删除,则可能会被多次接收,这可能导致该指标超过发送的消息数量。

  • 使用它来跟踪消费者活动,但不要将其视为已处理的唯一消息的计数。

NumberOfMessagesSent¹ 成功添加到队列中的消息数量。

计数

每次成功手动发送都会报告。
  • 手动调用SendMessage或计SendMessageBatch数,包括直接针对 DLQ 的呼叫。

  • 超过后自动移至 DLQ 的邮件maxReceiveCount不包含在此指标中。

  • 因此,NumberOfMessagesSent可能低NumberOfMessagesReceived于,尤其是在重新驱动策略将许多消息转移到 DLQs 幕后时。

SentMessageSize¹

成功发送到队列的消息的大小。

字节

至少发送一条消息后才会发出。
  • 在队列收到第一条消息之前,该指标不会出现在 CloudWatch 控制台中。

  • 使用此指标来跟踪每条消息的大小(以字节为单位)。这对于分析有效载荷趋势或估算吞吐量成本非常有用。

  • SQS 的最大消息大小为 256 KB。

¹ 这些指标反映了系统级别的活动,可能包括重试、重复或延迟消息。如果不考虑消息生命周期行为,请勿使用原始计数来估算实时队列状态。

死信队列 (DLQs) 和指标 CloudWatch

使用时 DLQs,重要的是要了解 Amazon SQS 指标的行为方式:

  • NumberOfMessagesSent— 此指标在以下方面的行为有所不同: DLQs

    • 手动发送-此指标捕获手动发送到 DLQ 的邮件。

    • 自动重新驱动-此指标捕获由于处理失败而自动移至 DLQ 的邮件。因此,NumberOfMessagesSentNumberOfMessagesReceived指标可能会显示出差异。 DLQs

  • 推荐的指标 DLQs-要监控 DLQ 的状态,请使用该ApproximateNumberOfMessagesVisible指标。此指标指示 DLQ 中当前可供处理的消息数量。

Amazon SQS 指标的维度

Amazon SQS 指标 CloudWatch 使用单一维度:. QueueName 所有指标数据均按队列名称进行分组和筛选。

监控技巧

使用关键指标和 CloudWatch 警报有效地监控 SQS,以检测队列积压、优化性能并保持在服务限制之内。

  • 根据 catch 设置CloudWatch 警报ApproximateNumberOfMessagesVisible以捕捉待办事项增长情况。

  • NumberOfEmptyReceives通过监控来调整轮询频率并降低 API 成本。

  • ApproximateNumberOfGroupsWithInflightMessages在 FIFO 队列中用于诊断吞吐量限制。

  • 查看 SQS 配额以了解指标阈值和服务限制。