一、整体接入流程
步骤 | 说明 |
|---|---|
1️⃣ 安装 Zabbix Agent | 在 GPU 服务器上安装 Zabbix Agent(经典版或 Agent2),推荐 Agent2 |
2️⃣ 配置 Agent | 设置主动模式( |
3️⃣ 编写 GPU 监控脚本 | 实现 GPU 发现(LLD)和指标获取(利用率、显存、温度、功耗) |
4️⃣ 定义 UserParameter | 将脚本注册为自定义监控项 |
5️⃣ 重启 Agent | 加载配置 |
6️⃣ Zabbix 前端配置 | 创建主机,关联模板,添加发现规则和监控项原型 |
7️⃣ 验证数据 | 检查最新数据是否上报 |
二、检测脚本编制
2.1 脚本位置与权限
创建两个脚本在 /usr/local/bin/ 下,赋予执行权限,并确保 zabbix 用户能够执行(已加入 video 组)。
2.2 GPU 发现脚本 (gpu_discovery.sh)
作用:输出所有 GPU 的索引和名称,供 Zabbix 低级别自动发现使用。
bash
#!/bin/bash
# 文件:/usr/local/bin/gpu_discovery.sh
gpu_count=$(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l)
echo '{"data":['
for i in $(seq 0 $((gpu_count-1))); do
name=$(nvidia-smi -i $i --query-gpu=name --format=csv,noheader | sed 's/"/\\"/g')
echo -n '{"{#GPUINDEX}":'$i', "{#GPUNAME}":"'$name'"}'
[ $i -lt $((gpu_count-1)) ] && echo ','
done
echo ']}'输出示例:
json
{"data":[
{"{#GPUINDEX}":0, "{#GPUNAME}":"NVIDIA L20"},
{"{#GPUINDEX}":1, "{#GPUNAME}":"NVIDIA L20"},
...
]}2.3 GPU 指标获取脚本 (gpu_metrics.sh)
作用:根据传入的 GPU 索引和指标类型,返回对应数值。
bash
#!/bin/bash
# 文件:/usr/local/bin/gpu_metrics.sh
# 用法:gpu_metrics.sh <gpu_index> <metric>
# 支持的 metric: util, mem_used, mem_total, temp, power
gpu=$1
metric=$2
case $metric in
util)
nvidia-smi -i $gpu --query-gpu=utilization.gpu --format=csv,noheader,nounits
;;
mem_used)
nvidia-smi -i $gpu --query-gpu=memory.used --format=csv,noheader,nounits
;;
mem_total)
nvidia-smi -i $gpu --query-gpu=memory.total --format=csv,noheader,nounits
;;
temp)
nvidia-smi -i $gpu --query-gpu=temperature.gpu --format=csv,noheader,nounits
;;
power)
nvidia-smi -i $gpu --query-gpu=power.draw --format=csv,noheader,nounits | sed 's/ W//'
;;
esac2.4 赋予执行权限并测试
bash
chmod +x /usr/local/bin/gpu_discovery.sh /usr/local/bin/gpu_metrics.sh
# 测试发现脚本
/usr/local/bin/gpu_discovery.sh
# 测试指标脚本(返回数值)
/usr/local/bin/gpu_metrics.sh 0 util
/usr/local/bin/gpu_metrics.sh 0 temp三、Zabbix Agent 配置
3.1 配置文件 /etc/zabbix/zabbix_agentd.conf 关键项
ini
# 主动模式,关闭被动监听(可根据需要开启)
StartAgents=0
# Zabbix Server 地址(主动上报)
ServerActive=IP
# 主机名(务必与前端主机名一致)
Hostname=Gpu-server
# 允许自定义参数中的特殊字符
UnsafeUserParameters=1
# 包含自定义配置目录
Include=/etc/zabbix/zabbix_agentd.d/*.conf3.2 自定义参数文件 /etc/zabbix/zabbix_agentd.d/gpu.conf
ini
UserParameter=gpu.discovery,/usr/local/bin/gpu_discovery.sh
UserParameter=gpu.metrics[*],/usr/local/bin/gpu_metrics.sh $1 $23.3 重启 Agent
bash
systemctl restart zabbix-agent
systemctl status zabbix-agent3.4 验证自定义参数
bash
zabbix_agentd -t gpu.discovery
zabbix_agentd -t gpu.metrics[0,util]四、Zabbix 前端配置(主动模式)
4.1 创建主机
主机名:
Gpu-server(与 Agent 配置完全一致)可见名称:任意
群组:例如
Linux servers接口:添加 Agent 接口,IP 可填
127.0.0.1(主动模式下端口不实际使用,但必须存在)模板:关联
Linux by Zabbix agent(用于 CPU、内存、磁盘等基础监控)
4.2 创建发现规则(用于 GPU)
进入主机 → 发现规则 → 创建发现规则
名称:
NVIDIA GPU discovery类型:
Zabbix 客户端(主动模式下仍选此项)键值:
gpu.discovery更新间隔:
1h过滤器:保持为空(不设置任何过滤条件,避免宏不存在错误)
创建监控项原型(点击发现规则上方的“监控项原型”标签)
名称
键值
单位
信息类型
GPU {#GPUINDEX} 利用率
gpu.metrics[{#GPUINDEX},util]%
数字(无符号)
GPU {#GPUINDEX} 显存使用
gpu.metrics[{#GPUINDEX},mem_used]MiB
数字(无符号)
GPU {#GPUINDEX} 显存总量
gpu.metrics[{#GPUINDEX},mem_total]MiB
数字(无符号)
GPU {#GPUINDEX} 温度
gpu.metrics[{#GPUINDEX},temp]℃
数字(浮点)
GPU {#GPUINDEX} 功耗
gpu.metrics[{#GPUINDEX},power]W
数字(浮点)
可选:创建图形原型,将利用率和温度等组合显示。
4.3 等待数据
发现规则会在下一个更新周期(1小时)自动执行,也可手动点击“立即执行”触发。
进入 监测 → 最新数据,筛选主机
Gpu-server,搜索gpu.metrics即可看到数据。
五、实现特定信息的检测
5.1 通过 Zabbix 触发器实现告警
例如:GPU 温度超过 85℃ 告警,GPU 利用率持续过低等。
创建触发器(可在模板或主机上):
名称:
GPU {#GPUINDEX} 温度过高表达式:
last(/Gpu-server/gpu.metrics[{#GPUINDEX},temp])>85严重性:警告/严重
5.2 自定义监控其他 GPU 指标
如需监控更多指标(如风扇转速、PCIe 链路速率、ECC 错误计数等),只需扩展 gpu_metrics.sh 的 case 分支,添加新的指标类型,然后在 Zabbix 前端创建对应的监控项原型即可。
示例:添加 GPU 风扇转速监控(L20 可能无风扇,但可通用)
bash
# 在 gpu_metrics.sh 中添加
fan_speed)
nvidia-smi -i $gpu --query-gpu=fan.speed --format=csv,noheader,nounits
;;5.3 调整采集频率
对于利用率、温度等变化较快的指标,可以在监控项原型中设置更新间隔为
30s或1m。对于显存总量等静态指标,可设置为
1d或使用flexible interval。
六、验证与排错
6.1 常见问题检查表
现象 | 排查步骤 |
|---|---|
Agent 日志显示 | 检查前端主机名是否与 Agent 的 |
发现规则错误 | 删除发现规则中的所有过滤器,或确保过滤器使用的宏存在于 JSON 中 |
监控项无数据 | 手动执行 |
主动模式不上报 | 确认 |
6.2 日志查看
bash
# Agent 日志
tail -f /var/log/zabbix/zabbix_agentd.log
# Server 日志(需在 Zabbix Server 上执行)
tail -f /var/log/zabbix/zabbix_server.log | grep "Gpu-server"七、总结
通过以上步骤,您已经完成了:
✅ Zabbix Agent 的主动模式配置
✅ GPU 发现脚本和指标获取脚本的编写与部署
✅ 自定义监控项和低级别自动发现的配置
✅ 对 4 张 NVIDIA L20 的利用率、显存、温度、功耗等关键指标的实时监控