Cloudflare Workers ships traces and logs directly to SigNoz using built-in OTLP export. Configure destinations in the Workers Observability dashboard and enable them in your Wrangler config. No code changes required.
Requires Workers Paid plan or higher. OTLP export is in beta. Tracing is billed beyond the 10 million monthly inclusion. Check Cloudflare's current pricing. Metrics export is not currently supported.
Prerequisites
- Cloudflare account on Workers Paid plan or higher
- Wrangler CLI installed
- An instance of SigNoz (either Cloud or Self-Hosted)
Configure OTLP Export
Create destinations
Open Workers Observability in your Cloudflare dashboard.
Go to Destinations and click Add destination. Create a traces destination:
- Name:
signoz-traces - Type:
Traces - OTLP Endpoint:
https://ingest.<region>.signoz.cloud:443/v1/traces - Headers:
signoz-ingestion-key: <your-ingestion-key>
Click Save.

- Click Add destination again. Create a logs destination:
- Name:
signoz-logs - Type:
Logs - OTLP Endpoint:
https://ingest.<region>.signoz.cloud:443/v1/logs - Headers:
signoz-ingestion-key: <your-ingestion-key>
Click Save.

Verify these values:
<region>: your SigNoz Cloud region<your-ingestion-key>: your SigNoz ingestion key
Configure Wrangler
Add an observability block to your Wrangler config. Use the destination names you created above:
{
"observability": {
"traces": {
"enabled": true,
"destinations": ["signoz-traces"],
"head_sampling_rate": 0.05,
"persist": false
},
"logs": {
"enabled": true,
"destinations": ["signoz-logs"],
"head_sampling_rate": 0.6,
"persist": false
}
}
}
[observability.traces]
enabled = true
destinations = ["signoz-traces"]
head_sampling_rate = 0.05
persist = false
[observability.logs]
enabled = true
destinations = ["signoz-logs"]
head_sampling_rate = 0.6
persist = false
Destination names are case-sensitive and must match what you saved in the dashboard.
Key options:
head_sampling_rate: fraction of requests to sample (0.0 to 1.0). The values above match Cloudflare's recommended defaults. Set to1temporarily to validate data is flowing, then reduce.persist:falsesends data only to SigNoz. Set totrueto also store data in Cloudflare's dashboard (Cloudflare charges apply separately).
Skip the logs block if you only need traces, or skip traces if you only need logs.
Deploy
wrangler deploy
Send traffic to your Worker. Data appears in SigNoz within a few minutes.
Validate
- Traces: Open Traces in SigNoz. Spans from your Worker carry attributes like
worker_nameandscript_name. - Logs: Open Logs in SigNoz. Trigger
console.log()in your Worker. Log entries appear with the sameworker_nameattribute.
Check delivery status under Workers Observability → Destinations in your Cloudflare dashboard:
| Status | Meaning |
|---|---|
| Last: n minutes ago | Delivering successfully |
| Never run | No traffic yet, or sampling rate is 0 |
| Error | Endpoint URL or ingestion key is wrong |
Troubleshooting
Destination shows Error
Recheck:
- OTLP endpoint region — see SigNoz regions
- Signal path: traces use
/v1/traces, logs use/v1/logs. Wrong path silently drops data. signoz-ingestion-keyheader value — copy it fresh from SigNoz settings
Destination shows Never run
Send traffic to your Worker. If it stays at Never run after requests arrive:
- Confirm
enabled: truein your Wrangler config (wrangler.jsoncorwrangler.toml) - Confirm the destination name in
destinationsmatches the dashboard name exactly (case-sensitive) - Confirm
head_sampling_rateis greater than 0
Traces appear but logs do not (or vice versa)
Each signal needs its own destination. Verify you created separate destinations for Traces type and Logs type, and that each wrangler.jsonc block references the correct destination name.
Sampling rate too low
Set head_sampling_rate: 1 temporarily to confirm data flows end to end, then reduce to your target rate.
Limitations
- No metrics: OTLP export covers traces and logs only. Metrics are not supported.
- Workers Paid required: the Workers free plan does not support OTLP export destinations.
- Beta billing: OTLP export is in beta. Check Cloudflare's current pricing for current rates.
- Logs scope: only application logs (
console.log()output and system-generated logs) are exported. See supported telemetry types for the full list.
Next Steps
- Add custom spans and attributes in code using the community SDK or Cloudflare's official instrumentation
- Set up trace-based alerts on Worker latency or error rates
- Set up log-based alerts to detect error patterns in Worker logs
- Build dashboards combining Worker traces and logs
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.