Operations Reference
Operations & Runbooks
This guide covers day-2 operations: monitoring, troubleshooting, routine tasks, and failure handling.
Monitoring
- Prometheus metrics (see
docs/Metrics.md). Suggested dashboards:- DNS throughput:
gslbd_dns_requests_totalrate. - Health status:
gslbd_health_endpoints_healthy{family}. - NATS connectivity:
gslbd_state_nats_connected. - Merge lag p95: histogram quantiles on
gslbd_state_merge_lag_ms. - Active members:
gslbd_state_active_members.
- DNS throughput:
Logs
- GitOps reconcile logs: fetch/verify/apply outcomes and errors.
- NATS errors: connection/disconnect and subscriber drain errors.
- DNS errors: server start/stop issues.
Routine tasks
- Rotate GPG keys: update trust store on nodes; update
allowedSignerslist; merge a new signed commit to test. - Rotate NATS creds/certs: generate new creds; restart
gslbdor trigger reconnect. - Update endpoints: commit to Git repo; watcher applies within
pollInterval.
Troubleshooting
!!! tip "Start with Metrics" When troubleshooting, check the Prometheus metrics first — they often reveal the root cause faster than logs.
- No DNS answers:
- Check licensing limit: look for SERVFAIL and rate limit logs.
- Verify endpoints configured and healthy
(
gslbd_health_endpoints_healthy). - Confirm domain matches
dns.domainand query suffix is exact (trailing dot).
- GitOps changes not applied:
- Verify signatures
(
gslbd_gitops_verify_total{result="error"}) and signer allowlist. - Check validation errors and logs.
- Ensure
pathPrefixand repo URL are correct; testgitaccess on host.
- Verify signatures
(
- State sync not working:
- Check
gslbd_state_nats_connected. - Verify NATS URLs and TLS/auth settings; test
natsCLI. - Confirm JetStream enabled and KV buckets created.
- Check
- Global quorum policy seems off:
- Ensure
heartbeatInterval/heartbeatTTLreflect reality; active membership must be non-zero. - Validate
quorumMinPercentand that enough nodes are reporting within TTL.
- Ensure
Maintenance windows
- Use GitOps to stage config changes with signed commits.
- Consider "freeze windows" by temporarily pausing GitOps changes (set
repoURLempty or pause at network layer).
Testing WAN partitions
- Use
tc/netemto inject latency/loss; observe merge lag and policy behavior. - Ensure local-only fallback serves queries when NATS is unreachable.
Cluster status
Runtime NATS connectivity state is available via the API
(GET /api/v1/cluster/status) and the TUI. It reports
whether this node is connected to NATS, the server it is connected to,
and the current round-trip time.
Terraform
The nexus_cluster_status data source reads live cluster
connectivity for use in Terraform plans and outputs.
data "nexus_cluster_status" "this" {}
output "nats_connected" {
value = data.nexus_cluster_status.this.connected
}
output "nats_rtt_ms" {
value = data.nexus_cluster_status.this.rtt_ms
}
| Attribute | Type | Description |
|---|---|---|
cluster_id |
string | Cluster identifier. |
cluster_name |
string | NATS cluster name. |
connected |
bool | Whether the node is connected to NATS. |
nats_enabled |
bool | Whether NATS is enabled on this node. |
rtt_ms |
number | Round-trip time to the NATS server in milliseconds. |
server_name |
string | Connected NATS server name. |
server_url |
string | Connected NATS server URL. |