Skip to content

Troubleshooting ​

Most problems come down to a handful of settings, listed in order below.

Nothing shows up ​

1. Is the protocol HTTP? Our ingest doesn't accept gRPC, and Python defaults to gRPC:

bash
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf

2. Is the endpoint the base? The SDK adds /v1/traces, /v1/metrics and /v1/logs to OTEL_EXPORTER_OTLP_ENDPOINT itself:

bash
# Right
OTEL_EXPORTER_OTLP_ENDPOINT=https://ws.latency.app/v1/ingest

# Wrong
OTEL_EXPORTER_OTLP_ENDPOINT=https://ws.latency.app
OTEL_EXPORTER_OTLP_ENDPOINT=https://ws.latency.app/v1/ingest/v1/traces

The per-signal variables, like OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, are used exactly as written, so they need the full path: https://ws.latency.app/v1/ingest/v1/traces.

3. Is the header encoded? The space after Bearer is written %20:

bash
OTEL_EXPORTER_OTLP_HEADERS=authorization=Bearer%20lit_XXXXXXXXXXX

4. Did the app see the variables? Settings in a .env file are often read after OpenTelemetry starts. Set them in the real environment, or see the language page for loading them first.

5. Is the missing data a metric? Metrics are exported every 60 seconds by default. Wait a minute, or set OTEL_METRIC_EXPORT_INTERVAL=10000.

Error responses ​

Turn on the SDK's debug logging (below) to see the response, then match it here:

ResponseCauseFix
400 stream_type_mismatchA key from an Events StreamUse a key from an OpenTelemetry Stream
401Key is wrong, disabled or revoked, or its Stream is deletedCheck the key in Manage Streams
413Batch over 4 MBLower the batch size, like OTEL_BSP_MAX_EXPORT_BATCH_SIZE=256 for traces
404, or gRPC errors like UNIMPLEMENTEDSent over gRPCSet OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
415Unsupported content type or compressionUse http/protobuf or http/json, uncompressed or with gzip, deflate, br or zstd
403 plan_requiredThe account's plan doesn't include telemetryUpgrade the plan
403 ingest_blockedWe blocked the key or Stream; the body says whyContact feedback@latency.app
429 rate_limitedOver a rate limit; X-Latency-Limit names itNothing for a burst. If the limit persists, batch more or raise the key's limit
429 quota_exceededThe account is at 110% of its monthly eventsUpgrade, or wait for next month
429 or 503, otherBusy or briefly unavailableNothing: SDKs retry on their own

Data arrives but some is missing ​

Open the Stream's Overview (select the Stream in Manage Streams). Ingest Health lists anything that was rejected, dropped or throttled in the last 7 days, with the reason and an example. The limits page explains each reason.

Service shows as unknown_service ​

Set a name:

bash
OTEL_SERVICE_NAME=checkout-api

The last few seconds of data go missing ​

SDKs send in batches, so data from just before the process exits can be lost. Shut the SDK down on exit so the final batch goes out. The zero-code agents for Node.js and Python, and Deno's built-in support, handle this on a normal shutdown.

For serverless functions, flush before each invocation returns (for example forceFlush() on the tracer and meter providers), because the process may be frozen between invocations.

Turn on debug logging ​

LanguageSetting
Node.jsOTEL_LOG_LEVEL=debug
DenoOTEL_EXPORTER_OTLP_PROTOCOL=console prints everything instead of sending it
Gootel.SetErrorHandler(...) with a custom logger
Everything elseSee the SDK's docs, or send to a local Collector with the debug exporter

Still stuck? ​

Try the same key with curl. If this returns 200, the key and network are fine and the problem is in the SDK's configuration:

bash
curl -i https://ws.latency.app/v1/ingest/v1/traces \
  -H "Authorization: Bearer lit_XXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{"resourceSpans": []}'
© 2026 Latency Labs LLC