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#
Requires Pro+ (distributed_tracing). Trace retention defaults: Pro 7d · Team 30d · Enterprise 90d · Free 0. (Log retention for Enterprise remains contract-gated separately.)
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.