You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CloudWatch实现Lambda批量失败告警并获取具体故障信息

解决Lambda批量错误告警及故障函数定位问题

方案1:Metric Math聚合告警+辅助Lambda定位故障

保持现有聚合告警的基础上,通过SNS触发辅助Lambda来定位具体故障函数:

  • 配置原SNS主题触发一个辅助Lambda函数,当告警触发时,该函数调用CloudWatch get-metric-data API,查询最近周期内所有Lambda的Errors指标。
  • 筛选出错误数大于0的函数,整理成明细通知转发到目标渠道。
  • 示例Python代码片段:
    import boto3
    import json
    
    cloudwatch = boto3.client('cloudwatch')
    sns = boto3.client('sns')
    
    def lambda_handler(event, context):
        # 查询最近5分钟内所有Lambda的错误指标
        metric_response = cloudwatch.get_metric_data(
            MetricDataQueries=[
                {
                    'Id': 'error_query',
                    'MetricStat': {
                        'Metric': {
                            'Namespace': 'AWS/Lambda',
                            'MetricName': 'Errors',
                            'Dimensions': [{'Name': 'FunctionName'}]
                        },
                        'Period': 300,
                        'Stat': 'Sum'
                    },
                    'ReturnData': True
                }
            ],
            StartTime=context.get_remaining_time_in_millis()/1000 - 300,
            EndTime=context.get_remaining_time_in_millis()/1000
        )
    
        # 提取故障函数列表
        faulty_funcs = []
        for result in metric_response['MetricDataResults']:
            if result['Values'] and result['Values'][0] > 0:
                func_name = next(d['Value'] for d in result['Labels'] if d['Name'] == 'FunctionName')
                faulty_funcs.append(f"{func_name}: {result['Values'][0]} 次错误")
    
        # 发送明细通知
        if faulty_funcs:
            message = f"Lambda错误告警触发,故障函数列表:\n- {chr(10)}- ".join(faulty_funcs)
            sns.publish(
                TopicArn='arn:aws:sns:your-region:your-account-id:your-target-topic',
                Message=message
            )
        return {'statusCode': 200}
    

方案2:CloudWatch Logs Insights告警直接关联故障函数

利用日志查询能力直接生成带明细的告警:

  • 创建Logs Insights查询,从Lambda日志中筛选错误并按函数分组:
    fields @timestamp, @message, @logStream
    | filter @message like /ERROR|Exception|Traceback/
    | parse @logStream /aws\/lambda\/(?<functionName>[^\/]+)/
    | stats count(*) as errorCount by functionName
    | filter errorCount > 0
    
  • 基于该查询创建告警,阈值设为1。告警触发时,通知内容会自动包含故障函数名称和错误计数,还能直接跳转到日志详情查看错误内容。

方案3:EventBridge规则实时捕捉Lambda错误事件

直接监听Lambda执行失败事件,获取最完整的故障信息:

  • 创建EventBridge规则,事件模式选择AWS Lambda,事件类型指定为Lambda Function Invocation Result - Failure。
  • 规则触发时,事件内容包含故障函数名、错误信息、堆栈跟踪、请求ID等完整上下文。
  • 将规则目标设为SNS主题或直接对接通知渠道,实时接收明细告警。

方案对比

方案核心优势注意事项
Metric Math+辅助Lambda基于指标聚合,适合批量统计场景需要维护辅助Lambda,有少量开发成本
Logs Insights告警直接关联日志,可查看错误详情依赖日志采集完整性,查询有轻微延迟
EventBridge规则实时性强,错误上下文最完整单条错误即触发通知,可能需要添加聚合逻辑避免刷屏

内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:15:41