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).
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.