我有一个问题,我设置了一个警报来测量 SQS 队列上的
ApproximateNumberOfMessagesVisible
。当它达到 1
时,它会启动一个 EC2 实例,当它达到 0
时,它应该触发 AutoScaling 组来缩小规模。但是,即使我在 SQS 队列上有 0
消息,我的警报仍然处于 1
消息,状态为 Ok
,就像它无法识别更改一样。我知道这是“大约的消息数量”,但是这种情况可能会持续数天,消息值为 0,警报的实际值为 1。有任何线索说明为什么会发生这种情况吗?
我还观察到 Amazon SQS 不会向 Amazon CloudWatch 发送“零”指标。我个人的理论是,这减少了 SQS 需要发送到 CloudWatch 的“喋喋不休”量,因为肯定存在大量空队列。
幸运的是,您可以通过转到 CloudWatch 警报中的其他配置并将丢失数据处理设置为将丢失数据视为错误数据来满足此要求。这将以与将其设置为零值触发相同的方式触发警报。
基于 SQS 队列大小进行配置扩展时,请记住“快速扩展但缓慢扩展”的黄金法则。也就是说,相当快地打开资源来响应传入的消息,但不要太急于缩减资源。将警报设置为仅在相对于启动新资源所需时间的合理时间段后触发。因此,如果您要启动 EC2 实例并且实例需要 2 分钟才能启动,请至少等待 5 分钟才能进行缩减。