5 步搞定 nvidia_gpu_exporter:GPU 监控从部署到 Grafana 告警
2026/8/22 17:29:30 网站建设 项目流程

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

不同平台最短路径一览:

平台最短路径验证方式
WindowsPowerShell 一键脚本,含 Prometheus + Grafana浏览器访问 9090 / 3000
Debian / Ubuntu官方.debsystemctl status
RHEL / CentOS官方.rpmsystemctl status
Docker一条docker run(需 NVIDIA Container Toolkit)容器日志无报错
KubernetesHelm 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_exporter

Windows: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=hosthostPID: true

日志级别与格式

--log.level支持 debug / info / warn / error,--log.format支持 logfmt 或 json。排障时临时开 debug 看每次 nvidia-smi 到底执行了什么;生产环境建议 json 方便日志系统解析。

✅ 每次改完参数重启服务,验证方式都一样:Prometheus 的 targets 页该目标仍是 UP,/metricsnvidia_smi_指标齐全。

用 Grafana 仪表盘看懂 GPU 指标

数据进了 Prometheus,还要能看。仓库的 docs/grafana 下放着两份官方仪表盘 JSON,互相有跳转链接:

  • dashboard.json:单卡详情盘——健康状态、利用率、温度、显存、功耗、风扇、时钟、XID 错误
  • dashboard-overview.json:多卡总览盘——节点上所有 GPU 并排对比,可下钻到详情盘

导入方式:Grafana → Dashboards → Import → 上传 JSON(也可以在 grafana.com 按 ID 搜1457425547)。前提是本机的 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询