如何为AWS CloudWatch日志创建用户RESET_SUCCESSFUL次数超限告警?
实现按user_id统计RESET_SUCCESSFUL事件的CloudWatch告警方案
问题分析
CloudWatch默认的Metric Filter无法直接对动态user_id做分组统计告警——因为如果把动态user_id设为维度,会生成大量独立指标,且无法自动为所有user_id创建告警。以下是两种可行方案:
方案一:CloudWatch Logs Insights + Lambda + SNS(推荐,适配动态user_id场景)
该方案通过定期执行Logs Insights查询,主动筛选出符合阈值的user_id并发送告警:
1. 编写Logs Insights查询语句
针对目标日志组,编写统计查询(替换x为你的阈值):
fields @timestamp, user_id, type_of_event | filter type_of_event = "RESET_SUCCESSFUL" | stats count(*) as event_count by user_id | filter event_count > x
该语句会返回过去6小时内,RESET_SUCCESSFUL事件次数超过x的所有user_id及对应次数。
2. 创建Lambda函数
编写Lambda函数(支持Python/Node.js等语言),核心逻辑:
- 调用CloudWatch Logs API
start_query,指定目标日志组、上述查询语句,时间范围设为-6h到now - 轮询
get_query_resultsAPI,直到查询完成 - 遍历查询结果,构造告警消息(示例:
用户ID: abcd3928784798ahHBS,6小时内重置成功次数: 5) - 调用SNS API
publish,将告警消息发送到指定SNS主题
3. 配置触发规则
在EventBridge中创建定时规则,按需求频率触发Lambda(比如每小时触发一次,确保及时捕获6小时窗口内的超标情况)。
4. 配置SNS主题
创建SNS主题,添加邮件、短信等订阅者,用于接收告警通知。
方案二:Metric Filter + 维度聚合(适合user_id数量有限场景)
如果业务中user_id数量较少且固定,可以用Metric Filter按user_id维度生成指标:
1. 创建Metric Filter
- 给目标日志组添加Metric Filter,过滤条件设置为:
$.type_of_event = "RESET_SUCCESSFUL" - 配置度量值为
1,设置维度键为user_id,维度值提取自日志中的$.user_id - 指定指标命名空间(如
UserResetMetrics)和指标名称(如ResetSuccessfulCount)
2. 创建CloudWatch告警
- 为每个user_id对应的指标创建告警:统计周期设为6小时,统计方式选
Sum,阈值设为x - 告警消息中可使用变量
${user_id}和${$metric_value},自动填充用户ID和事件次数 - 关联SNS主题接收告警
该方案局限性:若user_id动态新增,需要手动为新user_id创建告警;大量user_id会导致指标数量爆炸,增加管理成本。
内容的提问来源于stack exchange,提问作者MBK
相关产品推荐
相关产品推荐

