SigNoz Cloud - This page is relevant for SigNoz Cloud editions.
Self-Host - This page is relevant for self-hosted SigNoz editions.

Deno OpenTelemetry Instrumentation

This guide shows you how to instrument your Deno application with OpenTelemetry and send traces, metrics, and logs to SigNoz. Deno has built-in support for OpenTelemetry, making it easy to get started without complex dependencies.

Prerequisites

Send telemetry to SigNoz

Deno auto-instrumentation automatically captures:

  • Incoming HTTP requests (Deno.serve)
  • Outgoing requests (fetch)
  • Runtime metrics (Heap usage, GC duration)
  • Console logs (console.log, console.error)

Run the application

Step 1. Set environment variables

export OTEL_DENO=true
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.<region>.signoz.cloud:443"
export OTEL_EXPORTER_OTLP_HEADERS="signoz-ingestion-key=<your-ingestion-key>"
export OTEL_SERVICE_NAME="<service-name>"

Replace the following:

  • <region>: Your SigNoz Cloud region.
  • <your-ingestion-key>: Your SigNoz ingestion key.
  • <service-name>: Name of your service (e.g., deno-app).

Step 2. Run the application

deno run --allow-env --allow-net app.ts
📝 Note

The OTEL_DENO=true flag enables the built-in instrumentation for http, fetch, runtime metrics, and console logs.

By default, auto-instrumentation captures logs as well, to disable logs set the following environmental variable:

export OTEL_DENO_CONSOLE=ignore

Validate

After running your Deno application with OpenTelemetry enabled, you should see traces appearing in SigNoz:

  1. Navigate to the Services tab in SigNoz
  2. Look for your service name (the value you set in OTEL_SERVICE_NAME)
  3. Click on your service to view traces and spans
  4. You should see spans for HTTP requests handled by Deno.serve and outgoing fetch calls
  5. Go to the Logs tab and filter by service.name to see console logs
  6. Go to the Dashboards tab to view runtime metrics (e.g. process.runtime.deno.* or similar)

Troubleshooting

No data in SigNoz

  • Ensure OTEL_DENO=true is set.
  • Check that OTEL_EXPORTER_OTLP_ENDPOINT is correct and includes the protocol (e.g., https://).
  • Verify your ingestion key in OTEL_EXPORTER_OTLP_HEADERS.
  • Ensure your application runs long enough to export data (OpenTelemetry batches exports).

Console Logs

Deno captures console.log and console.error by default when OTEL_DENO=true. These are exported as logs to OpenTelemetry.

You can configure this behavior with OTEL_DENO_CONSOLE:

  • capture: Logs are emitted to stdout/stderr AND exported (default).
  • ignore: Logs are ONLY printed to console (not exported).

Setup OpenTelemetry Collector (Optional)

What is the OpenTelemetry Collector?

The OTel Collector acts as a middleman between your app and SigNoz. Instead of sending data directly, your application sends everything to the Collector first, which then forwards it along.

Why use it?

  • Cleaning up data — Filter out noisy traces you don't care about, or remove sensitive info before it leaves your servers.
  • Keeping your app lightweight — Let the Collector handle batching, retries, and compression instead of your application code.
  • Adding context automatically — The Collector can tag your data with useful info like which Kubernetes pod or cloud region it came from.
  • Future flexibility — Want to send data to multiple backends later? The Collector makes that easy without changing your app.

See Switch from direct export to Collector for step-by-step instructions.

For more details, see Why use the OpenTelemetry Collector? and the Collector configuration guide.

Next Steps

Get Help

If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack.

If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.

Last updated: February 28, 2026

Edit on GitHub