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

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

亚马逊 SQS 的可用 CloudWatch 指标

亚马逊 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 后自动移至 DLQ 的邮件maxReceiveCount不包含在此指标中。

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

SentMessageSize¹

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

字节

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

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

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

ApproximateNumberOfNoisyGroups

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

计数

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

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

ApproximateNumberOfMessagesVisibleInQuietGroups

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

计数

如果队列处于活动状态,则报告非负值。
  • 为标准速率消息组提供队列待办事项的可见性,不包括来自嘈杂邻居的消息。

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

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

计数

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

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

ApproximateNumberOfMessagesDelayedInQuietGroups 不包括来自嘈杂消息组且延迟且无法立即阅读的消息的消息数量。当队列配置为延迟队列或发送带有延迟参数的消息时,就会出现延迟消息。

计数

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

  • 有助于了解 future 处理需求和典型工作负载的容量规划。

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

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

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

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

死信队列 (DLQs) 和指标 CloudWatch

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

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

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

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

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

公平的队列和 CloudWatch 指标

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

  • ApproximateNumberOfNoisyGroups

  • ApproximateNumberOfMessagesVisibleInQuietGroups

  • ApproximateNumberOfMessagesNotVisibleInQuietGroups

  • ApproximateNumberOfMessagesDelayedInQuietGroups

  • ApproximateAgeOfOldestMessageInQuietGroups

注意

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

吵闹的群体

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

安静的团体

不包括嘈杂群组的消息组。

观察 SQS 公平队列行为

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

虽然这些新指标可以很好地概述了 Amazon SQS 公平队列行为,但了解哪个特定租户导致了负载可能会有所帮助。Amazon CloudWatch 贡献者见解允许您查看有关前 N 个贡献者、独立贡献者总数及其使用情况的指标。这在您与成千上万的租户打交道的场景中特别有用,否则这些租户在发出传统指标时会导致高基数数据(和成本)。

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

Amazon SQS 指标的维度

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

监控技巧

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

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

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

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

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