我有一个警报器跟踪LoadBalancer 5xx错误在单个ALB中的度量。如果过去1中的1个数据点高于2的阈值,则应该处于“处于警报状态”。周期设置为1分钟。请参阅警报详情:
在2020年-09-23世界协调时17:18,负载均衡器开始返回502个错误。这显示在下面的云表度量图中,我已经确认时间是正确的(这是一个强制502响应,所以我知道何时触发它,我可以在ALB日志中看到17:18的时间戳)
但在报警日志中,“处于警报状态”仅在17:22世界协调时-- 17:18时段后4分钟才触发,有2次以上的错误。这并不是收到通知的延迟,而是与我的预期相比,状态变化的延迟。在状态更改后的几秒钟内正确地接收到通知。
下面是带有状态更改时间戳的警报日志:
我们认为丢失数据是好的,因此根据度量图,我假设它应该在17:22 (在17:21周期之后,有0错误)恢复到OK,但只在17:27-5分钟延迟时返回到OK。
然后我预计它会在17点24分回到“警报中”,但直到17点28分才恢复。
最后,我希望它能在17:31恢复到OK,但直到17:40 --整整9分钟之后。
为什么在我期望状态转换和实际发生之间会有4-9分钟的延迟?
发布于 2020-09-24 11:11:24
我认为这一解释是在以下AWS论坛上作出的:
从根本上说,警报是在较长时间的上评估的,然后是你设置的,而不仅仅是1分钟。句点是评价范围,您作为一个用户,对它没有直接的控制。
来自论坛的:
HTTPCode_Target_4XX_Count度量的报告条件是如果有一个非零值.这意味着只有在生成非零值时才会报告数据点,否则不会将任何数据点推送到度量中。CloudWatch标准警报每分钟评估一次它的状态,无论您为如何处理丢失的数据设置了什么值,当警报评估是否更改状态时,CloudWatch试图检索的数据点数比评估期间指定的多(在本例中为1)。它试图检索的数据点的确切数量取决于警报周期的长度,以及它是基于具有标准分辨率或高分辨率的度量。它试图检索的数据点的时间框架是(求值范围)。如果计算范围内的所有数据都丢失,而不仅仅是评估期间的数据丢失,就会将丢失的数据作为设置应用。因此,警报将查看以前的一些数据点来评估其状态,并将处理丢失的数据用作设置,如果评估范围中的所有数据都丢失了。在这种情况下,当没有转换到OK状态时,它使用计算范围中的前几个数据点来计算其状态,就像预期的那样。这里详细解释了在数据丢失的情况下的警报计算,这将有助于进一步理解这一点:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-evaluating-missing-data
发布于 2022-12-02 07:57:34
对于Lambda调用,我也有类似的问题,试图在间隔内检测到零调用。无论时间为10 min或1天,报警时间均为period
的三次。
AWS论坛中的这个帖子还提到了评估范围,并建议使用Fill()度量数学函数来解决这个限制。
这是一个对我有用的Cloudformation样本。警报是在大约10-11分钟的无调用(配置)后触发的,而不是以前的30分钟。对我来说已经够好了。注意:它可以解决评估范围问题,它无法避免摄入CloudWatch的延迟。
ManualCfMathAlarm:
Type: AWS::CloudWatch::Alarm
DependsOn:
- ManualCfAlarmNotificationTopic
Properties:
AlarmDescription: Notifies on ZERO invocations, based on MATH
AlarmName: ${self:service}-${self:provider.stage}-ManualCfMathAlarm
OKActions:
- !Ref ManualCfAlarmNotificationTopic
AlarmActions:
- !Ref ManualCfAlarmNotificationTopic
InsufficientDataActions:
- !Ref ManualCfAlarmNotificationTopic
EvaluationPeriods: 1
DatapointsToAlarm: 1
Threshold: 1.0
ComparisonOperator: LessThanThreshold
TreatMissingData: "missing" # doesn't matter, because of FILL()
Metrics:
- Id: "e1"
Expression: "FILL(m1, 0)"
Label: "MaxFillInvocations"
ReturnData: true
- Id: "m1"
MetricStat:
Metric:
Namespace: "AWS/Lambda"
MetricName: "Invocations"
Dimensions:
- Name: "FunctionName"
Value: "alarms-test-dev-AlarmsTestManual"
- Name: "Resource"
Value: "alarms-test-dev-AlarmsTestManual"
Period: 600
Stat: "Sum"
ReturnData: false
https://stackoverflow.com/questions/64044268
复制相似问题