使用libvirt技术监控虚拟机(三) 博客分类: Libvirt libvirt云计算虚拟化监控
程序员文章站
2024-03-17 12:38:28
...
(一)计算资源与内存资源的监控
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);
整体运行结果如下图,具体代码见附件: