What you see
Open an app and choose Traffic under Observe, or runtraffic <app> in the CLI. For the window you pick (5 minutes, 1 hour or 24 hours):
Bounded by design
Memory and storage stay flat as traffic grows.- Latency uses a fixed 12 bucket histogram per app and per replica. Percentiles are estimated from the buckets, so they are accurate to the bucket width.
- Routes are normalized templates such as
/api/users/:id. Ids, tokens, query strings and client addresses are never read or stored. The number of distinct routes and replicas kept per tick is capped, and the rest fall into anotherbucket. - The sample log keeps failed requests (5xx and upstream failures) and a fraction of slow ones, capped per tick and per app, and expires with a retention period.
Settings
All settings are environment variables on the control plane or agent.Alerts
A threshold alert rule can watch three request metrics, so “error rate above X for Y” and “p99 above X for Y” need no new rule type:
A window with no requests neither fires nor resolves a rule. For error-budget alerting use an SLO burn rule, which this page’s budget figure reads.
API
GET /api/v1/apps/{name}/traffic?window=5m|1h|24h returns the totals, status_classes, latency, replicas, slow_routes, samples and, when an SLO burn rule exists, slo. It needs read access to the app. Time series for the charts come from GET /api/v1/apps/{name}/requests.
CLI
--watch --json each refresh is printed as one JSON line.
Limits
- Replica figures need the request to pass through a reverse proxy upstream. Static sites and requests answered by the ingress itself have no replica.
- Percentiles are histogram estimates. A p99 above 10 seconds reports the last bucket bound.
- The report is not available through the MCP server.