Vercel 日志实战:运行时日志、Log Drains 与 Serverless 排障

Vercel 日志中文实战:构建日志与运行时日志的区别、Vercel Dashboard 日志查看、Log Drains 外送配置(NDJSON/自定义 Header)、Serverless/Edge 函数的结构化日志写法、日志保留与限制,以及观测云接收告警落地方案。

最佳实践
Vercel 日志实战:运行时日志、Log Drains 与 Serverless 排障技术指南封面

Vercel 作为 Serverless/Edge 部署平台,其日志体系围绕"构建 + 运行时"两条线展开,且受 Serverless 特性影响(冷启动、实例易失),日志外送几乎是刚需。本文讲清 Vercel 日志的查看、外送与结构化实践,并给出观测云平台落地方案。

核心要点速览

  • 两类日志:构建日志(Build Logs,部署过程)与运行时日志(Runtime Logs,函数执行)。
  • 运行时日志保留有限:免费/低档套餐保留期短,长期留存与分析必须配置 Log Drains 外送。
  • Log Drains 需要 Pro/Enterprise 套餐:以 NDJSON 格式批量 POST 到自定义端点。
  • 结构化 JSON 输出是 Serverless 日志的硬要求:实例转瞬即逝,日志必须即产即走、平台可查。

1. Vercel 的日志类型

类型 内容 查看位置
Build Logs 依赖安装、编译、静态生成过程 部署详情页
Runtime Logs Serverless/Edge 函数执行的 console 输出、错误 项目 Logs 面板
Access Logs / Firewall 请求与 WAF 事件(按套餐) Logs 面板 / Drains

运行时日志里每条函数日志自动附带:时间戳、请求 ID、函数名、部署 ID、区域。按请求 ID 过滤即可还原单次调用的全部输出。

2. Serverless 函数的日志写法

// Next.js API Route / Serverless Function
export async function POST(req) {
  const body = await req.json();
  console.log(JSON.stringify({
    level: "info",
    msg: "订单创建",
    order_id: body.orderId,
    ts: new Date().toISOString(),
  }));
  ...
}

要点:JSON 单行输出(多行会被拆散)、必带业务 ID(order_id/user_id)、正确分级(console.error 进错误级别)。Edge Runtime 用法相同(受限于 Edge API 子集)。

3. Log Drains:外送到日志平台

Vercel Dashboard → Team Settings → Log Drains → Add Log Drain:

  1. 选 Custom Log Drain;
  2. 选择项目与日志源(Functions/Builds/Edge Requests/Firewall);
  3. 传输格式选 NDJSON(每行一个 JSON 对象,平台友好);
  4. Endpoint 填日志平台的 HTTP 接收地址;
  5. Custom Headers 加 Authorization: Bearer <token> 做鉴权;
  6. 保存后用 Test Log Drain 发送样例验证。

注意:Log Drains 需要 Pro 或 Enterprise 套餐

观测云落地:Vercel 日志接入

  1. 接收:Log Drain 端点指向观测云 HTTP 日志接收地址(或 DataKit HTTP 输入插件作为中继),鉴权头同上;source: vercelservice 按项目区分。
  2. 解析:NDJSON 逐行解析为字段;Pipeline 提取函数名、状态码、耗时,映射标准 status/time
  3. 检索告警:日志查看器按 service/函数名/status 过滤;监控器对函数错误(ERROR/超时)、5xx 访问日志设阈值,告警策略路由钉钉/企业微信/飞书。
  4. Serverless 特色分析:冷启动时长、内存超限、超时可从平台日志字段中聚合统计,进仪表板长期跟踪。
  5. 成本控制:Edge 请求访问日志量大走低频索引,函数 error 标准索引,历史数据归档对象存储。

常见问题(FAQ)

免费版 Vercel 日志保留多久?

Hobby 套餐运行时日志保留很短(小时级滚动窗口),且不支持 Log Drains。生产项目升级 Pro 并配置外送是标配动作。

Edge 函数和 Serverless 函数日志有区别吗?

两者都进运行时日志,字段结构一致;区别在运行时能力(Edge 是受限 API 子集)。日志写法与接入方式相同。

为什么我的 console.log 在 Vercel 日志里看不到?

常见原因:函数该次调用根本没执行(缓存命中/静态化)、部署版本不对、日志面板过滤条件过严。用请求 ID 精确过滤定位。

Log Drain 推送给平台失败会重试吗?

Vercel 对失败批次有有限重试,但长期不可达会丢失。观测云接收端高可用 + DataKit 中继缓冲可把丢失风险降到接近零。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台