如何从WMI返回列表中提取Nvidia显卡编码、解码器使用率指标
解决方案
一、指标提取方法
方法1:解析info方法输出(快速实现)
PowerShell中可以用Select-String实现类似Linux grep的过滤功能,直接从原有脚本的输出中匹配提取数值:
$gpus = Get-WmiObject -namespace "root\cimv2\nv" -class gpu foreach($object in $gpus) { $gpuInfoOutput = $object.invokeMethod("info",$null) # 提取编码器使用率 $encoderUsage = $gpuInfoOutput | Select-String "VideoEngine Encoder usage: (\d+)%" | ForEach-Object {$_.Matches.Groups[1].Value} # 提取解码器使用率 $decoderUsage = $gpuInfoOutput | Select-String "VideoEngine Decoder usage: (\d+)%" | ForEach-Object {$_.Matches.Groups[1].Value} Write-Host "编码器使用率:$encoderUsage%" Write-Host "解码器使用率:$decoderUsage%" }
方法2:直接读取videoCodec子类属性(更稳定,推荐)
无需解析文本输出,直接读取WMI对象属性,兼容性和稳定性更好:
- 先确认videoCodec子类的属性名,执行以下命令查看所有字段:
$gpu = Get-WmiObject -Namespace "root\cimv2\nv" -Class Gpu | Select-Object -First 1 $gpu.videoCodec | Select-Object *
- 确认字段名后直接读取数值,示例代码:
$gpuList = Get-WmiObject -Namespace "root\cimv2\nv" -Class Gpu foreach($gpu in $gpuList) { $codecData = $gpu.videoCodec # 以下字段名根据上一步查询结果调整 $encoderUsage = $codecData.encoderUsage $decoderUsage = $codecData.decoderUsage Write-Output $encoderUsage Write-Output $decoderUsage }
二、接入Zabbix监控步骤
1. 编写Zabbix专用采集脚本
将以下内容保存为C:\zabbix\scripts\get_nv_codec_usage.ps1,支持传入参数返回对应指标:
param( [Parameter(Mandatory=$true)] [ValidateSet("encoder","decoder")] [string]$MetricType, [int]$GpuId = 0 ) # 获取指定ID的显卡对象 $gpu = Get-WmiObject -Namespace "root\cimv2\nv" -Class Gpu | Select-Object -Index $GpuId $codecData = $gpu.videoCodec if($MetricType -eq "encoder") { Write-Output $codecData.encoderUsage } else { Write-Output $codecData.decoderUsage }
2. 修改Zabbix Agent配置
打开Zabbix Agent配置文件zabbix_agentd.conf,添加以下自定义监控项:
# 单卡场景直接使用以下配置 UserParameter=gpu.encoder.usage,powershell -ExecutionPolicy Bypass -File "C:\zabbix\scripts\get_nv_codec_usage.ps1" -MetricType encoder UserParameter=gpu.decoder.usage,powershell -ExecutionPolicy Bypass -File "C:\zabbix\scripts\get_nv_codec_usage.ps1" -MetricType decoder # 多卡场景可使用带参数的配置,示例为获取第2张卡(ID=1)的编码器使用率:UserParameter=gpu.encoder.usage[*],powershell -ExecutionPolicy Bypass -File "C:\zabbix\scripts\get_nv_codec_usage.ps1" -MetricType encoder -GpuId $1
3. 验证配置
- 重启Zabbix Agent服务使配置生效
- 在Zabbix服务端使用
zabbix_get工具测试是否能正常获取数值:
zabbix_get -s 目标主机IP -k gpu.encoder.usage
- 测试正常后,即可在Zabbix后台为对应主机添加对应监控项,配置触发器、图表等可视化规则。
内容的提问来源于stack exchange,提问作者j4ck1nth3b0x
相关产品推荐
相关产品推荐

