使用libvirt技术监控虚拟机(三)

 
 

 (一)计算资源与内存资源的监控

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);

  

 

整体运行结果如下图,具体代码见附件:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值