KVM / Libvirt:我如何获得KVM / libvirt虚拟机使用的总流量

时间:2017-09-20 15:22:43

标签: libvirt

我想获得kvm / libvirt VM在C(语言)中使用的总带宽。 libvirt中有功能吗?

所以,例如,如果VM超过1TB,那么我将暂停其网络。

2 个答案:

答案 0 :(得分:0)

当您启动KVM来宾时,主机系统会为来宾中的每个单独网络接口创建 vnet 接口,例如 vnet3 vnet4 。 之后,您可以通过轮询主机上的文件来监控这些接口的发送/接收量:

cat /sys/class/net/vnet3/statistics/rx_bytes
173110677
cat /sys/class/net/vnet3/statistics/tx_bytes
1640468389

或者,您可以像本教程中一样使用 fwmark 设置iptables规则:
http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.html
用iptables测量统计数据,但我想这对C来说太麻烦了。

答案 1 :(得分:0)

在libvirt XML中,您需要查看元素以标识后端设备名称。例如

<interface type='network'>
  <mac address='52:54:00:b4:fc:f2'/>
  <source network='default' bridge='virbr0'/>
  <target dev='vnet2'/>
  <model type='virtio'/>
  <alias name='net0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

这里的后端是&#39; vnet2&#39;。完成后,您可以调用C API virDomainInterfaceStats(或通过您选择的语言绑定)来获取rx / tx统计信息。以virsh工具为例:

# virsh domifstat demo vnet2
vnet2 rx_bytes 5040490379
vnet2 rx_packets 3292604
vnet2 rx_errs 0
vnet2 rx_drop 0
vnet2 tx_bytes 167286952
vnet2 tx_packets 1859239
vnet2 tx_errs 0
vnet2 tx_drop 0