5 步搞定 nvidia_gpu_exporter:GPU 监控从部署到 Grafana 告警
【免费下载链接】nvidia_gpu_exporterNvidia GPU exporter for prometheus using nvidia-smi binary OR using NVML项目地址: https://gitcode.com/gh_mirrors/nv/nvidia_gpu_exporter
nvidia_gpu_exporter 是面向 Prometheus 的 GPU 监控 exporter:它在装有 NVIDIA 驱动的机器上运行,把nvidia-smi的查询结果翻译成标准 Prometheus 指标,Prometheus 负责抓取,Grafana 负责呈现。适合想在游戏主机、家用服务器、边缘盒子或 Kubernetes 集群里做 GPU 指标采集,又不想上 DCGM exporter 整套重装备的人。
它的特点就三点:
- 只依赖
nvidia-smi(.exe)二进制——不需要 C 绑定和编译环境,Windows、Linux、macOS 都能跑 - 可以不在被监控机器上运行——通过一条远程命令就能 SSH 到别的机器上执行
nvidia-smi - 字段自动发现——
nvidia-smi能报什么指标它就读什么,新驱动加字段不用改代码 - 仓库自带官方 Grafana 仪表盘 JSON,导入即用
Windows 一键部署 GPU exporter
不同平台最短路径一览:
| 平台 | 最短路径 | 验证方式 |
|---|---|---|
| Windows | PowerShell 一键脚本,含 Prometheus + Grafana | 浏览器访问 9090 / 3000 |
| Debian / Ubuntu | 官方.deb包 | systemctl status |
| RHEL / CentOS | 官方.rpm包 | systemctl status |
| Docker | 一条docker run(需 NVIDIA Container Toolkit) | 容器日志无报错 |
| Kubernetes | Helm chart 部署 DaemonSet | 每节点多一个 Pod |
Windows 一键脚本
⚡ 目标:一台机器上同时跑起 exporter、Prometheus 和 Grafana,全程只需要一个 PowerShell 脚本。
以管理员身份打开 PowerShell,执行仓库里的 windows-all-in-one.ps1:
# 用管理员 PowerShell 执行(脚本会装齐三件套) powershell -NoProfile -ExecutionPolicy Bypass -File "C:\...\windows-all-in-one.ps1"✅ 验证:
- 浏览器打开
http://localhost:9090,能看到 Prometheus 的 targets 页面,nvidia_gpu_exporter目标为UP - 打开
http://localhost:3000,用初始账号admin/admin登录,Dashboards 列表里已经预置了 "Nvidia GPU Metrics" 和 "Nvidia GPU Overview" 两块盘
Debian / Ubuntu 或 RHEL 装系统包
包方式装好后 systemd 服务自动注册,不用手写 unit 文件:
# Debian/Ubuntu sudo dpkg -i nvidia-gpu-exporter_<version>_linux_amd64.deb # RHEL/CentOS sudo rpm -i nvidia-gpu-exporter_<version>_linux_amd64.rpm✅ 验证:systemctl status nvidia_gpu_exporter显示 active,然后浏览器或 curl 访问本机http://<主机>:9835/metrics,应看到大量nvidia_smi_开头的指标行。
Docker 跑容器
⚠️ 前提:宿主机已装 NVIDIA 驱动,且配好了 [NVIDIA Container Toolkit]——容器镜像本身不含任何 NVIDIA 组件,GPU 访问、驱动库和nvidia-smi都是容器运行时在启动时注入的:
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✅ 验证:docker exec nvidia_gpu_exporter nvidia-smi能输出 GPU 信息,说明驱动注入成功;再访问http://<主机>:9835/metrics确认指标已出。生产环境请把latest换成固定版本 tag。
Kubernetes 上更省事:用仓库内置的 charts/nvidia-gpu-exporter Helm chart 装 DaemonSet(加--set runtimeClassName=nvidia),每个 GPU 节点自动起一个 exporter Pod;注意不要给它申请nvidia.com/gpu资源,否则调度器会把整卡从业务负载手里扣走。
注册为系统服务
Linux(systemd):把二进制放进/usr/bin,建一个专用系统用户,再放入仓库自带的 systemd 服务文件:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin nvidia_gpu_exporter # 把 nvidia_gpu_exporter.service 放入 /etc/systemd/system/ 后: sudo systemctl daemon-reload && sudo systemctl enable --now nvidia_gpu_exporterWindows:exporter 原生对接服务控制管理器,不需要 NSSM 之类的第三方包装——winget install --scope machine utkuozdemir.nvidia_gpu_exporter装好后直接nvidia_gpu_exporter install注册服务,给install传的任意参数都会写进服务命令行(比如install --web.listen-address=:9836)。日志落在 Windows 事件查看器的 Application 日志,来源为nvidia_gpu_exporter。
自定义监听端口、查询字段与日志
部署完先确认两件事:--web.listen-address(默认:9835)没被占用;--web.telemetry-path(默认/metrics)是你想暴露的路径。换端口或换路径都只需对应改这两个参数。
用 SSH 远程监控 GPU
目标:exporter 跑在一台常开的机器(比如树莓派)上,GPU 却在别处。--nvidia-smi-command接受任意"能输出 nvidia-smi 格式"的命令:
nvidia_gpu_exporter --nvidia-smi-command \ "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null USER@HOST nvidia-smi"⚠️ 注意:官方容器镜像是 distroless 的,没有 ssh 和 shell,所以远程采集只适用于二进制部署。--nvidia-smi-command也用来处理本地 nvidia-smi 不在 PATH、或需要 sudo 的情况。
精简查询字段、降低采集开销
--query-field-names默认AUTO,会拉nvidia-smi能报的全部字段。只关心温度、利用率、显存时可以显式指定;保留AUTO又想砍掉个别慢字段时,用--query-field-names-exclude(支持*通配,如remapped_rows.histogram.*):
nvidia_gpu_exporter --query-field-names "name,uuid,temperature.gpu,utilization.gpu,memory.used"字段名不确定时,跑一下nvidia-smi --help-query-gpu就能查全。另外两个降低开销的开关:
--collect.interval 15s:nvidia-smi 改为后台每 15 秒跑一次,Prometheus 抓到的是最近一份缓存。适合高抓频或多台 Prometheus 共享同一个 exporter 的场景--collect.compute-apps:额外导出按进程的显存占用(哪个进程吃了多少显存)。容器里要看全部进程,得共享宿主 PID 命名空间(--pid=host或hostPID: true)
日志级别与格式
--log.level支持 debug / info / warn / error,--log.format支持 logfmt 或 json。排障时临时开 debug 看每次 nvidia-smi 到底执行了什么;生产环境建议 json 方便日志系统解析。
✅ 每次改完参数重启服务,验证方式都一样:Prometheus 的 targets 页该目标仍是 UP,/metrics里nvidia_smi_指标齐全。
用 Grafana 仪表盘看懂 GPU 指标
数据进了 Prometheus,还要能看。仓库的 docs/grafana 下放着两份官方仪表盘 JSON,互相有跳转链接:
- dashboard.json:单卡详情盘——健康状态、利用率、温度、显存、功耗、风扇、时钟、XID 错误
- dashboard-overview.json:多卡总览盘——节点上所有 GPU 并排对比,可下钻到详情盘
导入方式:Grafana → Dashboards → Import → 上传 JSON(也可以在 grafana.com 按 ID 搜14574和25547)。前提是本机的 Prometheus 数据源已配好。注意:用默认(exec)后端时,MIG、XID、能耗这类 NVML 专属面板会显示为空,属正常现象。
排障:指标缺失、权限与端口问题
💡 排障的核心思路:先看采集状态指标,再动手查环境。
| 症状 | 先查什么 |
|---|---|
/metrics没有 GPU 指标 | 看nvidia_smi_last_collect_success(0 = 最近一次采集失败)和nvidia_smi_command_exit_code(nvidia-smi 退出码),再手动跑一遍nvidia-smi确认驱动本身是否正常 |
| SSH 远程采集失败 | 目标机能否无交互执行nvidia-smi:SSH 密钥或密码认证没配好,exporter 一样采不到 |
| Windows 下指定 nvidia-smi 路径报"找不到" | 路径含空格时,引号必须是参数值的一部分:--nvidia-smi-command '"C:\Program Files\...\nvidia-smi.exe"' |
| Prometheus 抓不到 exporter | 确认 9835 端口放通(sudo ufw allow 9835/tcp),systemd 下确认服务是 active |
| 采集超时、进程被杀 | 驱动卡死时会拖死整轮采集,--collect.timeout(默认 10s)控制上限;--shutdown-on-error决定致命错误时是退出还是继续报错 |
两点提醒:
/-/healthy和/-/ready只表示 exporter 进程活着,不代表 GPU 采集正常,别拿它们当业务健康判据- 指标名和字段映射的完整清单见 docs/METRICS.md,参数全集见 docs/CONFIGURE.md——对不上号时先翻这两份文档
【免费下载链接】nvidia_gpu_exporterNvidia GPU exporter for prometheus using nvidia-smi binary OR using NVML项目地址: https://gitcode.com/gh_mirrors/nv/nvidia_gpu_exporter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考