# OpenTelemetry tích hợp sẵn của Deno

> Bật OTEL_DENO để Deno tự tạo span cho Deno.serve và fetch, gửi console thành log; giới hạn khi exporter không gửi lại và cách khắc phục.

Deno 2 có sẵn OpenTelemetry. Chỉ với một biến, Deno tạo span server cho mỗi request `Deno.serve`, span client cho mỗi `fetch`, gửi đầu ra `console.*` thành bản ghi log mang trace ID đang chạy, và xuất dữ liệu theo [bộ biến chuẩn](https://belvador.dev/vi/docs/otel/quickstart#2-dat-cac-bien-chuan). Không cần cài gói nào.

> **Đã kiểm ngày 2026-10-24** với deno 2.6.10: traces đạt, logs đạt, log mang trace/span của request. Giới hạn đã kiểm: không gửi lại khi 429/503.

## Chạy

```bash
export OTEL_DENO=true
deno run --allow-net --allow-env main.ts
```

Deno 2.2 và 2.3 còn cần thêm cờ `--unstable-otel`; các bản hiện nay thì không.

## Logs

`console.log` thành bản ghi `INFO`, `console.warn` thành `WARN` và `console.error` thành `ERROR`, mỗi bản ghi mang trace ID và span ID của request nó chạy trong đó. Đầu ra vẫn hiện trên terminal như trước.

## Giới hạn: không gửi lại

Lần chạy của Belvador cho thấy exporter có sẵn của Deno **không** gửi lại một lô sau khi nhận `429` hoặc `503` — lô đó bị mất. Belvador chỉ trả các mã này khi chạm hạn mức hoặc giới hạn tốc độ, hoặc khi edge tạm thời không nhận được, nhưng nếu khi đó mất một lô là đáng kể, hãy chạy một [Collector](https://belvador.dev/vi/docs/otel/collector) cạnh app và cho Deno gửi tới nó; Collector có hàng đợi và gửi lại:

```bash
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
unset OTEL_EXPORTER_OTLP_HEADERS   # Collector giữ khoá Belvador
```

Phép kiểm này chạy lại ở mỗi lần chứng nhận, nên ghi chú sẽ tự biến mất khi Deno bắt đầu gửi lại.

## Deno Deploy

Deno Deploy tự cấu hình telemetry của nó; việc gửi telemetry đó tới Belvador chưa được kiểm.
