设为首页 收藏本站
查看: 2145|回复: 0

[经验分享] python的kvm虚拟机状态值监控

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-14 12:27:47 | 显示全部楼层 |阅读模式
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 image_file in  path_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[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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-244090-1-1.html 上篇帖子: centos7 安装 ipython3 下篇帖子: zabbix客户端安装及基本监控 python 虚拟机 监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表