欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

  

 

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

 
使用libvirt技术监控虚拟机(三)
            
    
    博客分类: Libvirt libvirt云计算虚拟化监控 
 

  • 使用libvirt技术监控虚拟机(三)
            
    
    博客分类: Libvirt libvirt云计算虚拟化监控 
  • 大小: 18.7 KB