AI服务器AIOps配置:从指标采集到告警落地的实操路径
AIOps不是买一套平台就能自动生效,它的前提是把AI服务器的关键指标稳定采集上来,再让告警规则替你盯住异常。
对一台跑推理或训练的AI服务器来说,最值得先接管的指标是GPU利用率、显存占用、GPU温度、系统负载和推理服务延迟。
下面按“装采集器—接Prometheus—写告警—验证”的顺序走一遍,环境以常见的Ubuntu 22.04 + Docker + NVIDIA驱动为例,其他发行版命令自行替换。
先确认采集前提
动手前需要满足三个条件:服务器已装好NVIDIA驱动,nvidia-smi能正常输出;
Docker已安装并配置好nvidia-container-runtime;
服务器能访问Prometheus所在网络。
可以先跑一条命令确认GPU可见:
nvidia-smi -L
输出中能看到GPU型号和UUID,说明驱动层正常。
如果这里报错,先解决驱动问题,不要继续往下配,否则后续Exporter会拿不到数据。
用DCGM Exporter采集GPU指标
NVIDIA官方提供的DCGM Exporter能把GPU利用率、显存、温度、功耗等指标以Prometheus格式暴露出来。
用Docker启动最省事:
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
启动后访问 http://服务器IP:9400/metrics,能看到 DCGM_FI_DEV_GPU_UTIL、DCGM_FI_DEV_MEM_COPY_UTIL、DCGM_FI_DEV_GPU_TEMP 这类指标行,就说明GPU指标已经暴露。
端口9400只在内网使用,不建议直接暴露到公网;
如果必须跨网访问,用防火墙限制来源IP。
系统层指标用node_exporter补上:
docker run -d --rm --name node-exporter \
-p 9100:9100 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
prom/node-exporter:v1.7.0 \
--path.procfs=/host/proc --path.sysfs=/host/sys
把指标接进Prometheus
在Prometheus的 prometheus.yml 中增加两个抓取任务,targets换成你服务器的内网IP:
scrape_configs:
- job_name: 'ai-node'
static_configs:
- targets: ['192.168.1.10:9100']
- job_name: 'ai-gpu'
static_configs:
- targets: ['192.168.1.10:9400']
改完配置后重载Prometheus:
curl -X POST http://localhost:9090/-/reload
然后在Prometheus界面的Status > Targets里确认两个任务都是UP。
如果显示DOWN,优先检查端口是否被防火墙拦截、容器是否在运行,以及targets里的IP是否写成了公网地址而实际走内网。
写几条真正有用的告警规则
AIOps配置里最容易出问题的是告警规则写得太泛,导致要么天天误报、要么真出事不响。
建议先落三条和AI服务器强相关的规则:
groups:
- name: ai-server-alerts
rules:
- alert: GPUMemoryHigh
expr: DCGM_FI_DEV_FB_USED / (DCGM_FI_DEV_FB_USED + DCGM_FI_DEV_FB_FREE) > 0.9
for: 5m
labels:
severity: warning
annotations:
summary: "GPU显存占用超过90%,持续5分钟"
- alert: GPUTempHigh
expr: DCGM_FI_DEV_GPU_TEMP > 85
for: 3m
labels:
severity: critical
annotations:
summary: "GPU温度超过85摄氏度"
- alert: NodeDown
expr: up{job="ai-node"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "AI服务器指标采集中断"
把规则文件放到Prometheus的 rules/ 目录,并在主配置中通过 rule_files 引用,重载后到Alerts页面确认规则已加载。
阈值不要照抄,按你的卡型和业务调整:训练卡长时间80度以上可能正常,推理卡则要更敏感。
验证告警是否真的能触达
规则加载成功不等于告警能送到人。
先手动制造一次触发:把 GPUTempHigh 的阈值临时改成低于当前温度的值,等 for 时间过去,看Prometheus的Alerts页面是否进入Pending再转Firing。
确认触发后,再检查Alertmanager或你接的通知渠道是否收到消息。
验证完记得把阈值改回去,避免留下误报规则。
几个容易踩的坑
- 只看GPU不看进程:显存涨满但不知道是哪个容器占的,排查会非常慢。建议同时采集容器指标,或在推理服务侧暴露请求队列长度。
- 告警没有分级:所有告警都发同一个群,久了就没人看。至少分成warning和critical两档,critical才走电话或短信。
- 采集器重启后指标断档:用Docker的
--restart unless-stopped保证Exporter随系统启动,否则服务器重启后监控会静默失效。 - 把监控端口暴露公网:9400和9100都不需要公网访问,用安全组或防火墙限制内网来源。
整套配下来,你得到的不是“AIOps平台”,而是可解释、可验证的监控底座:指标从哪来、告警为什么响、去哪查,都有明确路径。
后续再叠加日志分析和自动化处置,才有可靠的数据基础。