cardinality_exceeded

Diagnostic `nanook::engine::cardinality_exceeded`

Summary

cardinality cap exceeded for `{0}` on `{1}` (scope: {2})

Help

raise [engine.cap] source/metric in the agent config, or fix the runaway label producing this series

Details

When this fires

Runtime, from LatestStore::insert in crates/nanook-engine/src/store/latest.rs. The ingest path checks the live series count under the source (and under the (source, name) pair) before allocating a new entry. Crossing either cap rejects the sample. The new series never reaches the window store, the rule eval, or the adapters.

Surfaced two ways: a rate-limited warn log line deduped per (source, metric) for 60 seconds, and a bump on Stats::dropped (visible via nanook ctl stats, the admin /stats snapshot, and the self-metric nanook.engine.dropped).

What to check

The cap defaults are intentionally high so that hitting them almost always means a label is unbounded, not that the cap is too tight. Look at which (source, metric) pairs are leaking via nanook ctl stats. If the high cardinality is intentional, raise the cap in [engine.cap]:

[engine.cap]
source = 50000
metric = 10000

Setting either field to 0 disables that scope of the guard entirely.