Traces từ Vercel và Next.js: từ app hoặc bằng Trace Drain
SDK Node của OpenTelemetry trong instrumentation.ts, Trace Drains cho gói Pro và Enterprise, và vì sao Log Drains cần Collector.
Trong bài này
Có hai cách đưa traces từ app trên Vercel tới Belvador: để app tự xuất (mọi gói), hoặc để Vercel chuyển tiếp traces của chính nó bằng Trace Drain (gói Pro và Enterprise). Logs cần cách thứ nhất — Log Drains của Vercel không dùng OTLP.
Chưa kiểm: cách cài này theo tài liệu của nhà cung cấp; Belvador chưa chạy trọn đường gửi.
Từ app của bạn (Next.js)#
Next.js nạp instrumentation.ts lúc khởi động. Xuất bằng SDK OpenTelemetry chuẩn cho Node, chỉ trong runtime Node.js — nó không chạy trong runtime Edge:
// instrumentation.tsexport async function register() { if (process.env.NEXT_RUNTIME === "nodejs") { await import("./instrumentation.node"); }}// instrumentation.node.tsimport { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";import { NodeSDK } from "@opentelemetry/sdk-node";new NodeSDK({ instrumentations: [getNodeAutoInstrumentations()] }).start();Cài @opentelemetry/sdk-node và @opentelemetry/auto-instrumentations-node, rồi đặt bộ biến chuẩn ở Project Settings → Environment Variables — khoá là biến nhạy cảm, không bao giờ là biến NEXT_PUBLIC_. SDK đọc endpoint, header, tên dịch vụ và môi trường từ đó, và gửi log của Pino, Bunyan hay Winston như ở trang Node.js.
@vercel/otel (registerOTel) cũng dùng được nếu bạn muốn; hãy đưa cho nó một exporter OTLP cụ thể để nó không chọn exporter do Vercel cấu hình.
Hàm serverless bị đóng băng khi response đã gửi, nên một lô có thể chờ tới request sau hoặc bị mất. Belvador chưa đo mức độ trên Vercel.
Bằng Trace Drain (Pro, Enterprise)#
Vercel chuyển tiếp các trace nó ghi cho deployment của bạn — không cần code. Ở Team Settings → Drains → Add Drain:
| Trường | Giá trị |
|---|---|
| Data | Traces |
| Projects | Các project cần chuyển tiếp |
| Endpoint | https://ingest.belvador.dev/otlp/<project-id>/v1/traces |
| Format | Protobuf |
| Custom header | Authorization: Bearer <khoá ingest> |
Dùng khoá ingest có Traces. Vercel còn thêm header x-vercel-signature riêng; Belvador xác thực bằng khoá bearer và bỏ qua header đó. Quy tắc lấy mẫu chạy từ trên xuống và bỏ request không khớp quy tắc nào; không có quy tắc thì mọi trace được chuyển. Thuộc tính resource gồm vercel.projectId và vercel.deploymentId.
Logs từ Log Drains của Vercel#
Log Drains gửi JSON hoặc NDJSON của Vercel, không phải OTLP, nên endpoint logs của Belvador không đọc trực tiếp được. Hãy gửi logs từ app như ở trên, hoặc đặt một Collector ở giữa với receiver đọc được định dạng của Vercel.
Trạng thái#
Cả hai cách làm theo tài liệu của Vercel và OpenTelemetry; Belvador chưa chạy chúng trên Vercel, nên được ghi là chưa kiểm. Sau khi cài, chạy phép kiểm kết nối và tìm dịch vụ của bạn trong Dịch vụ đã thấy.
Thấy chỗ sai hoặc thiếu? Gửi cho chúng tôi: hello@belvador.dev