Nvidia GPU Exporter utkuozdemir
winget install --id=utkuozdemir.nvidia_gpu_exporter -e Nvidia GPU exporter for prometheus, using the nvidia-smi binary to collect, parse and export GPU metrics. Supports running as a native Windows service.
winget install --id=utkuozdemir.nvidia_gpu_exporter -e Nvidia GPU exporter for prometheus, using the nvidia-smi binary to collect, parse and export GPU metrics. Supports running as a native Windows service.
Nvidia GPU exporter for prometheus, using nvidia-smi binary to gather metrics.
> [!WARNING] > Heads up: this is a side project I maintain in my spare time. I might take a long time to look at issues or PRs, or not get to them at all. Sorry in advance, and thanks for understanding.
This is a simple exporter that uses the nvidia-smi(.exe) binary to collect,
parse and export metrics. Since it only needs nvidia-smi, it also works on
Windows - no Docker or Linux required.
It can also skip nvidia-smi entirely and read the metrics straight from
the driver library. See the NVML backend
below.
nvidia-smi is often the only uniform source of
utilization, memory, power and temperaturenvidia-smi still answersIf you run datacenter cards on Kubernetes with the GPU Operator already installed, DCGM-exporter is probably the better fit; this exporter aims at the cases above.
nvidia-smi(.exe)? binary - Windows, Linux, MacOS... No C bindings requirednvidia-smi command remotelynvidia-smi can expose (future-compatible)nvidia-smi on a timer instead of on every scrapeOn Linux, the exporter can skip nvidia-smi and read the metrics directly
from the NVIDIA driver library (NVML). Every metric the default backend
serves stays identical in name, labels and value, so existing dashboards and
alerts keep working. On top of that it adds families nvidia-smi cannot
provide: per-MIG-instance metrics, XID error counters, a total energy
counter and PCIe throughput. The official Grafana dashboards have panels for
all of these, which sit empty on the default backend and light up on this
one.
It ships as its own release flavor that already defaults to this backend:
grab a -nvml archive from the
releases page,
or use a -nvml image tag:
docker run -d \
--name nvidia_gpu_exporter \
--restart unless-stopped \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=utility \
-p 9835:9835 \
utkuozdemir/nvidia_gpu_exporter:latest-nvml
It is marked experimental mainly because it needs more mileage across driver versions and GPU generations. If you try it, open an issue about how it went, good or bad. That is what will get it past the experimental label. See CONFIGURE.md for the full backend comparison and current limits.
Demo mode serves realistic synthetic metrics, including the NVML-only families, with no GPU, driver or even Linux required:
nvidia_gpu_exporter --collect.backend demo
By default it simulates two H200 GPUs with fluctuating values, a MIG topology and an XID error history. The simulated setup is configurable; see CONFIGURE.md.
There are two official Grafana dashboards, and they link to each other in Grafana:
14574),
the per-GPU detail view.25547),
which compares all GPUs of a node side by side and drills down into the
detail dashboard.Import either by ID in Grafana (Dashboards - New - Import), or enable
grafanaDashboard in the Helm chart to get both provisioned automatically. The
JSON is also in this repository under docs/grafana.
Here's how they look:


You can install it from plain binaries, deb/rpm packages, winget, Docker images or the Helm chart. See INSTALL.md for details.
Release artifacts are signed so you can check they came from this project's release pipeline:
checksums.txt file attached to each release is signed with GPG
(checksums.txt.asc), which covers every binary, archive and package.See INSTALL.md for the exact verification commands, and the chart README for the chart.
See CONFIGURE.md for details.
See METRICS.md for details.
See CONTRIBUTING.md for details.
The exporter parses nvidia-smi output, which differs across GPU models,
driver versions and operating systems. The test corpus already covers a good
range of hardware, but a capture from a setup it hasn't seen yet, say a new
GPU model or a brand-new driver, is still a welcome contribution and takes
one command:
./internal/captures/collect.sh # add --load for an under-load sample too
It needs only nvidia-smi, bash, and the standard core utilities (awk,
sed, ...), runs read-only, and masks identifiers (GPU UUID, serial, hostname)
by default. It writes one .txt file: commit it and open a PR, or attach it to
an issue. See internal/captures/README.md.