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

如何将多个AWS Lambda函数的日志统一发送到指定集中化日志组

Lambda日志统一归集解决方案

方案1:使用CloudWatch日志订阅过滤器 + 额外Lambda(你提到的方案完全可行)

这个是生产环境常用的成熟日志归集方案,具体实现步骤如下:

  • 提前创建好统一的集中日志组,比如命名为/aws/lambda/centralized-all-lambda-logs,提前配置好日志保留周期、KMS加密等符合你需求的规则。
  • 编写用于日志转发的Lambda函数,核心逻辑为接收订阅过滤器推送的加密压缩日志数据,解析后调用CloudWatch Logs的PutLogEvents接口写入目标集中日志组。需要给该Lambda配置对应的IAM权限:允许读取4个源Lambda的日志组内容,允许写入目标集中日志组。
    参考Python实现代码:
    import boto3
    import gzip
    import json
    from base64 import b64decode
    
    logs_client = boto3.client('logs')
    # 替换为你自己的集中日志组名
    TARGET_LOG_GROUP = '/aws/lambda/centralized-all-lambda-logs'
    
    def lambda_handler(event, context):
        # 解析订阅过滤器推送的日志数据
        compressed_data = b64decode(event['awslogs']['data'])
        uncompressed_data = gzip.decompress(compressed_data)
        log_data = json.loads(uncompressed_data.decode('utf-8'))
        
        log_events = []
        # 生成带源Lambda标识的日志流名,避免不同源日志流重名冲突
        log_stream_name = f"{log_data['logStream']}-{log_data['logGroup'].split('/')[-1]}"
        
        for event in log_data['logEvents']:
            # 日志内容前加上源日志组标识,方便后续筛选不同Lambda的日志
            log_events.append({
                'timestamp': event['timestamp'],
                'message': f"[{log_data['logGroup']}] {event['message']}"
            })
        
        # 写入目标日志组
        logs_client.create_log_stream(
            logGroupName=TARGET_LOG_GROUP,
            logStreamName=log_stream_name
        )
        logs_client.put_log_events(
            logGroupName=TARGET_LOG_GROUP,
            logStreamName=log_stream_name,
            logEvents=log_events
        )
    
  • 给4个源Lambda对应的日志组分别创建订阅过滤器,筛选条件留空即可匹配所有日志,目标选择刚才创建的转发Lambda。

提示:如果后续新增Lambda需要统一归集,仅需要给新增Lambda的日志组添加相同的订阅过滤器即可,无需修改转发逻辑。
注意:不要给转发Lambda自身的日志组配置指向自己的订阅过滤器,避免出现循环触发,产生不必要的费用。

方案2:CloudWatch跨日志组查询(零代码、无额外成本,适合仅需统一查询的场景)

如果你的核心需求只是统一查询所有Lambda的日志,不需要把日志实际复制到同一个日志组,可以直接用CloudWatch Logs Insights的跨日志组查询能力:

  • 打开CloudWatch控制台的Logs Insights页面
  • 日志组选择框里勾选你需要查询的4个/aws/lambda/开头的日志组
  • 直接写查询语句执行,结果会自动聚合所有选中日志组的内容。
    这个方案不需要额外编写代码、没有额外资源成本,适合只需要统一查询不需要统一存储归档的场景。

方案3:直接配置Lambda日志写入集中日志组(适合新部署/可重新配置的Lambda)

如果你的4个Lambda还在迭代部署中,可以直接修改Lambda的运行时配置,将所有日志直接输出到同一个集中日志组,不需要后续转发:

  • 修改Lambda函数的日志配置,指定日志组为你提前创建的统一日志组,覆盖默认的按函数名生成日志组的规则。
  • 建议在日志输出的时候加上函数名的标识字段,方便后续筛选不同Lambda的日志。

内容的提问来源于stack exchange,提问作者Eveline Ribka Nelwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:04