Traces và logs bằng OpenTelemetry
Belvador nhận traces và logs OTLP từ SDK OpenTelemetry chuẩn, lưu trên node của bạn và nối chúng với lỗi; metrics khi bạn bật; runtime nào đã kiểm, cái gì không thu.
Trong bài này
Lỗi cho bạn biết có chỗ hỏng. Traces cho thấy đường đi của một request — dịch vụ nào gọi dịch vụ nào, mỗi bước tốn bao lâu — còn logs cho thấy code đã ghi gì trên đường đi đó. Belvador nhận cả hai từ các SDK OpenTelemetry chuẩn mà dịch vụ của bạn có thể đã dùng, qua OTLP/HTTP, và giữ chúng trên chính node của bạn, cạnh các lỗi.
| Bạn muốn xem… | Dùng |
|---|---|
| Đường đi của một request qua các dịch vụ và thời gian tốn ở đâu | Traces (mục này) |
| Code đã ghi log gì trong request đó | Logs (mục này) |
| Exception, stack trace và tần suất xảy ra | Theo dõi lỗi (bắt đầu nhanh) |
| Một job theo lịch không chạy | Monitor |
Bạn có gì#
Traces — danh sách trace và span kèm biểu đồ theo thời gian, lọc theo project, môi trường, dịch vụ và khoảng thời gian, và waterfall của mọi span trong một trace với thuộc tính và event của từng span.
Logs — tìm theo chữ, dịch vụ, môi trường, mức độ hoặc trace ID, và mở các dòng được ghi ngay trước và sau một dòng.
Nối với lỗi — issue có mục Logs quanh lỗi: log của trace chứa lỗi khi lỗi mang trace ID, nếu không thì log cùng project và môi trường quanh thời điểm đó. Event lỗi và trace chứa nó có chung trace ID, nên bạn đi qua lại được giữa hai bên.
Bằng chứng kết nối — tab Kết nối của project liệt kê dịch vụ nào đã gửi traces hay logs, bằng SDK nào, lần cuối khi nào.
Không phải là#
Metrics phải bật mới có. Belvador lưu metrics OTLP (một điểm mỗi phút) khi bạn bật — xem Metrics. Bộ biến chuẩn để metrics tắt.
Không tracing trên trình duyệt. Khoá ingest là bí mật: gửi traces và logs từ máy chủ, worker và Collector, không bao giờ từ code chạy trong trình duyệt.
Không phải APM đầy đủ. Không có bản đồ dịch vụ, profiling hay session replay. Traces và logs được giữ để gỡ lỗi, trong thời gian có hạn (xem Lấy mẫu và chi phí).
Runtime đã kiểm#
Với từng runtime dưới đây, Belvador chạy một app thật với bản sao đầy đủ của đường dữ liệu trên máy (edge, relay, node và nơi lưu) rồi đọc lại từng span và log. Runtime chỉ được ghi đã kiểm khi lần chạy đó đạt: một trace có span server và span client, một dòng log đúng mức độ và mang trace ID của request, không lưu bí mật nào từ request, exporter gửi lại sau khi gặp 503, và — ở runtime tham chiếu — khoá sai bị từ chối, node tắt hai phút không mất dữ liệu, app vẫn trả lời bình thường khi không gọi được Belvador.
| Runtime | Traces | Logs | Đã kiểm với |
|---|---|---|---|
| Node.js (OpenTelemetry, CJS + ESM) | Tự động · đã kiểm | Tự động · đã kiểm · gắn trace | node 22.23.4, @opentelemetry/sdk-node 0.300.0, @opentelemetry/auto-instrumentations-node 0.82.0, pino 10.4.0 (2026-10-24) |
| Python (OpenTelemetry) | Tự động · đã kiểm | Tự động · đã kiểm · gắn trace | python 3.12.15, opentelemetry-distro 0.66b1, opentelemetry-sdk 1.45.1, flask 3.1.3 (2026-10-25) |
| Go (OpenTelemetry) | Bạn gọi · đã kiểm | Bạn gọi · đã kiểm · gắn trace | go 1.27.3, go.opentelemetry.io/otel v1.47.0, otelhttp v0.72.0, otelslog v0.21.0 (2026-10-24) |
| Java (OpenTelemetry Java agent) | Tự động · đã kiểm | Tự động · đã kiểm · gắn trace | java 21.0.12.1, opentelemetry-javaagent 2.32.0 (2026-10-24) |
| Deno (OpenTelemetry tích hợp sẵn) | Tự động · đã kiểm · không gửi lại khi 429/503 | Tự động · đã kiểm · gắn trace · không gửi lại khi 429/503 | deno 2.6.10 (2026-10-24) |
| OpenTelemetry Collector | Bạn gọi · đã kiểm | Bạn gọi · đã kiểm | otelcol-contrib 0.163.1, telemetrygen v0.163.0 (2026-10-27) |
| Cloudflare Workers (xuất OTLP có sẵn) | Tự động · chưa kiểm, dự kiến | Tự động · chưa kiểm, dự kiến | — |
| Vercel (Trace Drains) | Tự động · chưa kiểm, dự kiến | Không thể | — |
| Supabase (log drain OTLP) | Không thể | Tự động · chưa kiểm, dự kiến | — |
Ngôn ngữ khác (.NET, Ruby, PHP, Rust, Bun) chạy theo cùng cách — SDK OpenTelemetry nào xuất OTLP/HTTP cũng đọc cùng bộ biến — nhưng Belvador chưa chạy thử, nên không ghi là đã kiểm.
Dữ liệu nằm ở đâu#
Span và bản ghi log chỉ được lưu trên node của workspace bạn. Edge của Belvador nhận từng request OTLP qua TLS, kiểm khoá và giới hạn, rồi chuyển cho node; nếu node đang tắt, request chờ ở edge, được mã hoá bằng khoá của node — tối đa 15 phút với traces và logs — và được chuyển khi node kết nối lại. Cơ sở dữ liệu của Belvador chỉ giữ metadata: dịch vụ và SDK nào đã gửi, số lượng và dung lượng theo từng loại, và biên nhận kiểm kết nối.
Chỉ một bên làm chủ tracing#
Mỗi tiến trình chỉ chạy một bộ tracing. Nếu tiến trình đã có OpenTelemetry, hãy thêm Belvador làm đích xuất bằng các biến trong phần bắt đầu nhanh — đừng thêm SDK thứ hai cũng tạo span. Các SDK Belvador (@belvador/*) chỉ gửi lỗi: chúng không bao giờ tạo span, và với tuỳ chọn otel chúng gắn ID của span OpenTelemetry đang chạy vào từng lỗi để lỗi và trace khớp nhau (xem Liên kết request).
Tiếp theo#
Bài viết về chủ đề này
Tất cả bài viết- Observability cho AI agent: những lỗi vẫn trả về 20060 lượt chạy agent có lỗi tool cài sẵn: lần nào cũng trả 200, không báo lỗi nào. Trace cho thấy gì, và khách được nói gì. Kèm checklist cần cài.
- Trace tool call bị lỗi của agent mà không bỏ sót hay đếm trùng lỗiSpan status, exception event và báo lỗi cho tool call của agent khi lỗi hoặc retry, với số liệu từ 60 lần chạy agent và một cách sửa trong handler.
Thấy chỗ sai hoặc thiếu? Gửi cho chúng tôi: hello@belvador.dev