如何在Datadog中查看Lambda代理集成场景下的Lambda执行失败记录
LAMBDA_PROXY集成场景下Datadog默认将无未捕获异常的Lambda调用标记为正常,是官方默认埋点逻辑的已知特性,不需要替换集成模式,基于你已经接入的serverless-plugin-datadog,有三种落地成本极低的方案可以实现错误标记,按优先级排序如下:
方案1:开启插件内置的状态码检测(零业务代码侵入,优先推荐)
serverless-plugin-datadog v3.30及以上版本已经内置了Lambda Proxy响应格式的自动识别逻辑,不需要修改任何业务代码,只需要在serverless.yml的插件配置块开启对应参数即可:
custom: datadog: # 开启后插件会自动解析Lambda返回值中的statusCode字段 # 只要状态码≥400,就会自动给当前调用对应的Trace Span打上错误标记,面板同步显示为红色错误状态 enableApiGatewayErrorStatusCodeCheck: true # 可选:自定义错误状态码匹配规则,默认匹配所有4xx、5xx # errorStatusCodeRanges: ["5xx", "401", "403"]
配置完成后重新部署服务即可生效,所有返回错误状态码的调用,会和Lambda原生抛出未捕获异常的展示逻辑完全一致,关联日志、堆栈信息、调用链都能正常挂载。
该方案仅适配标准Lambda Proxy返回结构:即返回值为包含
statusCode、body字段的对象,如果你的项目对响应结构做了二次封装,选择方案2。
方案2:全局手动标记错误(适配自定义响应封装)
如果项目里做了统一响应封装,插件无法自动识别返回的状态码,可以在全局错误处理/统一响应出口位置,调用Datadog Lambda层内置的SDK手动标记错误,不需要逐个修改业务接口代码。
先确认插件配置中已经开启addLayers: true(默认开启),然后在你封装的统一错误返回函数中加入标记逻辑即可,以Node.js runtime为例:
const { markSpanAsError, sendDistributionMetric } = require('datadog-lambda-js'); // 项目原有统一错误响应函数 function buildErrorResponse(statusCode, errorDetail) { // 识别为错误响应时,手动给当前调用打错误标记 if (statusCode >= 400) { // 标记当前Span为错误,面板状态同步改为错误 markSpanAsError(new Error(`API请求错误,状态码:${statusCode},信息:${errorDetail.msg}`)); // 可选:上报自定义错误指标,方便配置错误率告警 sendDistributionMetric( 'custom.lambda.api_error', 1, `status_code:${statusCode}`, `function:${process.env.AWS_LAMBDA_FUNCTION_NAME}` ); } // 原有返回逻辑保持不变,不需要修改前端适配的响应格式 return { statusCode, body: JSON.stringify(errorDetail), headers: { // 原有跨域、响应头配置保持不变 } }; }
其他Runtime(Python/Go/Java等)逻辑完全一致,只需要调用对应语言Datadog Lambda SDK提供的mark_span_as_error等效方法即可。
方案3:Datadog控制台日志管线后置标记(零代码/配置改动)
如果暂时不方便修改服务配置或代码,可以直接在Datadog控制台的日志处理管线中新增规则:
- 匹配条件:
@http.status_code:>=400 AND @lambda.function_name:* AND meta.apigateway.integration:lambda_proxy - 处理动作:为匹配到的日志关联的Trace Span添加
error:true标签,同时生成错误事件
该方案完全不需要改动线上服务,但是标记存在1-2分钟的延迟,适合临时快速排查问题使用,长期场景还是建议选择前两种方案。
注意事项
- 不要为了让Datadog识别错误就直接抛出未捕获的业务异常:LAMBDA_PROXY模式下未捕获异常会直接返回502 Bad Gateway,响应格式不符合自定义规范,会影响前端兼容性。
- 上述方案标记的错误会自动计入
aws.lambda.errors官方指标,你之前配置的Lambda错误告警、错误率大盘不需要做额外调整即可正常统计。
内容的提问来源于stack exchange,提问作者Alejandro Barone

