我在同样的问题上苦苦挣扎,而我的答案是改用 NumberOfMessagesSent。然后我可以为在我配置的时间段内收到的新消息设置我的标准。这是在 CloudFormation 中对我有用的方法。
请注意,如果警报因持续故障而处于警报状态,则不会发生单独的警报。您可以设置另一个警报来捕捉这些警报。即:用同样的方法,1小时内出现100个错误时报警。
更新:因为 NumberOfMessagesReceived 和 NumberOfMessagesSent 的指标取决于消息的排队方式,所以我在为 dlq 设置添加延迟后使用指标 ApproximateNumberOfMessagesDelayed 为我们的需求设计了一个新的解决方案。如果您手动将消息添加到队列中,则 NumberOfMessagesReceived 将起作用。否则在设置延迟后使用 ApproximateNumberOfMessagesDelayed。
MyDeadLetterQueue:
Type: AWS::SQS::Queue
Properties:
MessageRetentionPeriod: 1209600 # 14 days
DelaySeconds: 60 #for alarms
DLQthresholdAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: "Alarm dlq messages when we have 1 or more failed messages in 10 minutes"
Namespace: "AWS/SQS"
MetricName: "ApproximateNumberOfMessagesDelayed"
Dimensions:
- Name: "QueueName"
Value:
Fn::GetAtt:
- "MyDeadLetterQueue"
- "QueueName"
Statistic: "Sum"
Period: 300
DatapointsToAlarm: 1
EvaluationPeriods: 2
Threshold: 1
ComparisonOperator: "GreaterThanOrEqualToThreshold"
AlarmActions:
- !Ref MyAlarmTopic