Telemetry

Telemetry (OpenTelemetry)

Nexus GSLB supports distributed tracing via OpenTelemetry (OTel). Traces complement Prometheus metrics: metrics give aggregate throughput and latency; traces show the per-request path through the daemon for debugging individual queries or health probe failures.

When no endpoint is configured, the global OTel no-op tracer is used and tracing has zero overhead.

Enable tracing

telemetry:
  otlp:
    endpoint: "localhost:4317"   # gRPC endpoint (OTel Collector or Jaeger)
    insecure: true               # disable TLS — use for local collectors
    serviceName: "nexus-gslb"   # reported service name (default: "nexus-gslb")
Field Default Description
telemetry.otlp.endpoint "" gRPC endpoint for the OTLP exporter. Leave empty to disable tracing entirely.
telemetry.otlp.insecure false Disable TLS on the gRPC connection. Set true for local collectors without TLS.
telemetry.otlp.serviceName "nexus-gslb" Service name reported to the trace backend.

Span catalog

Span name Tracer Parent Key attributes
dns.handleRequest nexus-gslb/dns root dns.question — queried name; dns.type — record type (A, AAAA, …)
dns.resolveFromDB nexus-gslb/dns dns.handleRequest dns.qname — queried name; status Ok on member hit, Error("no result") on miss
health.probe nexus-gslb/health root (one per endpoint per interval) health.ip — endpoint address; health.type — check type (tcp, http, icmp, script, webhook); health.result — boolean outcome

Compatible backends

  • OpenTelemetry Collector (recommended): accepts OTLP gRPC on port 4317. The Collector can fan out to Jaeger, Zipkin, Prometheus remote-write, and more.
  • Jaeger (v1.35+): accepts native OTLP gRPC directly on port 4317 without a Collector.
  • Grafana Tempo: accepts OTLP gRPC on port 4317 via its built-in ingester.

Example: local OTel Collector

telemetry:
  otlp:
    endpoint: "localhost:4317"
    insecure: true
    serviceName: "nexus-gslb"

The Collector should be configured with an OTLP receiver and an appropriate exporter:

# otel-collector-config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: "0.0.0.0:4317"
exporters:
  jaeger:
    endpoint: "jaeger:14250"
    tls:
      insecure: true
service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [jaeger]

Example: Jaeger directly

telemetry:
  otlp:
    endpoint: "jaeger-host:4317"
    insecure: false
    serviceName: "nexus-prod"

See Metrics.md for Prometheus metric coverage.


Was this article helpful?
© 2026