Goals
- OpenTelemetry-native - uses standard
OTEL_*env vars, exports via OTLP gRPC or HTTP to any OTel-compatible backend - Cross-vendor GPU support - NVIDIA (NVML), AMD, and Intel on Linux and Windows from a single binary
- OTel semantic conventions -
hw.gpu.*metric names,hw.id/hw.name/hw.vendorattributes per spec - Zero dependencies - no DCGM, no Python, no CUDA toolkit needed at runtime for hardware metrics
- Resilient - continues exporting host metrics even when no GPUs are present; retries GPU discovery every 30s
What it collects
GPU Hardware Telemetry
Utilization, memory, temperature, power, energy, clocks, PCIe/interconnect throughput, throttle, ECC/XID/RAS — NVIDIA, AMD, and Intel on Linux and Windows
Process + workload attribution
Per-process VRAM/util plus cmdline, OS state (zombie), owner, uptime, and LLM framework labels (
vllm, ollama, …). Kubernetes pod name/namespace via PodResourceseBPF CUDA Tracing
Kernel launch counts, grid/block sizes, memory allocations, and memory copies via uprobes on libcudart (on by default on Linux; discovers libs from
/proc with host PID — no CUDA mount)GPU vendor support
Platform support
How it works
1
Discovers GPUs
On Linux, the collector scans
/sys/bus/pci/devices/ for GPU class codes. On Windows, it loads nvml.dll when present and enumerates adapters via DXGI.2
Initialises vendor backend
Each detected GPU is handed to its vendor-specific backend. NVIDIA uses NVML. Linux AMD/Intel read sysfs/hwmon; Windows AMD/Intel use DXGI memory totals and PDH for utilization and per-process attribution.
3
Registers OTel instruments
Observable gauge and counter instruments are registered with the OTel SDK meter. On each collection tick, the SDK calls back into the collector to read fresh values from each GPU.
4
Exports via OTLP
Metrics are exported via OTLP to any compatible backend - OpenLIT, Grafana, Datadog, New Relic, or a standard OTel Collector.
Quickstart
Get the collector running in under 5 minutes with Docker
Configuration
Full reference for all environment variables

