OpenTelemetry 可观测性

使用 Deno 内置 OpenTelemetry 导出日志、指标、追踪与运行时自动埋点

Deno 内置 OpenTelemetry 集成,可以通过 OTLP 导出运行时指标、HTTP traces、console 日志和应用自定义 telemetry。

最短验证

OTEL_DENO=true \
OTEL_EXPORTER_OTLP_PROTOCOL=console \
deno run --allow-net main.ts

console exporter 适合确认信号是否产生;生产通常把 OTLP 发送到 Collector:

OTEL_DENO=true \
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318 \
OTEL_SERVICE_NAME=orders-api \
deno run --allow-net=0.0.0.0:8000,otel-collector:4318 main.ts

运行时读取 OTEL 配置与应用调用 Deno.env.get() 是不同路径;后者仍受 --allow-env 控制。无论哪种方式,都把 telemetry endpoint、headers 和 service name 纳入明确配置契约,不在日志中输出 header 值。

自定义 spans

import { trace } from "npm:@opentelemetry/api";

const tracer = trace.getTracer("orders");
await tracer.startActiveSpan("create-order", async (span) => {
  try {
    span.setAttribute("order.channel", "web");
    // business operation
  } catch (error) {
    span.recordException(error as Error);
    throw error;
  } finally {
    span.end();
  }
});

生产边界

  • 不把 token、Cookie、Authorization 或完整 prompt 写入 span attributes。
  • 为请求、数据库和工具调用传递 trace context。
  • 采样率、导出超时和队列大小必须有上限。
  • 监控 exporter 自身失败,不能让 telemetry 阻塞核心请求。
  • 本地、CI、预览和生产使用不同 service/environment 属性。

官方依据:OpenTelemetry

输入关键词搜索全部文档。