Skip to main content
Every Podflare HTTP request gets a http_request tracing span. Every executor operation (create, exec, fork, merge_into, destroy) emits a nested event inside that span with structured fields. Pass a traceparent header (or SDK kwarg) and Podflare binds your upstream trace_id + parent_span_id to every log line.

Propagation

Supply a W3C Trace Context traceparent string (00-<trace>-<span>-<flags>) and the SDK forwards it on every HTTP request:

What shows up in hostd logs

Default (text) formatter:
Every nested log line carries the request’s trace_id + parent_span_id — ready for grep-based correlation or pipe-into-structured-log-aggregator. JSON formatter (PODFLARE_LOG_FORMAT=json):
Ship those JSON lines to Langfuse, LangSmith, Braintrust, Datadog, Loki, or your log aggregator of choice.

Fields Podflare emits

span
http_request
Per-HTTP-request root span. Fields:
  • method — HTTP method.
  • path — request path, e.g. /v1/sandboxes/:id/exec.
  • trace_id — from incoming traceparent, empty if not provided.
  • parent_span_id — ditto.
Inner events use names like sandbox claimed, VM booted, fork complete, agent connected, etc., with the operation’s relevant fields (template, sandbox id, durations in ms, source = pool/on_demand/snapshot). Podflare emits structured tracing spans. You can bridge those to OTLP by running hostd with tracing-opentelemetry configured (planned; contributions welcome). Until then the simplest path is: set PODFLARE_LOG_FORMAT=json, pipe stdout to vector / otel-collector / fluent-bit configured as an OTLP exporter.

Environment

PODFLARE_LOG_FORMAT
string
default:"text"
Set to json for one-line-per-event JSON (span fields + message).
PODFLARE_TRACEPARENT
string
SDK-side: fallback value for Client(traceparent=...) / Sandbox(traceparent=...) when none is passed explicitly. Useful for quick experimentation.
RUST_LOG
string
default:"info,tower_http=info"
hostd-side: tracing-subscriber EnvFilter syntax. trace / debug levels surface more detail per operation.