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

執行腳本文件:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM