Tracing
Ingest OpenTelemetry spans over OTLP HTTP, explore traces in the product, and join to logs and browser sessions with shared IDs. Spans that were never received are never fabricated.
What you get#
Distributed tracing is push-based. Send spans to POST /api/traces/v1/otlp, then open /app/traces. Search: GET /api/app/traces/search. Correlation: GET /api/app/correlation (type: trace, span, session, request).
Set up, step by step#
From an empty workspace to your first searchable trace. Tracing is included on Free and Pro (span and retention limits apply).
Step 1: Open Tracing
Choose Tracing in the sidebar. Until a source sends accepted OTLP spans the explorer stays empty — Mydle never shows sample traces.
Step 2: Open Sources & ingest
Click the gear button at the right end of the toolbar (Sources & ingest). The panel shows the OTLP endpoint, retention, and your ingest sources.
Step 3: Create a source
Under Sources, enter a name for the system that will export spans — for example
checkout-api— and click Create. Use one source per service so you can rotate tokens independently.Step 4: Copy the token
Mydle shows the source token (
tt_…). Shown once. Store it now. Copy it and keep it as a server-side secret, for exampleMYDLE_TRACE_TOKEN. Afterwards only its prefix is listed.Step 5: Send your first spans
Point an OpenTelemetry OTLP/HTTP exporter at Mydle. Prefer protobuf over JSON. gRPC is not supported.
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://www.mydle.app/api/traces/v1/otlp OTEL_EXPORTER_OTLP_TRACES_HEADERS="Authorization=Bearer $MYDLE_TRACE_TOKEN" OTEL_EXPORTER_OTLP_TRACES_COMPRESSION=gzipFull Node.js exporter setup, limits, and retry rules: OTLP Ingestion.
Step 6: See traces arrive
Go back to Tracing and click Search (or wait for the default window). New traces appear with time, service, status, root operation, and duration. Click a row to open the detail panel with the span tree.
Step 7: If nothing appears
- Confirm the exporter uses
http/protobuf(or JSON) against/api/traces/v1/otlp— not gRPC. - Check for
401(wrong or revoked token) or429(monthly span / span-data quota). - Empty explorers mean no accepted spans in the window — not a fake green service map.
- Confirm the exporter uses
Ingest#
OTLP HTTP JSON (and compatible shapes) with a tracing source token (tt_…). Only accepted spans are stored. Key fields: trace_id, span_id, parent_span_id, session_id, correlation_id / request identity, service, environment, release.
Storage & query#
Postgres is always the primary store for customer traces. When ClickHouse is configured, Mydle dual-writes spans and can query the secondary store for list/detail — optional, fail-open on write. When ClickHouse is not configured, product views still use Postgres.
Platform#
Mydle's own services export with OpenTelemetry: service names mydle-web and mydle-worker, BatchSpanProcessor, ParentBased + TraceIdRatioBased sampling, fail-open export (init / export failures never throw into request handlers). Platform OTel is not merged into the customer correlation graph.
Plans#
Included on Free (50,000 spans / month, 1-day retention) and Pro (1,000,000 spans / month, 7-day retention). Span data is also capped at about 1 KB per included span; whichever limit is reached first stops ingest with 429 QUOTA_EXCEEDED until the month resets. Pro can add +1,000,000 span add-ons.
Limitations
- Empty until OTLP traffic is accepted.
- No fabricated service maps from timestamps — edges come from stored parent/child spans and shared IDs.
- OTLP metrics / logs pipelines are not first-class surfaces.