License: pro tier and above. See Licensing. Reference: step semantics, blend math, and query-tracer output are in docs/reference/FilterChains.md.
Nobody else in the GSLB space routes on carbon. ESG procurement questionnaires increasingly ask "does your infrastructure account for carbon intensity?" — with Nexus, the honest answer is yes, and it's a one-line filter-chain step, not a research project.
signal-weight biases DNS answers toward the region with the lower configured value — carbon intensity (gCO2/kWh), a cost table for expensive egress or spot regions, or any scalar where lower is better. It's a bias, not a hard rule: a healthy member in a "worse" region is never excluded, only deprioritized. The same mechanism works for either use case — swap the numbers, not the code.
No external API required for v1: you supply the per-region table yourself, either from a public carbon-intensity source (ElectricityMaps, WattTime) you check periodically, or from your own cost/procurement data.
Step 1 — Configure your zone table
Add to config.yaml on every node (or via GitOps):
signals: static: us-east: 450 # gCO2/kWh, or any unit you like — lower wins eu-west: 120 ap-south: 610 weight: 0.5 # 0 disables the bias; 1 lets it dominate. Default 0.5.
systemctl reload gslbd (or wait for GitOps to apply it) — no restart needed. Zones map to your members' existing region field, the same one geo-ip routing already uses.
Step 2 — Add the step to a service's filter chain
WebUI: open the service, switch to filter chain mode, add Signal Weight (carbon/cost) — place it after any narrowing steps (like geo-ip) and before the terminal selector.
API / Terraform:
{ "filterChain": ["geo-ip", "signal-weight", "weighted-round-robin"]}
resource "nexus_service" "web" { filter_chain = ["geo-ip", "signal-weight", "weighted-round-robin"]}
Step 3 — See it working
Query tracer (
gslbctl trace <service-id>or the WebUI trace panel) shows the zone values it used and whether it actually reordered anything.Signal Weight page under Infrastructure in the WebUI (or
gslbctl signals list) shows the live configured table.Metrics:
gslbd_signal_zone_value{zone}(the configured table) andgslbd_signal_queries_steered_total{service}— an honest count of queries where the bias actually changed the answer. That's your "X% of traffic steered toward lower-carbon regions" number for a press release or an ESG questionnaire — computed from real routing decisions, not a marketing estimate.
The Tuning Knob
weight controls how strongly the signal competes with health/latency scoring:
0.0— disabled (same as omitting the step).0.2–0.4— tiebreaker: only reorders candidates that were already close in score.1.0— dictator: the lowest-signal healthy candidate always wins.
Most operators want a tiebreaker, not a dictator — start low and raise it once you've watched the query tracer confirm it's doing what you expect.
Notes
A member with no
regionset (or a region with no configured signal value) is never penalized — it keeps its original score and competes fairly on the rest.A future version may add a live feed poller (ElectricityMaps, WattTime) so the table updates itself; today it's operator-maintained, which also means it works air-gapped with zero external dependency.