Bỏ qua tới nội dung
Mục lục

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.

Bản Markdown
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 ở đâuTraces (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 raTheo dõi lỗi (bắt đầu nhanh)
Một job theo lịch không chạyMonitor

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.

RuntimeTracesLogsĐã kiểm với
Node.js (OpenTelemetry, CJS + ESM)Tự động · đã kiểmTự động · đã kiểm · gắn tracenode 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ểmTự động · đã kiểm · gắn tracepython 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ểmBạn gọi · đã kiểm · gắn tracego 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ểmTự động · đã kiểm · gắn tracejava 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/503Tự động · đã kiểm · gắn trace · không gửi lại khi 429/503deno 2.6.10 (2026-10-24)
OpenTelemetry CollectorBạn gọi · đã kiểmBạn gọi · đã kiểmotelcol-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ếnTự động · chưa kiểm, dự kiến—
Vercel (Trace Drains)Tự động · chưa kiểm, dự kiếnKhô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#

  1. Gửi traces và logs đầu tiên.

  2. Chọn runtime: Node.js, Python, Go, Java, Deno, hoặc chuyển tất cả qua Collector.

  3. Đọc Quyền riêng tư trước khi bật thêm instrumentation.

Bài viết về chủ đề này

Tất cả bài viết

Thấy chỗ sai hoặc thiếu? Gửi cho chúng tôi: hello@belvador.dev