Load balancing
Pools, steering, traffic shifts, and the country→pool routing matrix — including the retention wall behind it.
Monitor → Cloudflare → Load Balancing shows which origin pools are taking traffic, how they are performing, and which countries land on which.
Panels
| Panel | Shows |
|---|---|
| Traffic by pool | Requests per pool, over time |
| Origin latency | Response time per pool |
| Geography | Requests and latency by country |
| Top endpoints | Busiest paths through the load balancer |
| Routing matrix | Which country lands on which pool |
| Traffic shifts | Weight and steering changes, with who made them |
The routing matrix
The matrix is a grid: countries down, pools across, share in each cell.
It answers a question that is otherwise surprisingly hard: is traffic actually going where the steering configuration says it should?
Measured, or modelled
The matrix has two possible sources, and the panel always says which.
| Badge | Source |
|---|---|
| MEASURED | Cloudflare reported the observed region→pool split. This is what actually happened |
| INFERRED | Reconstructed from the steering configuration. A model of what should happen |
A second badge says where the measurement came from:
| Badge | Meaning |
|---|---|
| LIVE FROM CLOUDFLARE | The whole range is inside Cloudflare's retention |
| RECORDED HISTORY | From AccelerUp's own capture — the range reaches past what Cloudflare would still serve |
| RECORDED + LIVE | The older part recorded, the recent part live |
The retention wall
Cloudflare keeps the load-balancing adaptive dataset — the only source that says which pool a client region was actually sent to — for about three days on this plan. Asking for more is refused outright:
zone "8e61…" cannot request data older than 3d1h,
but your query requests data from 1w2s agoCountry volumes come from the HTTP dataset, which is retained far longer. Only the split has the short wall.
This is why a seven-day matrix used to collapse to two columns of steering config: the query was refused, the refusal surfaced as "no rows", and the panel fell back silently.
AccelerUp now records the split itself every poll, into its own table. That capture is what makes a long-range matrix a measurement at all.
That table cannot be rebuilt. If it is lost, the history past three days is gone — no re-fetch can recover it. See Backups and recovery.
When the recording does not reach back far enough
The panel says so in words:
Routing measured from Sep 10 12:00 UTC: Cloudflare keeps the region/pool split for about three days, and AccelerUp's own recording of it does not reach further back yet. Country volumes cover the full range.
Three days presented as seven would be worse than a shorter honest answer.
Pools with no column
The analytics panel above shows every pool that received traffic; the matrix only has columns for pools traffic was routed to by steering.
Eight tiles above and two columns below reads as a broken matrix, so the page
lists the difference explicitly: "No country routes to X — that pool takes
traffic another way (failover, proximity steering, or another load balancer on
the same pools)."
Traffic shifts
Every weight and steering change is recorded with a timestamp and, where available, who made it.
During an incident this is often the answer. A pool weight changed at 14:02 and errors rose at 14:03 is not a coincidence, and without this you are asking people what they remember doing.
Shifts also appear in correlate_window and on the unified timeline.
Reverting a change
A traffic shift can be reverted from the UI. It is role-gated and audited, and the confirmation names the pool and the weight it is returning to.
Alerting
Rules on per-pool error rate, origin latency, and pools dropping out of rotation.
The most valuable one is a pool leaving rotation. A failover that worked is still something you want to know about within a minute, because it means you are now running without the redundancy you thought you had.
Where this behaviour lives: backend/internal/integration/cloudflare_lb.go, backend/internal/integration/cloudflare_lb_regionpool.go, backend/internal/service/cf_lb_analytics_svc.go. If the code and this page disagree, the code is right — please fix the page.
Part of Monitor — Everything that watches something and reports what it saw.