CloudWatch警报未触发(图表为空):DynamoDB延迟指标问题排查
问题详情
使用SuccessfulRequestLatency指标监控DynamoDB请求延迟,测试时设置阈值5ms(正式预期阈值为50ms),触发时需推送Slack通知(已有5xx类警报可正常工作),但未收到通知。CloudWatch的「Graphed Metrics」中能看到延迟图表,但警报页面的图表为空。警报YAML配置如下:
DynamoDBCMSPageLatencyTooHighAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmActions: - !Ref ErrorNotifier AlarmDescription: Alarm if p90 > 50 ms in DynamoDB (GetItem in CMSPage) AlarmName: !Sub ${AWS::StackName}-dynamoDB-CMSPage-latency-too-high ComparisonOperator: GreaterThanThreshold Dimensions: - Name: TableName Value: !Ref CmsPageTable EvaluationPeriods: 3 MetricName: SuccessfulRequestLatency Namespace: AWS/DynamoDB Period: 300 TreatMissingData: notBreaching ExtendedStatistic: p90 Threshold: 5
排查要点
补全指标维度:DynamoDB的
SuccessfulRequestLatency指标默认包含TableName和Operation两个维度,当前配置仅指定了TableName,缺少Operation(比如GetItem)维度。这会导致警报无法匹配到正确的指标数据,所以警报图表为空。需补充维度配置:Dimensions: - Name: TableName Value: !Ref CmsPageTable - Name: Operation Value: GetItem验证统计周期与数据量:当前设置
Period: 300(5分钟),p90分位数统计需要足够的请求样本支撑。如果5分钟内请求量过少,CloudWatch无法生成有效统计值,导致警报无法评估。可临时缩短Period(比如60秒)测试,同时确认指标原始数据点数量是否达标。检查缺失数据处理规则:配置中
TreatMissingData: notBreaching,如果因维度不匹配等原因导致指标数据缺失,警报会被判定为「非触发状态」,不会执行通知动作。若存在数据缺失情况,需先解决指标匹配问题。确认通知通道权限:虽然5xx警报正常,仍需检查
ErrorNotifier(应为SNS主题)的访问策略,确保允许CloudWatch服务向其发布消息:{ "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:REGION:ACCOUNT-ID:YOUR-TOPIC-NAME" }同时确认
AlarmActions引用的ErrorNotifier是正确的ARN,无栈引用或拼写错误。查看警报评估历史:在CloudWatch警报页面的「History」标签下,检查是否有
INSUFFICIENT_DATA状态记录,这通常是指标匹配失败的直接提示,可据此定位核心问题。
内容的提问来源于stack exchange,提问作者Antonios Zaravelas

