PowerFlex Exporter
A Go exporter for Dell PowerFlex clusters (Gen1 and Gen2). It authenticates to the
PowerFlex gateway REST API, collects the full Dell statistic set across all object types,
and exposes the metrics via both a Prometheus /metrics endpoint and an OTLP
metric push. It replaces Dell's Python + Telegraf + InfluxDB collection layer.
Features
- Dual export — Prometheus pull (
/metrics) and OTLP metric push, fed from one shared snapshot. - Both generations, auto-detected — Gen1 (mirroring) via
querySelectedStatistics, Gen2 (ErasureCoding) via the v5 metrics API; the generation is detected per cluster from storage-pool layout. - Full parity — Gen1's 7 object types plus Gen2's StorageNode, DeviceGroup (incl. PMEM/WRC) and Sdt (NVMe/TCP).
- Multi-cluster — one process monitors many clusters; every metric carries a
clusterlabel. - Operational — per-cluster OAuth token lifecycle, graceful per-cluster degradation, hot config reload (SIGHUP + file watch), snapshot-based health endpoint, optional OTLP tracing.
Architecture
A single background collection loop polls every cluster on collection.interval,
derives metrics, and publishes an immutable snapshot (RWMutex pointer-swap). Both the
Prometheus collector (Collect() reads the snapshot) and the OTLP exporter (observable
gauges read the snapshot) serve from that snapshot, so API load is independent of the
number of scrapers and the push cadence.
PowerFlex gateways ──► ClusterClient (auth + REST) ──► collection loop ──► SnapshotStore
│ │
Prometheus ◄┘ └► OTLP push
The cost of the snapshot model is up to one collection.interval of staleness on a
scrape (acceptable — Dell's own pipeline polls every 10s); it is surfaced via
pflex_last_scrape_timestamp_seconds.
Scope
Supports PowerFlex 4.5+ (Gen1, mirroring) and PowerFlex 5.x+ (Gen2, erasure coding).
Both use the bearer auth flow (/rest/auth/login, /rest/auth/update-token); older
firmware offering only Basic auth is out of scope. The exporter detects each cluster's
generation automatically and chooses the matching collection path — a single binary
covers a fleet of either or both generations.
See Installation to get started.