The two http.post children were produced by the payments SDK's internal retry logic. Nobody instrumented them; the patched transport reported them.
Four things happen
to every run.
A run enters the collector as a stream of spans and leaves as something you can search, alert on, bill against, and re-execute. No sampling gaps in between, and no vendor lock-in on the way out — every span is OpenTelemetry underneath.
- SDK / OTelin-process, 1.4 ms
- Collectorredact + batch
- Span storecolumnar, 30d hot
- Rules engineevaluated on write
- Replayoffline re-run
Pick a stage.
- Evaluated on
- ingest path
- Median detection
- 38 s
- False positives / 30d
- 2
- Destinations
- PagerDuty · Slack · webhook
| Tenant | Runs | $ / run | Margin |
|---|---|---|---|
| acme-eu | 41,208 | $0.072 | +68% |
| northwind | 28,640 | $0.062 | +71% |
| lumen-health | 12,904 | $0.071 | +12% |
| hexa-freight | 8,116 | $0.067 | −4% |
hexa-freight runs an agent that retries three times on average. It costs more to serve than they pay. That is a trace query, not a spreadsheet exercise.
- Source trace
- run_9f3c2a41 · failed
- Tool responses
- served from recording
- Model
- gpt-4o → claude-sonnet-4.5
- Replay cost
- $0.0181
| Operation | p50 | p99 | Bytes |
|---|---|---|---|
| Span start + end | 1.4 ms | 3.9 ms | 640 B |
| LLM call wrap | 2.1 ms | 5.2 ms | 2.8 KB |
| Redaction pass | 0.6 ms | 1.8 ms | — |
| Batch export (256 spans) | 18 ms | 44 ms | 12 KB |
Export happens on a background thread with a bounded queue. If the queue fills, spans are dropped and counted — your agent is never blocked by our availability.
Bodies are off by default. With them off you still get the waterfall, the costs, and every rule except semantic ones. Turn them on per service, per environment, or per tenant — the toggle lives in the SDK config, so the data never reaches us in the first place.
Regulated workloads can run the collector inside their own VPC and forward only aggregates. Same UI, same rules, docker compose up.
If it emits a span, we keep it.
No integration on the list? The ingest endpoint speaks OTLP over HTTP. Point any collector at ingest.nocturne.dev/v1/traces and the agent-specific views light up as soon as spans carry a gen_ai.* attribute.
Instrument one agent today.
Free under 50,000 spans a month — roughly 3,500 agent runs. Enough to watch a real service for a week before you decide.