Monitoring

June 16, 2026 ยท View on GitHub

The controller exposes Prometheus metrics and can emit OpenTelemetry traces.

Metrics

Metrics are served in Prometheus format at /metrics on the health server (HEALTH_CHECK_ADDRESS, default :8080). In addition to the standard Go runtime and process collectors, the following controller metrics are exported:

MetricTypeDescription
fip_controller_reconciliations_totalcounterReconciliation runs, labelled by result (success/error)
fip_controller_reconcile_duration_secondshistogramDuration of reconciliation runs
fip_controller_floating_ip_reassignments_totalcounterFloating IP (re)assignments performed
fip_controller_managed_floating_ipsgaugeNumber of floating IPs currently managed
fip_controller_leadergauge1 if this instance is the leader, otherwise 0

Scraping with the Prometheus Operator

The Helm chart can create a Service and a ServiceMonitor for scraping:

monitoring:
  serviceMonitor:
    enabled: true
    interval: 30s
    labels:
      release: kube-prometheus-stack

This requires the Prometheus Operator CRDs to be installed in the cluster.

Tracing (OpenTelemetry)

Traces are only emitted when an OTLP endpoint is configured via OTEL_EXPORTER_OTLP_ENDPOINT (see configuration). When unset, tracing is fully disabled with no runtime overhead.

Each reconciliation run produces a span (UpdateFloatingIPs) with attributes for the number of managed floating IPs and running servers, and an event per floating IP reassignment. Traces are exported over OTLP/gRPC.

Configure the endpoint through the Helm chart:

monitoring:
  otelEndpoint: otel-collector.observability:4317