AWS Lambda 日志实战:系统日志解读、JSON 结构化与成本控制

AWS Lambda 日志中文实战:START/END/REPORT 系统日志解读、CloudWatch 日志组与日志流结构、JSON 结构化日志开启方法、REPORT 指标字段(Duration/Billed/Memory)、Lambda Layer 统一日志配置、成本优化,以及观测云接入告警落地方案。

最佳实践
AWS Lambda 日志实战:系统日志解读、JSON 结构化与成本控制技术指南封面

Lambda 排障需要把同次调用的日志、耗时和内存使用对应起来。本文介绍系统日志、JSON 格式与保留策略,并说明通过 DataKit 扩展将日志接入观测云的步骤。

核心要点速览

  • 每次调用产生三条系统日志:START(开始)、END(结束)、REPORT(耗时/内存/计费摘要)——REPORT 是性能与成本分析的金矿。
  • 日志组按函数命名:/aws/lambda/<函数名>,组内日志流按执行环境实例划分。
  • JSON 结构化日志可一键开启:函数配置的 Log format 设为 JSON,系统与自定义日志全部结构化。
  • CloudWatch 成本可优化:外送第三方平台后可收紧 CloudWatch 写入与保留。

1. 解读 Lambda 系统日志

INIT_START Runtime Version: nodejs:22.v24 ...
START RequestId: 765b52b4-... Version: $LATEST
END RequestId: 765b52b4-...
REPORT RequestId: 765b52b4-... Duration: 259.72 ms Billed Duration: 260 ms
       Memory Size: 128 MB Max Memory Used: 69 MB Init Duration: 189.15 ms
  • INIT_START:冷启动初始化(新执行环境才有),含运行时版本与 Init Duration——冷启动耗时优化的依据;
  • START/END:调用的开始与结束,RequestId 串联该次调用的所有日志;
  • REPORT:Duration(实际执行)、Billed Duration(计费时长)、Memory Size(分配)vs Max Memory Used(实际峰值)——Memory 长期远低于分配值说明可以降配省钱。

2. 日志组与日志流结构

日志自动写入 CloudWatch 日志组 /aws/lambda/<函数名>;组内每个执行环境实例一个日志流(YYYY/MM/DD/[版本]<实例ID>)。冷启动产生新流,热复用期间写同一流——同一个 RequestId 的所有日志在同一流内,按 RequestId 过滤即还原单次调用。

3. 开启 JSON 结构化日志

函数配置 → 监控与操作工具 → 日志格式(Log format)设为 JSON:

{
  "time": "2026-08-25T14:55:35.345Z",
  "type": "platform.report",
  "record": {
    "requestId": "88c76e69-...",
    "metrics": {"durationMs": 2226.333, "billedDurationMs": 2227, "memorySizeMB": 128, "maxMemoryUsedMB": 88},
    "status": "success"
  }
}

系统日志与应用日志统一 JSON 化;应用中 console.log 输出合法 JSON 对象时会被自动解析进 message 字段。这是 Lambda 日志可机器分析的关键一步。

4. 用 Lambda Layer 统一日志配置

团队内多个函数共享日志格式?把日志库配置打进 Lambda Layer:

pino-layer/
└── nodejs/
    └── index.js    # 导出配置好的 logger

函数里 import { logger } from '/opt/nodejs/index.js' 即用——所有函数日志格式一致,平台侧解析规则一份就够。

5. 成本治理

  • 函数日志保留期默认永久——按日志组改 7-30 天;
  • 高频函数日志量惊人:应用侧控制级别,平台侧评估是否全量保留;
  • 外送前后分别统计 CloudWatch、转发链路和接收端的费用;确认查询、重试与保留要求后,再调整 CloudWatch 保留期。

6. 将 Lambda 日志接入观测云

需要跨函数查询时,可使用官方 AWS Lambda 扩展 采集指标和日志。该集成标为 Experimental,先在测试函数验证:

  1. 按函数架构选择扩展包,创建 DataKit Layer 并添加到函数。
  2. 配置 ENV_DATAWAY,指向工作空间对应的接收地址,限制 Token 的访问权限。
  3. 执行一次成功调用和一次可控失败调用,核对函数名、时间、日志及耗时字段是否到达;不要把 CloudWatch JSON 字段名直接当作接入后的字段名。
  4. 用实际收到的字段筛选失败调用,再配置告警并验证通知。确认采集可靠后,才调整原有日志保留策略。

常见问题(FAQ)

REPORT 里的 Init Duration 是什么?

冷启动初始化耗时(运行环境创建 + 代码初始化)。只在新执行环境的首次调用出现。持续偏高说明初始化代码重或包太大——优化依赖体积、考虑预置并发(Provisioned Concurrency)。

日志里找得到超时的调用吗?

应按 RequestId 检查同次调用的超时信息和平台状态;只有缺少 END 不能单独证明超时,也可能是日志尚未到达。接入观测云后,先核对实际收到的错误和超时字段,再设置查询条件。

函数并发很高时日志流怎么对应?

每个并发执行环境一个流。排障不用关心流——按 RequestId 或时间窗过滤,平台自动跨流检索。

可以不写 CloudWatch 直接外送吗?

可评估扩展采集路径,但不要在验证前移除原有日志通道。应先测试失败调用、网络中断和函数结束时的日志到达情况,再决定是否调整 CloudWatch 写入权限与保留策略。

系列阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台