Python管理vSphere - 性能数据采集

Python管理vSphere - 性能数据采集


一、简介

vSphere中纳管着物理主机,在虚拟化管理平台中可以通过【监控-性能-高级】查看cpu、数据存储、内存、网络、磁盘等 的性能数据。但vSphere中管理的对象非常多,如果逐个查看对象的性能数据曲线进行巡检判断,那么运维工作就会变得非常的低效,如果我们通过接口获取对象的性能数据,根据实际的需求配置监控告警,会大大提升运维的效率,为运维工作带来很大便利。

二、查询可获取的性能指标清单

查看官网文档,找到Managed Object - PerformanceManager(vim.PerformanceManager)该对象,查看详细说明

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

示例代码如下:

from pprint import pprint

from pyVim import connect
from pyVmomi import vim  # noqa

si = connect.SmartConnect(host='', port=443, user='', pwd='')

content = si.RetrieveContent()
perf_list = content.perfManager.perfCounter
perf_dict = {}
for counter in perf_list:
    counter_data = f'{counter.groupInfo.key}.{counter.nameInfo.key}.{counter.rollupType}'
    perf_dict[counter_data] = counter.key
pprint(perf_dict)
三、查询对象的性能指标数据

在这里插入图片描述

使用QueryPerf方法查询性能指标数据,详情见官方文档:https://dp-downloads.broadcom.com/api-content/apis/API_VWSA_001/7.0/html/vim.PerformanceManager.html#queryStats

参数说明:
startTime:查询性能数据的起始时间
endTime:查询性能数据的截止时间
intervalId:时间粒度,最小为20秒,推荐5分钟,减少返回的数据
maxSample:控制返回的数据
entity:查询性能的对象
metricId:待检索的性能指标对象

示例代码如下:

import datetime
from pprint import pprint
from pyVim import connect
from pyVmomi import vim  # noqa

si = connect.SmartConnect(host='', port=443, user='', pwd='')

# 查询性能指标对应counterId信息
content = si.RetrieveContent()
perf_list = content.perfManager.perfCounter
perf_dict = {}
for counter in perf_list:
    counter_data = f'{counter.groupInfo.key}.{counter.nameInfo.key}.{counter.rollupType}'
    perf_dict[counter_data] = counter.key
pprint(perf_dict)  # 返回格式:{'cpu.usage.average':对应的counterId}

# 举例
metric_name_list = ['cpu.usage.average', 'mem.usage.average']

counter_id_list = [perf_dict.get(i) for i in metric_name_list if perf_dict.get(i) is not None]


def build_query_perf(counter_id_list, entity_list, refresh_rate=20, instance='', max_sample=None, start_time=None,
                     end_time=None):
    """
    查询指定对象的性能数据
    :param counter_id_list: 性能指标名称对象的id
    :param entity_list: 查询对象列表
    :param refresh_rate: 时间粒度
    :param instance: 目标对象 例如在查询主机的多个网卡时,可以指定instance为*,则会返回所有的网卡指标数据
    :param max_sample: 返回的样本数,-1表示不限制返回样本数量
    :param start_time: 开始时间
    :param end_time: 结束时间
    :return: 返回查询结果
    """
    perf_manager = content.perfManager
    metric_obj_list = []
    for counter_id in counter_id_list:
        metric_obj = vim.PerformanceManager.MetricId(counterId=counter_id, instance=instance)
        metric_obj_list.append(metric_obj)
    data = []
    for entity in entity_list:
        spec = {'entity': entity, 'metricId': metric_obj_list}
        if refresh_rate and refresh_rate != -1:
            spec['intervalId'] = refresh_rate
        if max_sample:
            spec['maxSample'] = max_sample
        if start_time:
            spec['startTime'] = start_time
        if end_time:
            spec['endTime'] = end_time
        query_obj = vim.PerformanceManager.QuerySpec(**spec)
        data.append(query_obj)
    #
    perf_data = perf_manager.QueryPerf(querySpec=data)
    return perf_data


if __name__ == '__main__':
    query_end_time = datetime.datetime.now()
    query_start_time = query_end_time - datetime.timedelta(minutes=5)
    build_query_perf(counter_id_list=counter_id_list,
                     entity_list=['例如主机对象'],
                     refresh_rate=300,
                     instance='',
                     max_sample=None,
                     start_time=query_start_time,
                     end_time=query_end_time
                     )

获取到对象的性能数据后再根据实际需求,对数据的格式进行重新组织以及数据清洗,可以对接到各种监控平台。建议采集频率不要太频繁以及采集的样本数尽量少,减少虚拟化平台的压力。批量查询时也应尽量减少同时查询很多指标,不要一次性返回对象的所有指标,接口可能会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值