Traffic Globe

License: paid tier and above. See Licensing. Requires: a GeoIP country database configured (the same one latency/geo-ip routing already uses — see the geoip: block in config.yaml.example and Configuration if you haven't set this up yet). Without it, the map has nothing to show.

A world map showing where your DNS queries originate, colored by volume, with animated arcs to the members actually serving them. It's a genuine ops tool (click a country to see its top source subnets and which members answer for it) and also, frankly, a great screenshot for making "global server load balancer" feel tangible instead of abstract.

What It Shows

  • Heatmap — each country is shaded by query volume in the last completed 60-second window (darker = more queries). Countries with no traffic in the window are shown as a neutral "no data" fill, not the bottom of the color scale — zero traffic and no-data-yet are different things.
  • Animated arcs — a moving dot travels from each origin country toward the country hosting the member(s) that served it. The destination is derived the same way the origin is (a GeoIP lookup on the member's IP), so there's no separate region-to-coordinates table to maintain.
  • Click a country — see its total query count, which members served it (with pool/region context) and how many queries each handled, and its top source subnets (bucketed to /24 for IPv4 / /48 for IPv6 — the same granularity RUM routing already uses, so no raw client IP is ever displayed).

Viewing It

WebUI: /traffic in the main nav (Fleet section).

gslbctl:

gslbctl traffic geo

API:

curl https://<api-host>:<port>/api/v1/traffic/geo -H "Authorization: Bearer $TOKEN"

How It's Built

No new database table and no per-query write: this reuses the same in-memory rolling-60-second-window design as the existing QPS/latency tracker and the shadow-testing tracker. A GeoIP lookup is a fast in-memory MaxMind read (not network I/O), so recording an entry adds no meaningful latency to the query path.

The map itself is a flat (equirectangular) projection rendered as plain SVG — not a 3D WebGL globe. Country borders come from a bundled low-resolution world atlas (~100KB); there's no runtime dependency on an external map tile service, so this works in air-gapped deployments like the rest of the product.

Notes

  • Per-country member and source-subnet breakdowns are each capped at 50 tracked entries — under a flood from many distinct source subnets, the country's total count keeps incrementing correctly, it just stops growing a row for every single new subnet. Real pool sizes are far below this cap, so member breakdowns are effectively never truncated.
  • The projection is deliberately simple (one line of arithmetic, no projection library) and doesn't handle the antimeridian specially — arcs crossing the Pacific take the geometrically "long way" on the flat map. Accepted as a stylized-visualization trade-off, not a bug to fix; a true GIS-correct great-circle renderer is out of scope for what is, per its own backlog description, "a visual showpiece as much as an ops tool."
  • Not a Terraform-managed resource — like the Query Tracer and Config Snapshots, this is diagnostic/observability data, not something you declare.

Was this article helpful?
© 2026