Reading traffic and usage
Read the replicas' health, the traffic per operation and the tenants' usage in the console, and simulate a request.
GuideOperationsSince version 0.1.0
On this page
Operations guide: configure, deploy and observe the gateway. What the feature does, product side: product guide; calling it: developer guide.
The screens themselves are described in Reading with the console. This page says how to read them while operating.
Steps
Each replica's health
Admins - every replica of the gateway has its status: the status rule on its own signals (in flight against its ceiling, shedding, share shed, its last reload rejected - the 24-hour count stays shown, as information), after the freshness of its last report.
- Open the Overview: the replicas are nodes under the gateway.
- Read the state: a replica pushes every 15 s; no report for 45 s, "No report"; for 2 min
without a stop announced, "Degraded" (and the rule
replica-silentnotifies); forgotten after 1 h. A clean stop (drain) is said byflexway_server_draining: the replica is "Retired", never degraded - after a rollout, the old pods stay so for an hour. - Click a replica: its summary, with a link to its errors (
/errors?replica=).
A replica that is not well makes the gateway "Watch", never "Degraded": the others serve.
Asynchronous plane
A broker (kafka, amqp in 0-9-1 or 1.0, mqtt, nats) and a webhook target are
upstreams: the same status rule, on their own signals - failed publications or failed deliveries,
503 overloaded and dead letters counted as refusals; their latency is the broker's acknowledgement
and their gauge the bounded buffer (max_in_flight).
- Overview: the map draws them with their protocol, published, delivered and subscribers.
- Catalogue: filter doors by "Publication" and "Subscription".
- Traffic: the "Asynchronous plane" panel by broker and channel; a door's Operation screen shows its
outcomes, the acknowledgement, the subscribers open and its webhooks; Errors names
buffer_fullandrejected.
A viewer reads the published, delivered and 503 of their tenant, the acknowledgement of every tenant
(said on screen), never the subscribers open (no tenant dimension); the Upstreams screen stays the admins'.
History, markers and links
- Usage -> History tab: 13 UTC months, the current one partial, compared with the previous month and
the same month a year before at equal period (from the 1st to today), never with a whole month; an
admin without a tenant reads one row per tenant; the export gives
month,tenant,measure,value,partialas CSV. - On every curve, a line marks each configuration reload, applied or refused, of every replica: time, version and result in the reading line.
- "Copy the link" keeps the screen, the window, the tenant and the filters; the link grants no right - a recipient outside that scope gets a refusal.
Compare, variations, hour by day
- "Compare" (Traffic, Operation, Upstreams) lays a window B of the same length, chosen by its start, dashed on the same curves; it stays in the link.
- The biggest variations rank the operations by their move against the previous window - rate in
percent,
5xxin points, p95 in milliseconds -, from 50 requests on. - The hour by day map averages each UTC hour of each day over 4 weeks. Out of retention nothing is
drawn:
--, never0.
Traces without Tempo
In the integrated mode, the console is also the destination of the gateway's traces and keeps the
failed requests itself (5xx, refusals written after admission except 401 and 404) and the
slow ones (over 1 s, or over half the operation's budget); the rest is dropped. The gateway traces the
request, its stages - routing, identity, policies -, its external-calls and each attempt to the
upstream, with retry_count and circuit_state; the stages cost nothing to the requests not sampled.
- Diagnostics -> Traces: filter, open a trace as a waterfall.
- Download it as OTLP JSON to replay it in Jaeger or Tempo.
Usage
Two clocks. The gauges (requests per quota policy, tokens of the day and the month, euros of the
month) follow the gateway's windows, calendar day and month in UTC: the ones that decide a 429.
The breakdowns (per day, per backend, per agent, operations, export) follow the chosen period - this
month, last month, 7 days, or from-to (93 days at most) - in days of the console's time zone
(FLEXWAY_CONSOLE_TIMEZONE).
- Open Usage; an admin without a chosen tenant reads every tenant ranked against its budget.
- Read each gauge's status: degraded when the cap is reached or will be before the window ends, warning when the soft cap is crossed or the trend (the pace of the last 24 hours) reaches 90 %, healthy otherwise; no status without a declared cap. The band shows the slowest and fastest of the last 7 days.
- Export:
GET /api/usage/exportgives the period as CSV (date, tenant, backend, direction, tokens, euros, requests), a viewer's own tenant only; an admin reads every tenant (GET /api/usage).
Who meters - totals, days, breakdowns, the ranking's totals, export and history count
what this gateway meters only (metered_by!="upstream"), with a metrics backend as with the
embedded source, whose daily aggregates keep metered_by. The gauges (and their trend, band,
date reached, status) count what the local cap counts, which applies to relayed calls too: every
series - tokens from the usage returned, euros at a declared price only -, and the gauge says so
("includes the relayed calls, which the local cap counts too"). A backend with metering: upstream relays
to another Flexway that counts the call itself: its tokens and calls are shown apart, under "Metered
upstream", never added to the totals - the upstream gateway is authoritative for the cost. The breakdown
by capability (chat, vision, embeddings, model) counts a specialised gRPC model in calls, not
tokens. The Declared backends panel says, from /config, each backend's kind (openai, relay,
grpc), the capabilities, who meters it and where it is; an admin also reads the authentication scheme
(none, bearer, header, token_file) - never a key or its reference.
Try a request
Under the pipeline of the Policies screen:
- Describe the method, path, host, identity (subject, tenant, scopes, roles) and headers.
- Run it: the description goes through the gateway's
/simulate, as a dry run. - Read the verdict, the request the upstream would have received (secrets
***) and each step's result: applied, skipped, not simulated (anexternal-callis never called), passed.
A viewer simulates within their tenant: naming another is refused.
Go to
Ctrl+K (Cmd+K on a Mac), or the top bar's field, from any screen: a screen, an operation (opens its
chain), an upstream (opens its detail, admins), an agent (opens its panel; those of their tenant for a
viewer), a tool or a tenant (filters the console; their own for a viewer). Arrows, Enter, Esc.
Verify
- The configuration version and reading time at the top of every screen are the ones the gateway's admin
/configpublishes. - An applied reload shows as a marker on the Traffic curves within the minute.
- A viewer naming another tenant (link, filter, simulation) gets a refusal, never an empty page.
Available since 0.1.0; simulation and palette in 1.2.0; history, markers, links, comparison,
variations, hour by day and kept traces in 1.3.0; per-replica health in 1.4.0; the asynchronous plane
and metering where it is paid in 1.5.0.