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

如何通过PyVmomi的PerfManager获取ESXi服务器原始性能统计数据

嗨,作为PyVmomi新手能摸到PerfManager这一步已经很棒啦!你想获取最细粒度的存储性能统计,思路完全正确——用vim.PerformanceManager.QuerySpec指定maxSample=1确实能拿到未经聚合的原始采样数据,而不是时间范围内的汇总值。

下面给你梳理下具体的实现细节和注意点:

实现细粒度存储性能查询的关键步骤
  • 锁定细粒度指标:首先要确保你选的metricId是对应存储的细粒度指标,比如磁盘读写延迟(disk.read.latency)、IOPS(disk.numberReadAveraged.average)这类。可以通过perfManager.QueryAvailablePerfMetric()查询该ESXi主机支持的所有存储相关指标,并且指定最小的采样间隔(通常ESXi默认最小采样间隔是20秒,不同版本可能有差异)。
  • 构造精准的QuerySpec:你提到的maxSample=1是核心,它会强制只返回一个样本,也就是时间范围内最匹配的那一条原始数据。startTime和endTime建议设置成一个覆盖最小采样间隔的窄窗口(比如前后相差30秒),这样能确保抓到最近的那一次采样。
  • 权限与版本兼容:要确认你的ESXi账号拥有Performance.Modify或Performance.Read权限,同时不同ESXi版本的PerfManager参数可能略有差异,建议先通过perfManager.QueryPerfInterval()确认当前主机的所有可用采样间隔。

附上一段可参考的代码示例:

from datetime import datetime, timedelta
import pyVim.connect

# 假设你已经完成了ESXi主机的连接,拿到了perfManager和host对象
# (连接代码这里省略,你应该已经有这部分逻辑了)

# 1. 获取存储相关的细粒度性能指标
# 先查询主机支持的最小采样间隔
perf_intervals = perfManager.QueryPerfInterval()
min_interval = min(interval.samplePeriod for interval in perf_intervals)

# 查询该间隔下的所有存储相关指标
available_metrics = perfManager.QueryAvailablePerfMetric(
    entity=host,
    intervalId=min_interval
)
storage_metric_ids = [metric for metric in available_metrics if "disk" in metric.nameInfo.key]

# 2. 设置时间窗口,获取最近30秒内的采样
end_time = datetime.now()
start_time = end_time - timedelta(seconds=30)

# 3. 构造查询Spec
query_spec = vim.PerformanceManager.QuerySpec(
    maxSample=1,
    entity=host,
    metricId=storage_metric_ids,
    startTime=start_time,
    endTime=end_time
)

# 4. 执行查询并解析结果
perf_results = perfManager.QueryPerf(querySpec=[query_spec])

for result in perf_results:
    print(f"查询到的采样时间: {result.sampleInfo[0].timestamp}")
    for metric_val in result.value:
        metric_key = metric_val.id.nameInfo.key
        metric_value = metric_val.value[0]  # 因为maxSample=1,所以取第一个元素
        print(f"存储指标 {metric_key}: {metric_value}")

如果遇到查询返回空的情况,可以检查下时间范围是否覆盖了ESXi的采样周期,或者指标是否选对了。另外,有些指标的数值需要结合unitInfo来解读(比如延迟单位是毫秒),可以通过metric_val.id.unitInfo.key查看。

内容的提问来源于stack exchange,提问作者Bruce C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:37:30