Amazon SQS 的可用 CloudWatch 指标 - Amazon Simple Queue Service

Amazon SQS 的可用 CloudWatch 指标

Amazon SQS 会向 CloudWatch 发送以下指标。

注意

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

Amazon SQS 指标

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

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

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

指标 描述 单位 报告行为 关键说明
ApproximateAgeOfOldestMessage 队列中最早的未处理消息的期限。

报告队列中是否至少包含一条活动消息。
  • 对于标准队列,如果一条消息被接收三次或以上但未删除,SQS 会将其移到队列的后面。然后,该指标会反映下一条未超过接收阈值的消息的期限。即使实施了重新驱动策略,也会发生这种重新排序。

  • 毒丸消息(反复收到但从未删除的消息)在成功处理之前将排除在此指标之外。

  • 当消息超过 maxReceiveCount 后被移到 DLQ 时,期限将重置。在这种情况下,DLQ 的指标反映的是消息被移动的时间,而不是最初发送的时间。

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

ApproximateNumberOfGroupsWithInflightMessages 仅适用于 FIFO。包含一条或多条传输中消息的消息组数量。

计数

报告 FIFO 队列是否处于活动状态。
  • 传输中消息是指已被使用者从队列中接收但尚未删除或到期的消息。

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

  • 如果队列中有大量积压消息并且该值很低,请考虑扩大使用者规模或增加活动消息组的数量。

  • 有关吞吐量和传输中消息数量上限,请参阅 Amazon SQS 配额

ApproximateNumberOfMessagesDelayed

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

计数

报告队列中是否存在延迟消息。
  • 适用于配置了默认延迟的队列以及使用 DelaySeconds 参数发送的单条消息。

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

ApproximateNumberOfMessagesNotVisible 已接收但尚未删除或到期的传输中消息数量。

计数

报告是否存在传输中消息。
  • 消息通过 ReceiveMessage API 发送给使用者后即进入传输中状态。

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

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

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

计数

报告队列是否处于活动状态。
  • 反映队列中当前的处理积压情况。

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

  • 值持续较高可能表示使用者预置不足或处理逻辑卡滞。

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

计数

在接收操作期间报告。
  • 此指标有助于识别轮询行为中的低效问题或未充分利用的使用者实例。

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

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

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

计数

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

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

  • 使用此指标排除冗余创建者逻辑问题或确认重复数据删除是否按预期运行。

NumberOfMessagesDeleted¹

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

计数

报告每个经过有效接收处理的删除请求。
  • 此指标会计算所有成功的删除操作,即使同一条消息被删除多次也是如此。

  • 值高于预期的常见原因包括:

    • 在可见性超时到期并再次收到消息后,使用不同的接收处理方式多次删除同一消息。

    • 使用相同的接收处理方式重复删除,仍会返回成功状态并增加指标值。

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

NumberOfMessagesReceived¹ ReceiveMessage API 返回的消息数量。

计数

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

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

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

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

计数

报告每次成功手动发送。
  • 手动调用 SendMessageSendMessageBatch 都会计算在内,包括那些直接定向 DLQ 的调用。

  • 超过 maxReceiveCount 后自动移到 DLQ 的消息不包含在此指标中。

  • 因此,NumberOfMessagesSent 可能低于 NumberOfMessagesReceived,尤其是在重新驱动策略在后台将许多消息移到 DLQ 的情况下。

SentMessageSize¹

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

字节

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

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

  • SQS 的最大消息大小为 1 MiB。

ApproximateNumberOfNoisyGroups

公平队列中被视为嘈杂邻居的消息组的数量。嘈杂消息组表示多租户队列中的嘈杂邻居租户。

计数

如果队列处于活动状态,则报告非负值。
  • 通过跟踪使用过多资源的消息组,帮助识别多租户环境中潜在的嘈杂邻居问题。

  • 使用此指标来设置警报,当嘈杂组的数量超过可接受的阈值时触发,表示可能存在队列公平性问题。

ApproximateNumberOfMessagesVisibleInQuietGroups

可见消息数量,不包括来自嘈杂消息组的消息。

计数

如果队列处于活动状态,则报告非负值。
  • 能够查看标准速率消息组的队列积压情况,不包括来自嘈杂邻居的消息。

  • 通过筛除嘈杂邻居的影响,帮助确定典型消息组的真实处理积压情况。

ApproximateNumberOfMessagesNotVisibleInQuietGroups 传输中消息数量,不包括来自嘈杂消息组的消息。

计数

如果队列处于活动状态,则报告非负值。
  • 跟踪来自行为良好的消息组的传输中消息(正在处理但尚未删除)。

  • 使用此指标来监控常规消息组的处理吞吐量,并检测不是由嘈杂邻居引起的处理瓶颈。

ApproximateNumberOfMessagesDelayedInQuietGroups 延迟且无法立即读取的消息数量,不包括来自嘈杂消息组的消息。如果队列被配置为延迟队列,或者发送消息时使用了延迟参数,则会出现延迟消息。

计数

如果队列处于活动状态,则报告非负值。
  • 帮助监控来自具有正常或预期吞吐模式的消息组(而不是高容量或嘈杂组)的延迟消息积压情况

  • 有助于了解未来处理需求并为典型工作负载进行容量规划。

ApproximateAgeOfOldestMessageInQuietGroups 队列中最早的未删除消息的期限,不包括来自嘈杂消息组的消息。

如果队列处于活动状态,则报告非负值。
  • 用于监控 SLA 合规性并检测具有正常或预期吞吐量模式的消息组(而不是高容量或嘈杂消息组,否则可能会歪曲指标)中的处理瓶颈。

  • 使用此指标设置消息处理超时警报,忽略来自嘈杂邻居的人为旧消息。

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

死信队列(DLQ)和 CloudWatch 指标

使用 DLQ 时,了解 Amazon SQS 指标的行为非常重要:

  • NumberOfMessagesSent – 对于 DLQ,此指标的行为有所不同:

    • 手动发送 – 此指标将捕获手动发送到 DLQ 的消息。

    • 自动重新驱动 – 此指标捕获由于处理失败而自动移到 DLQ 的消息。因此,对于 DLQ,NumberOfMessagesSentNumberOfMessagesReceived 指标可能存在差异。

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

公平队列和 CloudWatch 指标

当您使用公平队列时,Amazon SQS 会输出以下额外指标:

  • ApproximateNumberOfNoisyGroups

  • ApproximateNumberOfMessagesVisibleInQuietGroups

  • ApproximateNumberOfMessagesNotVisibleInQuietGroups

  • ApproximateNumberOfMessagesDelayedInQuietGroups

  • ApproximateAgeOfOldestMessageInQuietGroups

注意

每个 QuietGroup 指标都是等效标准队列级别 Approximate 指标的子集,但不包括来自嘈杂邻居组的消息。

嘈杂组

嘈杂消息组表示多租户队列中的嘈杂邻居租户。

安静组

嘈杂组以外的消息组。

观察 SQS 公平队列行为

要监控 Amazon SQS 公平队列的影响,您可以将 Approximate..InQuietGroups 指标与标准队列级别指标进行比较。在特定租户的流量激增期间,队列级别的一般指标可能会显示积压的消息增加或消息停留时间延长。但是,如果单独查看安静组,您可以确定大多数非嘈杂消息组或租户都没有受到影响,并估算出受影响的消息组总数。

虽然通过这些新指标可以了解 Amazon SQS 公平队列行为,但了解哪个特定租户导致了负载问题可能会有所帮助。Amazon CloudWatch Contributor Insights 使您能够查看有关前 N 个贡献者、独特贡献者总数及其使用情况的指标。这在处理数千个租户的场景中特别有用,否则在输出传统指标时会导致高基数数据(和成本)。

有关监控公平队列配置的示例,请参阅 GitHub 上的示例。

Amazon SQS 指标的维度

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

监控提示

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

  • 基于 ApproximateNumberOfMessagesVisible 设置 CloudWatch 警报,以了解积压增长情况。

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

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

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