Prometheus metrics

Scrape GET /metrics for these gauges. The endpoint is hand-rolled Prometheus text format with no dependency and no cache. A value with no current reading (a failed test, or no tests yet) renders as NaN so Prometheus doesn’t carry a stale value; baudflow_health is omitted entirely when there’s no verdict (calibrating, off mode, failed, or no latest).

The bandwidth gauges reflect the latest Ookla speed test; a ping-only measurement doesn’t populate them.

Metric Description
baudflow_download_mbps Latest download speed (Mbps).
baudflow_upload_mbps Latest upload speed (Mbps).
baudflow_ping_latency_ms Latest latency (ms).
baudflow_ping_jitter_ms Latest jitter (ms).
baudflow_packet_loss Latest packet loss (raw Ookla value).
baudflow_health 1 if the latest test is healthy, 0 if unhealthy. Omitted when there’s no verdict.
baudflow_measurements_total Total retained measurements.
baudflow_uptime_percentage Percentage of tests over the window that were healthy.

Scraping

scrape_configs:
  - job_name: baudflow
    static_configs:
      - targets: ['baudflow:4000']

Point a Grafana panel or an Alertmanager rule at it and your homelab observability stack picks baudflow up like any other exporter.