You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Get-Stat查询不到datastore.totalReadLatency.average指标如何解决

VMware PowerCLI获取存储延迟指标失败排查方案

一、代码存在的已知错误

  • 指标请求不全:你定义的$stat数组仅包含两个延迟指标,但后续代码还使用了datastore.numberReadAveraged.average、datastore.numberWriteAveraged.average两个IOPS指标,未加入请求列表会导致对应值为空。
  • 哈希表覆盖bug:你先初始化$dsTab = @{}为哈希表,后续又将Get-Datastore遍历结果直接赋值给$dsTab,会直接覆盖哈希表结构,导致后续通过UUID匹配datastore名称的逻辑完全失效。

二、无法获取延迟指标的核心原因及修复方案

1. vCenter统计级别配置不足

datastore.totalReadLatency.average、datastore.totalWriteLatency.average属于统计级别3的指标,默认vCenter的统计配置仅开启级别2,不会收集这两个指标:

操作路径:vCenter Web端 → 系统管理 → 统计 → 编辑统计间隔,将对应时间区间(你查询的是过去1小时,对应「实时」间隔)的统计级别调整为3或以上,保存后等待15~30分钟待指标收集后再测试。

2. 指标名称不匹配/可用性问题

不同vCenter版本、PowerCLI版本对应的指标名可能存在差异,先执行以下命令确认当前环境VM层面支持的存储类指标:

Get-StatType -Entity (Get-VM 你的测试虚拟机名) | Where-Object {$_ -match 'latency|datastore'}

如果返回结果中没有你使用的两个指标名,说明VM层面不直接暴露该类指标,可改为从ESXi主机或者Datastore实体层面查询对应指标。

3. PowerCLI版本兼容性问题

低于12.0版本的PowerCLI对vCenter 7.0及以上版本的指标支持存在缺陷,建议先升级PowerCLI到最新稳定版:

Update-Module VMware.PowerCLI -Force

4. 账号权限不足

执行脚本的vCenter账号需要分配性能 → 读取性能指标权限,权限不足会导致Get-Stat返回的指标列表不全。

三、修正后的核心代码片段

# 修正指标定义,加入需要用到的所有指标
$stat = @(
    "datastore.totalReadLatency.average",
    "datastore.totalWriteLatency.average",
    "datastore.numberReadAveraged.average",
    "datastore.numberWriteAveraged.average"
)
$vmName = "你的虚拟机名称"
$entity = Get-VM -Name $vmName | Select-Object -Unique
$start = (Get-Date).AddHours(-1)

# 修正哈希表覆盖bug,去掉对$dsTab的二次赋值
$dsTab = @{}
Get-Datastore | Where-Object {$_.Type -eq "VMFS"} | ForEach-Object {
  $key = $_.ExtensionData.Info.Vmfs.Uuid
  if(!$dsTab.ContainsKey($key)){
    $dsTab.Add($key,$_.Name)
  }
  else{
    Write-Host "Datastore $($_.Name) with UUID $key already in hash table"
  }
}

# 后续Get-Stat逻辑保持不变即可

内容的提问来源于stack exchange,提问作者Empty Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:15:05