Operations
canardstack is experimental and not production-ready. The v0 operator surface is small and intentionally explicit.
| Area | V0 behavior |
|---|---|
| Process model | One synchronous Rust binary, one DuckDB process, no async runtime. |
| Ingest | OTLP/HTTP JSON and protobuf for logs, traces, gauge metrics, and sum metrics. |
| Durability | A 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. |
| Backpressure | Ingest admission returns 429 under pressure. Storage dependency failures surface as 503. |
| Storage | DuckLake-backed DuckDB tables. Local DuckLake is the default quickstart path; MotherDuck and Postgres-catalog DuckLake are supported paths. |
| Query | Compatibility subsets with server-side time range, row limit, timeout, memory, and concurrency guards. |
| UI | Grafana only. canardstack does not serve a custom browser UI. |
| Retention | Whole-day retention on telemetry tables, followed by DuckLake cleanup hooks when attached. |
Configuration
Section titled “Configuration”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.
Response Guides
Section titled “Response Guides”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.