Choose how to send
- From the SDK. Your service exports logs and traces straight to Sazabi with two environment variables. Use this when you can restart the service with new configuration.
- Through a Collector. Your service exports to a Collector you already run, and the Collector forwards to Sazabi. Use this to keep one pipeline, batch in one place, or fan out to other backends too.
Send from the SDK
1
Get your intake URL. Open Settings > Log streams, add the OpenTelemetry source, and copy the Intake URL from its setup screen. The URL embeds your public key, so copy the whole URL and send no separate key or header. To create the source from the CLI, run
npx -y @sazabi/cli@latest log-sources create otel --mode manual; it prints the intake URL.2
Add the OpenTelemetry SDK for your language with an OTLP log and trace exporter. For install commands in Node.js and Python, and a Python logs-only setup, see OpenTelemetry.
3
Set the exporter environment where the process starts:Use the intake URL as is. The SDK appends
Environment
/v1/logs and /v1/traces itself, so do not add a path.4
Restart or redeploy so the SDK starts with the new environment.
OTEL_EXPORTER_OTLP_PROTOCOL set to http/protobuf. OTEL_SERVICE_NAME sets the service name you filter and group by in Sazabi; give each service its own.
Send through a Collector
Add anotlphttp exporter that points at your intake URL, and put it in the logs and traces pipelines:
otelcol.yaml
OTEL_EXPORTER_OTLP_ENDPOINT. For file, Kubernetes, and other receivers, see OpenTelemetry Collector.
Send metrics and traces separately
Sazabi stores every signal as a log record, but each signal has its own intake path:- Logs and traces go to the OpenTelemetry source’s intake URL above. Spans become records you can search next to your logs.
- Metrics sent to that URL are stored too, each data point as a record under the same source. To keep metrics under their own source, create an OpenTelemetry Metrics source and set
OTEL_EXPORTER_OTLP_METRICS_ENDPOINTto its intake URL, which already ends in/v1/metrics. See Send metrics. - Traces only. To store spans and the exceptions they record as separate error records, use an OpenTelemetry Traces source. See Send traces.
OTEL_METRICS_EXPORTER=none so it stops sending them.
Verify
Confirm real records reach your project.- Restart the service and make a request that writes a log line or produces a trace.
- Open the Intake page and look for records from the OpenTelemetry source. They typically arrive within a minute or two.
- Search for your service by name. In a thread, ask the Sazabi agent for logs from it, or run
npx -y @sazabi/cli@latest logs ask "logs from checkout-api" --since 1h.
Troubleshooting
- No records. Confirm the environment variables are set in the process that runs the service, not only in a build step. Check the service’s output for OpenTelemetry export errors.
- Export errors or connection failures. Confirm the protocol is
http/protobufand the endpoint is the complete intake URL, includinghttps://. A partial or hand-built URL is rejected. - Traces arrive but logs do not. Some SDKs configure trace export only. Add a log exporter to the SDK setup.
- Metrics are missing. Metrics need their own source; see Send metrics and traces separately.
Next steps
Your intake URL also works with logging libraries and frameworks that have their own OpenTelemetry integration. These pages cover specific setups:- Collectors and agents: Grafana Alloy, Vector, and Fluent Bit.
- TypeScript: evlog for wide events and structured errors.
- Error tracking: Sentry SDK, to forward from a Sentry SDK you already run.
- Workflow engines and AI frameworks: Temporal, Inngest, Trigger.dev, LangChain, and Mastra.
Further reading
Instrument your frontend
Correlate browser events with these backend records.
Search logs
Ask questions about the records you now send.