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

DBOS OpenTelemetry Instrumentation

This guide shows you how to instrument your DBOS application with OpenTelemetry and send telemetry to SigNoz. With OTLP enabled, DBOS can export traces and logs. DBOS automatically constructs hierarchical traces for workflows and their steps, and traces each HTTP request if you use FastAPI or Flask.

Prerequisites

Tested with Python 3.13 and DBOS version 2.17.0.

Send telemetry to SigNoz

Step 1. Install DBOS OpenTelemetry dependencies

pip install "dbos[otel]"

Step 2. Enable OpenTelemetry export in DBOS

In your Python application code, update the DBOSConfig object you pass to DBOS. Enable OTLP export and set both the traces and logs endpoints:

main.py
from dbos import DBOS, DBOSConfig

config: DBOSConfig = {
    "name": "<service-name>",
    "enable_otlp": True,
    "otlp_traces_endpoints": ["https://ingest.<region>.signoz.cloud:443/v1/traces"],
    "otlp_logs_endpoints":   ["https://ingest.<region>.signoz.cloud:443/v1/logs"],
}

DBOS(config=config)

Verify these values:

  • <service-name>: A descriptive name for your service (e.g., payment-service)
  • <region>: Your SigNoz Cloud region

Step 3. Set environment variables and run

Step 3.1 Set the ingestion key environment variable

Set the ingestion key in your shell before you start the application. The OpenTelemetry SDK used by DBOS reads authentication headers from this environment variable at runtime:

export OTEL_EXPORTER_OTLP_HEADERS="signoz-ingestion-key=<your-ingestion-key>"

Verify these values:

Step 3.2 Start your application

Choose the startup command that matches your app:

  • If you use FastAPI, start your ASGI app with uvicorn.
  • If you use Flask, start the app with the WSGI or ASGI server command you already use in that project.
  • If you use plain DBOS without a web framework, start it with dbos start.

Example for a FastAPI app:

uvicorn main:app --host 0.0.0.0 --port 8000

Example for a plain DBOS app:

dbos start

Step 3.3 Generate a little traffic

After the app starts, trigger one workflow run or send one HTTP request. SigNoz needs live traffic before traces and logs appear.

Validate

After you start the application and generate traffic, confirm that SigNoz receives both traces and logs.

Validate traces

  1. Invoke a workflow or send one HTTP request to your DBOS application.
  2. In SigNoz, open APM > Services.
  3. Select your service name (<service-name>) from the service list.
  4. Open the Traces tab.
  5. Confirm that SigNoz shows traces for your request.
  6. Open one trace and confirm that it contains the workflow and step spans you expect.
DBOS traces in SigNoz showing workflow and step spans
DBOS traces in SigNoz with workflow and step spans

Validate logs

  1. Open Logs Explorer in SigNoz.
  2. Filter logs by service.name using your configured service name (<service-name>).
  3. Confirm that SigNoz shows logs from your DBOS application.
  4. Open one log entry and confirm that it matches the request or workflow run you just triggered.
DBOS application logs in SigNoz Logs Explorer
DBOS application logs in SigNoz Logs Explorer

Troubleshooting

No telemetry appearing in SigNoz

  • Likely cause: OTLP is not enabled in the DBOS configuration.
  • Fix: Confirm enable_otlp: True is set in your DBOSConfig and that both OTLP endpoints are present.
  • Verify: Traces and logs appear in SigNoz within a few minutes after enabling.

Authentication errors

  • Likely cause: Missing or incorrect ingestion key.
  • Fix: Set the signoz-ingestion-key header in OTEL_EXPORTER_OTLP_HEADERS and verify the key is active in SigNoz Cloud ingestion keys.
  • Verify: Check that the environment variable is exported before starting the process.

"OTLP tracer/logger provider not set, skipping exporter setup" warnings

  • Likely cause: The module failed to load before DBOS could register providers, or the uvicorn module path doesn't match the actual filename.
  • Fix: Ensure the module name in the uvicorn command matches your filename exactly (e.g., uvicorn main:app for main.py, uvicorn myapp:app for myapp.py).
  • Verify: Warnings are absent in the startup logs after the fix.

Traces missing workflow spans

  • Likely cause: Functions are not decorated as DBOS workflows.
  • Fix: Ensure functions are decorated with @DBOS.workflow() or @DBOS.step().
  • Verify: DBOS only creates spans for decorated workflow and step functions.

Logs not appearing in SigNoz

  • Likely cause: Your app has not emitted any logs since startup.
  • Fix: Trigger one request or workflow run that writes logs, then check Logs Explorer again.
  • Verify: Filter by service.name and confirm that new DBOS log entries appear.

Setup OpenTelemetry Collector (Optional)

Use the OpenTelemetry Collector when you need to process, filter, or route telemetry before it reaches SigNoz. Follow the Switch to Collector guide for setup instructions.

For DBOS, point the OTLP endpoints to your collector:

main.py
config: DBOSConfig = {
    "name": "<service-name>",
    "enable_otlp": True,
    "otlp_traces_endpoints": ["http://<collector-host>:4318/v1/traces"],
    "otlp_logs_endpoints":   ["http://<collector-host>:4318/v1/logs"],
}

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: April 7, 2026

Edit on GitHub

Was this page helpful?

Your response helps us improve this page.