用shell脚本监控kvm虚拟机

来源:互联网 发布:还珠格格原著知画结局 编辑:程序博客网 时间:2024/06/05 00:40

近日领导提出一个需求:要求不在任何一台云主机上安装agent或者其他东西,对云主机的CPU,内存,网络,IO进行监控,刚开始是一头雾水,后来听说可以通过监控kvm来提取数据

首先云主机都是分布在每一台物理服务器上,可以通过物理机上的kvm来获取云主机运行状态的数据

kvm虚机是用virsh来管理的
我的计划是,监控各个kvm虚拟机使用zabbix; 在主机上结合使用ps命令和top命令进行监控。

但是单独以上二个命令是有问题的:
单独使用top只能看到进程号(PID)和命令描述(qemu-system-x86),无法看到是哪一个虚拟机(如下),而virsh命令主要是使用虚拟机名称对虚拟机进行管理的:

这里写图片描述

单独使用ps命令虽然可以看到进程和虚拟机的对应关系但是无法看到实时的监控数据(如下):

root@ncnode02:~# ps aux|grep -v 'grep'|grep 'qemu-system-x86'|awk '{print $2" "$14}'8321 instance-0000025d8810 instance-000002389337 instance-0000022c10085 instance-000001df10566 instance-000001c811486 instance-000001ae12870 instance-0000014e14233 instance-0000013d14719 instance-0000010e15174 instance-000000fd15642 instance-000000f716186 instance-000000e316723 instance-000000cd17182 instance-000000c917366 instance-0000001b32402 instance-0000014532950 instance-0000014433895 instance-000001b6114823 instance-00000379

因此必须写一个shell脚本将这二个命令进行结合,将虚拟机名称和实时数据对应起来;同时还需要定时来刷新数据,以实现在主机上实时监控虚拟机运行情况的目的。

shell脚本如下:

#!/bin/bash#查看本机kvm虚拟机的运行情况#Author:fanht#create Date:2017-12-04#Modified Date: 2017-12-04while truedo#清空屏幕        clear#获得这一时刻的top信息,并输出到指定文件        top -bn1 > /tmp/kvm_top.txt;#获得进程号和虚拟机名称对应表,并输出到指定文件        ps aux|grep -v 'grep'|grep 'qemu-system-x86'|awk '{print $2" "$14}' > /tmp/kvm_list.txt;#获得top命令的前7行,也就是汇总信息行        cat /tmp/kvm_top.txt |head -n 7;#将虚拟机名称放到指定信息行的上一行上,实现名称和监控信息的对应        for i in `cat /tmp/kvm_list.txt|awk '{print $1}'`;        do                grep $i /tmp/kvm_list.txt |awk '{print $2}';                grep $i /tmp/kvm_top.txt|grep -v 'vhost-';        done#输入相关监控后,暂停10秒,以便查看相关数据        sleep 10done

实际运行结果如下:

这里写图片描述

用脚本可以看到每台云主机的cpu和内存,但是依然很不好,没有图形化的图表,还需要继续研究用zabbix来监控云主机的运行状态

参考:http://blog.csdn.net/cmzsteven/article/details/51614265

原创粉丝点击