AI服务器集群监控:从零搭建Prometheus与GPU指标采集
AI服务器集群监控要解决的核心问题,是让运维人员能在一处看到所有节点的GPU温度、显存占用、利用率和任务进程,而不是逐台登录执行 nvidia-smi。
下面按“先让GPU指标暴露出来,再让Prometheus抓取,最后用Grafana验证”的顺序落地。
先确认每台节点的基础条件
这套方案的适用条件是:集群节点为Linux系统,GPU为NVIDIA卡,节点之间网络互通。
开始前在每台GPU节点上执行 nvidia-smi,确认驱动正常、能看到卡信息。
如果命令不存在或报驱动错误,先解决驱动问题,监控本身不负责修复驱动。
统一规划端口:dcgm-exporter默认监听 9400,Prometheus默认监听 9090。
生产环境建议只在内网开放这些端口,不要直接暴露到公网。
在GPU节点部署dcgm-exporter
dcgm-exporter负责把NVIDIA的GPU指标转成Prometheus能读的格式。
最省事的方式是用Docker运行,注意需要挂载GPU设备:
docker run -d --gpus all --rm \
--name dcgm-exporter \
-p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.0-3.2.0-ubuntu22.04
启动后在节点上验证指标是否可读:
curl -s http://127.0.0.1:9400/metrics | grep DCGM_FI_DEV_GPU_TEMP
能返回类似 DCGM_FI_DEV_GPU_TEMP{gpu="0"} 45 的行,说明该节点GPU温度指标已经暴露。
对着每台GPU节点重复这一步,记录下各节点IP。
配置Prometheus抓取所有节点
在监控服务器上准备 prometheus.yml,用静态配置列出各节点地址:
scrape_configs:
- job_name: 'gpu-nodes'
static_configs:
- targets: ['10.0.0.11:9400', '10.0.0.12:9400']
labels:
cluster: 'ai-train'
启动Prometheus:
docker run -d --name prometheus \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
打开 http://监控服务器IP:9090/targets,所有target状态应为 UP。
如果某个节点是 DOWN,先在该节点本地执行前面的 curl 命令,确认dcgm-exporter是否真的在运行,再检查防火墙是否放行了9400端口。
用Grafana完成可视化验证
在Grafana中添加Prometheus数据源,地址填 http://监控服务器IP:9090。
导入一个现成的dcgm-exporter看板,或新建面板查询 DCGM_FI_DEV_GPU_TEMP、DCGM_FI_DEV_FB_USED 等指标。
验证标准很简单:看板里能按节点和GPU编号区分出温度、显存占用曲线,且数值与节点上执行 nvidia-smi 的结果基本一致。
如果看板空白,回到Prometheus的Graph页面直接查指标名,确认数据是否存在,再排查Grafana查询语句。
几个容易踩的坑
第一,驱动版本与dcgm-exporter镜像不匹配会导致容器启动后指标为空,建议镜像版本与节点驱动版本保持兼容,启动后先看容器日志。
第二,只监控GPU不监控节点本身会漏掉CPU和内存瓶颈,建议后续补上node_exporter,用同一套Prometheus管理。
第三,静态配置节点多了以后维护成本高,集群规模扩大时再考虑服务发现或配置管理工具,不必一开始就上复杂方案。
第四,抓取间隔不要设得过短,GPU指标变化频繁,但过密的抓取会加重监控服务器负担,按集群规模在15到30秒之间取一个值即可。
常见疑问
dcgm-exporter和node_exporter需要二选一吗?
不需要。
前者采集GPU指标,后者采集CPU、内存、磁盘等系统指标,两者可以同时运行在同一节点,由Prometheus分别抓取。
没有Kubernetes能搭这套监控吗?
可以。
本文的Docker方式不依赖Kubernetes,裸机集群同样适用,只是节点列表需要手动维护。
监控数据能保留多久?
这取决于Prometheus的存储配置和磁盘容量,默认保留时间有限,长期留存需要额外规划存储,不要默认认为数据会永久保存。
完成以上步骤后,AI服务器集群监控就有了可用的基础链路:节点暴露指标、Prometheus集中抓取、Grafana统一查看。
后续再根据实际告警需求补充规则,而不是一开始就把所有指标都配上告警。