857432 发表于 2016-7-14 12:27:47

python的kvm虚拟机状态值监控

python获取kvm虚拟机状态值
测试代码,其中只包含了基本的信息,所有的信息都是通过libvirt的api来获取的。
import libvirt
import memcache
import os
import time
from xml.etree import ElementTree as ET

mc = memcache.Client(['192.168.0.112:11211'])
while True:
    conn = libvirt.open('qemu:///system')

    dom = conn.listDomainsID()
    for i in dom:
      vmm_id = conn.lookupByID(i)
      vmm_name = vmm_id.name()
      if "wrksp" in vmm_name:
            try:
      #    vmm_namevmm_name_id = vmm_name.split('-')
                vmm_id_str = str(vmm_name)
                vmmid = vmm_id_str.split('-')
                print vmmid
                vmm_dom_xml = vmm_id.XMLDesc(0)
                vmm_xml_name = vmm_id_str + '.' + 'xml'
                vmm_xml_path = '/tmp/' + vmm_xml_name
                print vmm_xml_path
                if os.path.exists(vmm_xml_path):
                  pass
                else :
                  os.mknod(vmm_xml_path)

                xml_open = open(vmm_xml_path,'w')
                for lines in vmm_dom_xml:
                  xml_open.write(lines)
                xml_open.close()

                vmm_xml_open = ET.parse(vmm_xml_path)
                path_list=[]
                path = vmm_xml_open.findall('//source')
                for i in path:
                  file1 = i.attrib
                  filename=file1.get('file')
                  if filename:
                        path_list.append(filename)

    #    print path_list
                interface_list = []
                interface = vmm_xml_open.findall('//target')
                for j in interface:
                  interface_network = j.attrib
                  dev1 = interface_network.get('dev')
                  dev3 = 'vnet'
                  dev2 = str(dev1)
                  if dev3 in dev2:
                        interface_list.append(dev1)

      #    print interface_list

                totalrd = vmmid + 'rd'
                totalrd_byte = 0
                totalwr = vmmid + 'wr'
                totalwr_byte = 0
                totalrx = vmmid + 'rx'
                totalrx_byte = 0
                totaltx = vmmid + 'tx'
                totaltx_byte = 0
                totalrp = vmmid + 'rp'
                totalrx_packet = 0
                totaltp = vmmid + 'tp'
                totaltx_packet = 0

                for image_file inpath_list:   
      #      print image_file
      #      size = vmm_id.blockInfo(image_file,0)
                  block_status = vmm_id.blockStatsFlags(image_file,0)

                  totalrd_bytetotalrd_byte = totalrd_byte + block_status['rd_bytes']
                  totalwr_bytetotalwr_byte = totalwr_byte + block_status['wr_bytes']
                print totalrd_byte   
                print totalwr_byte
      #      print totalwr_byte


                for interfaceinfo_path in interface_list:
                  interfaceinfo = vmm_id.interfaceStats(interfaceinfo_path)
                  totalrx_bytetotalrx_byte = totalrx_byte + interfaceinfo
                  totalrx_packettotalrx_packet = totalrx_packet + interfaceinfo
                  totaltx_bytetotaltx_byte = totaltx_byte + interfaceinfo
                  totaltx_packettotaltx_packet = totaltx_packet + interfaceinfo

                totalmem = vmmid + 'actual'
                totalmem_data = 0
                rssmem = vmmid + 'rss'
                rssmem_data = 0
                mem_status = vmm_id.memoryStats()
                totalmem_data = mem_status['actual']
                rssmem_data = mem_status['rss']   
      #    print totalmem_data
      #    print rssmem_data   

                totalcpu = vmmid + 'cpu'
                totalcpu_usage = 0
                cpu_time =vmm_id.info()
                timetime1 = time.time()
                time.sleep(3)
                timetime2 = time.time()
                cpu_new_time = vmm_id.info()
                totalcpu_usage = int(((cpu_new_time - cpu_time)/((time2 - time1)*10000000))*100)
                print totalcpu_usage

                mc.set('centosliran', '1234', 20)
                mc.set('centos_clusterliran','345',20)
                mc.set_multi({totalrd:totalrd_byte,totalwr:totalwr_byte,totalrx:totalrx_byte,totaltx:totaltx_byte,totalrp:totalrx_packet,totaltp:totaltx_packet,totalmem:totalmem_data,rssmem:rssmem_data,totalcpu:totalcpu_usage},60)   
                  #value = mc.get('key')
                   # print value
            except:
                pass

页: [1]
查看完整版本: python的kvm虚拟机状态值监控