Operator-authenticated, unlike
/health. The numbers name agents, connections, and refusal codes. An open scrape endpoint would tell anyone who can reach the port which agents exist, how often they are refused, and when a human is reviewing a change.prometheus.yml
What is exposed
Gauges are read when you scrape, from the components that own that state, so they cannot drift from it.
The questions they answer
Is Warden in my way?warden_database_seconds is the engine’s share, for when the two need separating.
Is blocking approval viable?
reason="approval": Debug Mode pauses share this metric, are far more numerous, and resolve in seconds, so leaving them in the denominator makes the rate read far lower than it is. Above roughly 30% and the answer is no: switch those connections to async mode, because agents are being blocked on humans who are not answering.
unbounded_operation and scope_unenforceable are the interesting ones: those are the operations that would have run against production.
Is my agent hallucinating?
warden_scrape_errors_total above zero means a gauge could not be read — its series will be missing rather than wrong, so alert on the counter, not on the gap. warden_pending_operations climbing means reviewers are not keeping up. warden_agents_frozen above zero means a circuit breaker tripped and a human has not reinstated the agent.
Cardinality
Labels are bounded by configuration, not by traffic: agents and connections are declared inwarden.yaml, classes and statuses are fixed sets, and codes come from the error taxonomy. Nothing from a request body becomes a label, so no agent can inflate your metric storage by issuing unusual statements.