KVM:获取cpu、内存、磁盘信息

一、宿主机

操作系统和主机名

cat /etc/centos-release
cat /etc/hostname

内存使用情况

cat /proc/meminfo 或者free

cpu使用率

top -n1 | awk '/Cpu/{print $2}'

cpu个数

cat /proc/cpuinfo | grep "processor"| wc -l

磁盘使用情况

 前端展示:

 

二、kvm虚拟机

复制代码
列表显示Domain:
listDomainsID
    runningDomainIDsList  = conn.listDomainsID( )
# 返回一个列表,元素为当前所有运行中的域的ID。

numOfDomains   
    runningDomainNumbers = conn.numOfDomains( )
# 返回一个整数,为当前运行中的域的个数。 

listDefinedDomains
    defindedDomainNameList = conn.listDefinedDomains( )
# 返回一个列表,元素为当前所有已定义但未运行的域的名称。

numOfDefinedDomains
    defindedDomainNameList = conn.numOfDefinedDomains( )
# 返回一个整数,元素为当前所有已定义但未运行的域的个数。
复制代码

内存使用情况

复制代码
#! /usr/bin/python
import libvirt
conn = libvirt.open("qemu+tcp://192.168.1.61/system")

import json
import sys
import time

# CPU memory data
def memory_cpu_usage():
    info = {}
    id = int(sys.argv[1])
    dom = conn.lookupByID(id)
    dom.setMemoryStatsPeriod(10)
    # memory usage
    meminfo = dom.memoryStats()
    free_mem = float(meminfo['unused'])
    total_mem = float(meminfo['available'])
    used_mem = total_mem-free_mem
    mem_usage = round(((total_mem-free_mem) / total_mem)*100, 2)
    info['mem_usage'] = mem_usage
    info['mem_used'] = round(used_mem/1024/1024, 2)
    info['mem_total'] = round(total_mem/1024/1024,  2)
    info['mem_free'] = round(free_mem/1024/1024, 2)
print(memory_cpu_usage())
内存使用情况
复制代码

执行脚本文件:./mem.py 1

mem.py:python脚本文件

1:参数1表示  kvm虚拟机的id

cpu使用率:

通过调用脚本在Linux上执行

复制代码
#! /usr/bin/python
import libvirt
conn = libvirt.open("qemu+tcp://192.168.1.61/system")

import json
import sys
import time

# CPU memory data
def memory_cpu_usage():
    info = {}
    id = int(sys.argv[1])
    dom = conn.lookupByID(id)
    dom.setMemoryStatsPeriod(10)
    # cpu usage
    t1 = time.time()
    c1 = int(dom.info()[4])
    time.sleep(3)
    t2 = time.time()
    c2 = int(dom.info()[4])
    c_nums = int(dom.info()[3])
    cpu_usage = round((c2 - c1) * 100 / ((t2 - t1) * c_nums * 1e9), 2)
    info['cpu_usage'] = cpu_usage
    return json.dumps(info)
print(memory_cpu_usage())
cpu使用率
复制代码

执行脚本文件:./cpu.py 1

cpu.py:python脚本文件

1:参数1表示  某台kvm虚拟机的id

磁盘使用率

virt-df             # 列出所有kvm虚拟机磁盘使用信息
virt-df kvm_1       # 列出某台kvm虚拟机磁盘使用信息

调用脚本在Linux上执行

复制代码
import subprocess

libvirt_api_path = os.path.join(os.path.join(os.path.join(settings.BASE_DIR, "drm"), "api"),"commvault") + os.sep + "libvirtApi.py" interface_existed = os.path.exists(libvirt_api_path) if not interface_existed: ret = 0 data = "libvirtApi接口文件不存在。" else: result = subprocess.getstatusoutput(libvirt_api_path + ' ' + kvm_id)
   status, data = result
   print(data)
复制代码

pycharm本机访问远程

 前端展示:

 

三、livirtAPI接口文档:

https://libvirt.org/docs/libvirt-appdev-guide-python/en-US/html/index.html

复制代码
#!/usr/bin/python

import libvirt

conn = libvirt.open('qemu:///system')
if conn == None:
    print('Failed to open connection to qemu:///system')
    exit(1)

print('freemem:'+ str(conn.getFreeMemory()))
print('hostname:' + conn.getHostname())
print('vcpus:' + str(conn.getMaxVcpus(None)))

nodeinfo = conn.getInfo()
print('Model:'+str(nodeinfo[0]))
print('Memory size:'+str(nodeinfo[1])+'MB')
print('Number of CPUs:'+str(nodeinfo[2]))
print('MHz of CPUs:'+str(nodeinfo[3]))
print('Number of NUMA nodes:'+str(nodeinfo[4]))
print('Number of CPU sockets:'+str(nodeinfo[5]))
print('Number of CPU cores per socket:'+str(nodeinfo[6]))
print('Number of CPU threads per core:'+str(nodeinfo[7]))

numnodes = nodeinfo[4]
memlist = conn.getCellsFreeMemory(0, numnodes)
cell = 0
for cellfreemem in memlist:
    print('Node '+str(cell)+': '+str(cellfreemem)+' bytes free memory')
    cell += 1

print('Virtualization type: '+ conn.getType())
print('Version:' + str(conn.getVersion()))
print('Libvirt Version:' + str(conn.getLibVersion()))
print('Canonical URI:' + conn.getURI())
print('CPU:' + str(conn.getCPUMap()[0]), 'free:' + str(conn.getCPUMap()[1]))

stats = conn.getCPUStats(0)
print("kernel: " + str(stats['kernel']))
print("idle:   " + str(stats['idle']))
print("user:   " + str(stats['user']))
print("iowait: " + str(stats['iowait']))


dominfo = dom.info()
print(dominfo)
test_api.py
复制代码

执行脚本文件:

 

posted @   困了就睡觉觉  Views(3380)  Comments(0Edit  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示