Vercel 日志实战:运行时日志、Log Drains 与 Serverless 排障
Vercel 日志中文实战:构建日志与运行时日志的区别、Vercel Dashboard 日志查看、Log Drains 外送配置(NDJSON/自定义 Header)、Serverless/Edge 函数的结构化日志写法、日志保留与限制,以及观测云接收告警落地方案。
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:
- 选 Custom Log Drain;
- 选择项目与日志源(Functions/Builds/Edge Requests/Firewall);
- 传输格式选 NDJSON(每行一个 JSON 对象,平台友好);
- Endpoint 填日志平台的 HTTP 接收地址;
- Custom Headers 加
Authorization: Bearer <token>做鉴权; - 保存后用 Test Log Drain 发送样例验证。
注意:Log Drains 需要 Pro 或 Enterprise 套餐。
观测云落地:Vercel 日志接入
- 接收:Log Drain 端点指向观测云 HTTP 日志接收地址(或 DataKit HTTP 输入插件作为中继),鉴权头同上;
source: vercel、service按项目区分。 - 解析:NDJSON 逐行解析为字段;Pipeline 提取函数名、状态码、耗时,映射标准
status/time。 - 检索告警:日志查看器按 service/函数名/status 过滤;监控器对函数错误(ERROR/超时)、5xx 访问日志设阈值,告警策略路由钉钉/企业微信/飞书。
- Serverless 特色分析:冷启动时长、内存超限、超时可从平台日志字段中聚合统计,进仪表板长期跟踪。
- 成本控制:Edge 请求访问日志量大走低频索引,函数 error 标准索引,历史数据归档对象存储。
常见问题(FAQ)
免费版 Vercel 日志保留多久?
Hobby 套餐运行时日志保留很短(小时级滚动窗口),且不支持 Log Drains。生产项目升级 Pro 并配置外送是标配动作。
Edge 函数和 Serverless 函数日志有区别吗?
两者都进运行时日志,字段结构一致;区别在运行时能力(Edge 是受限 API 子集)。日志写法与接入方式相同。
为什么我的 console.log 在 Vercel 日志里看不到?
常见原因:函数该次调用根本没执行(缓存命中/静态化)、部署版本不对、日志面板过滤条件过严。用请求 ID 精确过滤定位。
Log Drain 推送给平台失败会重试吗?
Vercel 对失败批次有有限重试,但长期不可达会丢失。观测云接收端高可用 + DataKit 中继缓冲可把丢失风险降到接近零。
系列阅读
- 上一篇:Heroku 日志实战
- 下一篇:GCP 日志实战
- 相关阅读:AWS Lambda 日志实战 | 微服务日志最佳实践