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('-')[1] 

                vmm_id_str = str(vmm_name) 

                vmmid = vmm_id_str.split('-')[1] 

                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 p_w_picpath_file in  path_list:   

        #        print p_w_picpath_file 

        #        size = vmm_id.blockInfo(p_w_picpath_file,0) 

                    block_status = vmm_id.blockStatsFlags(p_w_picpath_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[0] 

                    totalrx_packettotalrx_packet = totalrx_packet + interfaceinfo[1] 

                    totaltx_bytetotaltx_byte = totaltx_byte + interfaceinfo[4] 

                    totaltx_packettotaltx_packet = totaltx_packet + interfaceinfo[5] 

             

                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()[4] 

                timetime1 = time.time() 

                time.sleep(3) 

                timetime2 = time.time() 

                cpu_new_time = vmm_id.info()[4] 

                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