Docker (recommended)
The easiest way to run the collector. The image is published to GitHub Container Registry and supportslinux/amd64 and linux/arm64.
process.state, owner), run with host PID namespace access: Docker --pid=host, Compose pid: host, or Kubernetes hostPID: true. Device-level hw.gpu.* metrics work without it.
Tags
Pre-built binaries
Download a binary for your platform from the GitHub Releases page. Binaries are available for:GPU device and process metrics work on Linux and Windows (NVIDIA via NVML; AMD/Intel via sysfs on Linux or DXGI+PDH on Windows). eBPF CUDA tracing and occupancy are Linux only. On macOS the binary runs with host and process metrics only.
SHA256SUMS.txt file in the release:
Build from source
Requirements: Go 1.21+, CGO enabled (required for NVML on Linux).Kubernetes DaemonSet
Run one collector per GPU node. Use the OpenTelemetry-recommended pattern: downward API →K8S_NODE_NAME → OTEL_RESOURCE_ATTRIBUTES with host.name and k8s.node.name. On GKE, AKS, and EKS the collector also auto-detects k8s.cluster.name, cloud.provider, and host.type (instance type) from the Kubernetes Node object and/or cloud metadata.
hostPID: true (same role as Docker --pid=host) is required for per-process and per-pod GPU attribution so the collector can see workload PIDs under /proc. Without it, device-level hw.gpu.* metrics still work. The nodes/get ClusterRole enables OpenCost-style host.type / cloud.provider discovery from node labels without relying on IMDS (helpful when EKS hop limit is 1).Upgrade
Docker
Binary
Download the new binary from the Releases page, replace the existing file, and restart the process.Uninstall
Docker
Binary
Troubleshooting
No GPU metrics - collector starts but reports no hw.gpu.* metrics
No GPU metrics - collector starts but reports no hw.gpu.* metrics
- Confirm the host has a supported GPU:
lspci | grep -E 'VGA|3D|Display' - For NVIDIA: verify
libnvidia-ml.sois present:ldconfig -p | grep nvidia-ml - For Docker: ensure
--gpus all(NVIDIA) or--device /dev/dri(AMD/Intel) is passed - Check logs:
docker logs otel-gpu-collectorfor"discovered GPU"entries
eBPF tracing not working
eBPF tracing not working
- On Linux it is enabled by default; confirm it is not disabled via
OTEL_GPU_EBPF_ENABLED=false - Check kernel version:
uname -r(requires 5.8+) - The process needs
CAP_BPFandCAP_PERFMON, or run as root - For Docker:
--cap-add CAP_BPF --cap-add CAP_PERFMON,--pid=host, and--ulimit memlock=-1:-1(BPF maps need locked memory; no CUDA mount needed) - For Kubernetes:
hostPID: trueplus BPF capabilities (orSYS_ADMIN); raise memlock if map create returns EPERM - If no CUDA process is running yet, the collector rescans
/procevery 30s - Verify a workload has loaded cudart:
grep libcudart /proc/*/maps 2>/dev/null | head
Connection refused / no data reaching backend
Connection refused / no data reaching backend
- Verify
OTEL_EXPORTER_OTLP_ENDPOINTis reachable from the container:curl http://<endpoint>/health - For Docker networking: use the host IP or service name, not
localhost - Check if gRPC vs HTTP/protobuf matches the backend: set
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuffor HTTP backends (port 4318)
Intel GPU not detected
Intel GPU not detected
- Verify the i915 or Xe driver is loaded:
lsmod | grep -E 'i915|xe' - Check DRM entries exist:
ls /sys/class/drm/ - Requires Linux kernel 5.10+ for sysfs metric exposure
- Fan speed requires kernel 6.16+

