(一)计算资源与内存资源的监控
libvirt中提供virDomainGetInfo方法可以将一个domain的计算资源和内存资源的使用情况封装在一个结构体中,如下:
struct virDomainInfo{
unsigned char state : //the running state, one of virDomainState
unsigned long maxMem :// the maximum memory in KBytes allowed
unsigned long memory :// the memory in KBytes used by the domain
unsigned short nrVirtCpu :// the number of virtual CPUs for the domain
unsigned long long cpuTime : //the CPU time used in nanoseconds
}
获取内存资源和计算资源监控信息并打印的方法如下:
virDomainInfoPtr domaininfo;
domaininfo = malloc(sizeof(virDomainInfo)* 1);
m = virDomainGetInfo(allDomains[numOfDom] , domaininfo);
printf("状态:%d ",(*domaininfo).state);
printf("最大内存:%ld ",((*domaininfo).maxMem)/1024);
printf("内存:%ld ",((*domaininfo).memory)/1024);
printf("虚拟cpu个数:%d ",(*domaininfo).nrVirtCpu);
printf("cpu时间:%lld ",(*domaininfo).cpuTime);
(二)获得网络流量信息
可以使用 virDomainInterfaceStats方法,将一个domain的网络流量信息封装在一个virDomainInterfaceStatsStruct结构体中,该方法需要传递一个虚拟网卡接口的参数,这个参数可以通过XML文件取得:
<interface type='bridge'>
<mac address='00:16:3e:74:03:53'/>
<source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0 '/> /*这个就是需要的参数*/
</interface>
具体代码如下:
virDomainInterfaceStatsPtr interfacestats;
interfacestats = malloc(sizeof(virDomainInterfaceStatsStruct)* 10);
m = virDomainInterfaceStats(allDomains[numOfDom], i_path, interfacestats, 10);
printf("rx字节数:%ld ",(*interfacestats).rx_bytes);
printf("tx字节数:%ld ",(*interfacestats).tx_bytes);
printf("rx丢包:%ld ",(*interfacestats).rx_drop);
printf("tx丢包:%ld\n",(*interfacestats).tx_drop);
整体运行结果如下图,具体代码见附件:

本文介绍如何使用libvirt的API来监控虚拟机的计算资源和内存资源使用情况,包括获取状态、最大内存、实际使用内存、虚拟CPU数量及CPU时间等信息;同时介绍了如何获取虚拟机的网络流量信息。

被折叠的 条评论
为什么被折叠?



