Skip to content

Operations

canardstack is experimental and not production-ready. The v0 operator surface is small and intentionally explicit.

AreaV0 behavior
Process modelOne synchronous Rust binary, one DuckDB process, no async runtime.
IngestOTLP/HTTP JSON and protobuf for logs, traces, gauge metrics, and sum metrics.
DurabilityA 2xx ingest response means the raw request was fsynced to the local spool and accepted for bounded processing. It does not mean rows are committed to DuckLake or query-visible yet.
BackpressureIngest admission returns 429 under pressure. Storage dependency failures surface as 503.
StorageDuckLake-backed DuckDB tables. Local DuckLake is the default quickstart path; MotherDuck and Postgres-catalog DuckLake are supported paths.
QueryCompatibility subsets with server-side time range, row limit, timeout, memory, and concurrency guards.
UIGrafana only. canardstack does not serve a custom browser UI.
RetentionWhole-day retention on telemetry tables, followed by DuckLake cleanup hooks when attached.

Configuration is available through config.toml and CANARDSTACK_* environment variables. Start from config/example.toml for structured config or config/example.env for host development. Environment variables override the file. Set CANARDSTACK_CONFIG=/path/to/config.toml to load a different config file.

Diagnostics are logfmt-style structured events on stderr. Set CANARDSTACK_LOG=debug or use RUST_LOG to adjust verbosity.

Use the failure runbooks for page-worthy health states, stuck seals, query OOM, object storage incidents, ingest overload, replay backlog, and retention cleanup failures.

Use the operator metrics reference for emitted metric names and labels.