DenoのOpenTelemetryサポートについて
#Deno #OpenTelemetry #@opentelemetry/api
はじめに
Deno v2.1からOpenTelemetryサポートのための実験的な仕組みが追加されています (Deno v2.1で導入されたOpenTelemetryサポートを試してみる)
有効化方法
1. --unstable-otel もしくは deno.jsonで"unstable": ["otel"]を指定
2. OTEL_DENO=trueを設定
@deno/otel - Deno.telemetryと@opentelemetry/apiを連携させるためのDeno公式パッケージ
Deno v2.1.5以降からはこのパッケージの使用は不要です
設定
内部的にはopentelemetry_otlpが使われている
OTEL_DENO - trueを設定すると、Signalsの送信が有効化されます
OTEL_DENO_TRACING - falseを設定すると、Deno内部におけるDeno.serveやfetchへの計装を無効化できます
OTEL_DENO_CONSOLE - console.*によるLogsの送信を制御できます
OTEL_EXPORTER_OTLP_PROTOCOL
使用方法
Denoの内部において、以下のAPIはあらかじめ計装されています
Deno.serve
fetch
request() (node:http)
そのため、OTEL_DENO=true及び--unstable-otelを指定することで、上記APIの使用時に自動でSignalsが送信されます
また、console.logなどの各種APIによって出力されたログはLogsとして送信されます
個人的な検証のためのコードをdeno-otel-examplesに置いているため、もし興味があれば参照/活用ください🙏
その他
Add docs for instrumenting Deno (open-telemetry/opentelemetry.io#5962)
opentelemetry.ioへのドキュメントの追加
Deno Deployでのサポートについて
Deno Deploy Early Accessにて対応が進められているようです
変更履歴
Deno v2.1
feat: OpenTelemetry Tracing API and Exporting (denoland/deno#26710)
traces/logsの送信がサポート
console.*を呼ぶと、自動的にlogsがバックエンドへ送信されます
Deno.tracing APIが実装
feat(runtime): remove public OTEL trace API (denoland/deno#26854)
fix: otel resiliency (denoland/deno#26857)
Deno v2.1.2
feat: Instrument Deno.serve (denoland/deno#26964)
feat(unstable): Instrument fetch (denoland/deno#27057)
Deno v2.1.3
feat(unstable): add metrics to otel (denoland/deno#27143)
Metric Exporterの実装が追加 (Deno.telemetry.MetricExporter)
fix(unstable): otel context with multiple keys (denoland/deno#27230)
Deno v2.1.5
refactor(unstable): otel configuration (denoland/deno#27333)
様々な環境変数が追加
OTEL_SDK_DISABLED
OTEL_DENO - Signalsの送信を有効化したい場合は、これにtrueを設定する必要がある
OTEL_DENO_TRACING - falseを指定すると、fetchやDeno.serveなどの計装を無効化できるようです
OTEL_DENO_CONSOLE - console.*でのLogsの送信を制御するための環境変数
feat(unstable): add OTEL MeterProvider (denoland/deno#27240)
Deno.telemetry.MetricExporterが削除され、代わりにDeno.telemetry.MeterProviderが導入
これにより@opentelemetry/sdk-metricsを導入しなくてもMetricsの送信ができそうです
@opentelemetry/apiから提供されるmetrics.setGlobalMeterProviderなどで利用することが想定されています
OTEL_DENO_METRICSとOTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE環境変数が追加
feat(unstable): replace SpanExporter with TracerProvider (denoland/deno#27473)
Deno.telemetry.SpanExporterが削除
代わりに以下のAPIが追加
Deno.telemetry.tracerProvider (@opentelemetry/apiのtrace.setGlobalTracerProviderに渡せます)
contextManager (@opentelemetry/apiのcontext.setGlobalContextManagerに渡せます)
meterProvider (@opentelemetry/apiのmetrics.setGlobalMeterProviderに渡せます)
feat(unstable): no config npm:@opentelemetry/api integration (denoland/deno#27541)
@deno/otelの使用が不要に
globalThis[Symbol.for("opentelemetry.js.api.1")]にTracerProviderなどが予め登録されており、これを介して@opentelemetry/apiとの連携が行われるようです (参考: )
code:javascript
globalThisSymbol.for("opentelemetry.js.api.1")
// {
// version: "1.999.999",
// trace: class TracerProvider,
// context: class ContextManager,
// metrics: class MeterProvider
// }
Deno v2.1.7
feat(unstable): add basic support for otel trace links (denoland/deno#27727)
Deno v2.1.8
feat(unstable): support https otlp endpoints (denoland/deno#27743)
HTTPSエンドポイントへのSignalsの送信がサポート
下記の環境変数が追加されています
OTEL_EXPORTER_OTLP_CERTIFICATE
OTEL_EXPORTER_OTLP_CLIENT_KEY
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE
Deno v2.2
OpenTelemetryサポートが正式にアナウンスされました ()
feat(unstable): add basic support for otel trace links (denoland/deno#27727)
Span Linksの基本的なサポートも追加
これによりSpan#addLinkが動作するようです
Deno v2.2.3
fix(otel): don't throw when calling setActiveSpan at root (denoland/deno#28323)
モジュールのトップレベルでTracer#startActiveSpanを呼ぶとエラーが発生する問題が修正
Deno v2.2.4
feat(otel): span context propagators (denoland/deno#28460)
Context propagationがサポート
OTEL_PROPAGATORS環境変数にカンマ区切りでPropagatorを設定可能 (デフォルトはtracecontext,baggage)
現時点ではtracecontextとbaggageのみがサポート
feat(unstable/otel): add otel tracing to node:http.request (denoland/deno#28463)
node:http - request()が計装されています
Deno v2.2.5
feat(otel): basic event recording (denoland/deno#28552)
Span Eventsのサポートが導入
Span#addEventが動作するようです
Deno v2.2.7
feat: v8js metrics (denoland/deno#28592)
V8 JS Engine Runtime metricsがサポート
Metricsが有効化されていれば、自動で各指標が収集されます
Deno v2.3
feat(otel): support attributes on links and events (denoland/deno#28584)
Span Links/Span EventsへのAttributesのサポート
Deno v2.3.3
feat(otel): add events for boot failure and uncaught error (denoland/deno#29287)
boot_failure/uncaught_exceptionイベントが追加
fix: allow specifying otel config in --env-file (denoland/deno#29240)
OTEL_DENOやOTEL_EXPORTER_OTLP_PROTOCOLなどの環境変数を--env-fileオプション (.env) 経由で指定できるよう改善されています
Deno v2.3.6
fix(otel): set timestamp on opentelemetry log records (denoland/deno#28625)
LogにtimeUnixNanoが設定されるよう改善
Deno v2.4
DenoのOpenTelemetryサポートが安定化されました
Deno v2.4.1
feat(otel): support vsock transport for telemetry (denoland/deno#30001)
OTEL_DENO_VSOCK環境変数がサポート (おそらくDeno Deploy Early Access向けの機能)
関連ページ
Deno v2.1で導入されたOpenTelemetryサポートを試してみる
リンク