AccelerUpDocs
Monitor/Cloudflare/Load balancing

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

PanelShows
Traffic by poolRequests per pool, over time
Origin latencyResponse time per pool
GeographyRequests and latency by country
Top endpointsBusiest paths through the load balancer
Routing matrixWhich country lands on which pool
Traffic shiftsWeight 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.

BadgeSource
MEASUREDCloudflare reported the observed region→pool split. This is what actually happened
INFERREDReconstructed from the steering configuration. A model of what should happen

A second badge says where the measurement came from:

BadgeMeaning
LIVE FROM CLOUDFLAREThe whole range is inside Cloudflare's retention
RECORDED HISTORYFrom AccelerUp's own capture — the range reaches past what Cloudflare would still serve
RECORDED + LIVEThe older part recorded, the recent part live

The retention wall

Important

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:

text
zone "8e61…" cannot request data older than 3d1h,
but your query requests data from 1w2s ago

Country 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.

Caution

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.

Tip

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 MonitorEverything that watches something and reports what it saw.