# 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.

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](https://opentelemetry.io) 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](https://belvador.dev/vi/docs/quickstart)) |
| Một job theo lịch không chạy | [Monitor](https://belvador.dev/vi/docs/monitors/overview) |

## 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](https://belvador.dev/vi/docs/otel/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í](https://belvador.dev/vi/docs/otel/sampling-and-cost)).

## 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)](https://belvador.dev/vi/docs/otel/node) | 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)](https://belvador.dev/vi/docs/otel/python) | 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)](https://belvador.dev/vi/docs/otel/go) | 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)](https://belvador.dev/vi/docs/otel/java) | 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)](https://belvador.dev/vi/docs/otel/deno) | 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](https://belvador.dev/vi/docs/otel/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)](https://belvador.dev/vi/docs/otel/cloudflare-workers) | Tự động · chưa kiểm, dự kiến | Tự động · chưa kiểm, dự kiến | — |
| [Vercel (Trace Drains)](https://belvador.dev/vi/docs/otel/nextjs-vercel) | Tự động · chưa kiểm, dự kiến | Không thể | — |
| [Supabase (log drain OTLP)](https://belvador.dev/vi/docs/otel/supabase-log-drains) | 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](https://belvador.dev/vi/docs/otel/quickstart#2-dat-cac-bien-chuan) — 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](https://belvador.dev/vi/docs/sdk/tracing#khi-da-dung-opentelemetry)).

## Tiếp theo

1. [Gửi traces và logs đầu tiên](https://belvador.dev/vi/docs/otel/quickstart).
2. Chọn runtime: [Node.js](https://belvador.dev/vi/docs/otel/node), [Python](https://belvador.dev/vi/docs/otel/python), [Go](https://belvador.dev/vi/docs/otel/go), [Java](https://belvador.dev/vi/docs/otel/java), [Deno](https://belvador.dev/vi/docs/otel/deno), hoặc chuyển tất cả qua [Collector](https://belvador.dev/vi/docs/otel/collector).
3. Đọc [Quyền riêng tư](https://belvador.dev/vi/docs/otel/privacy) trước khi bật thêm instrumentation.
