Here’s an intresting use case - There is a need check the usage of customer VM’s without installing an agent on their VM.
Solution - Use collectd with libvirt plugin enabled on your KVM host.
I have tried this solution on my Ubuntu laptop which is running 2 KVM-VMs
root@hp-envy:~# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     ubuntu14                       running
 2     ubuntu14-new                   running
- Install collectd on KVM server
 
apt-get install collectd
- Collectd has several plugins available and enabled in
 
/etc/collectd/collectd.conf
- Configure collectd to load libvirt, better know as - virt plugin by creating this config file
 
root@hp-envy:~# cat /etc/collectd/collectd.conf.d/libvirt.conf 
<LoadPlugin virt>
 Globals false
</LoadPlugin>
 <Plugin "virt">
  Connection "qemu:///system"
  RefreshInterval 60
  Domain "dom0"
  BlockDevice "name:device"
  InterfaceDevice "name:interface"
  IgnoreSelected true
  HostnameFormat "name"
</Plugin>
We will be adding a new config file to /etc/collectd/collectd.conf.d/ which will be included as per this directive in /etc/collectd/collectd.conf
<Include "/etc/collectd/collectd.conf.d">
        Filter "*.conf"
</Include>
- Restart collectd to enable virt plugin
 
service collectd restart
- Now to view the metrics collected by collectd-virt plugin, we will be setting up collectd-web, using the below process:
 
cd /usr/local/
git clone https://github.com/httpdss/collectd-web.git
cd collectd-web/
chmod +x cgi-bin/graphdefs.cgi
The python script at /usr/local/collectd-web/runserver.py is configured to run on localhost IP 127.0.0.1:8888
root@hp-envy:/usr/local/collectd-web# ./runserver.py 
Collectd-web server running at http://127.0.0.1:8888/
To configure it to run on all interface acttached to KVM host, replace 127.0.0.1 to 0.0.0.0, and start the python server
root@hp-envy:/usr/local/collectd-web# ./runserver.py &
[1] 3592
root@hp-envy:/usr/local/collectd-web# Collectd-web server running at http://0.0.0.0:8888/
I have my local wifi router DHCP assigned the IP - 192.168.0.51
root@hp-envy:~# ip a | grep wlo1 
3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.0.51/24 brd 192.168.0.255 scope global dynamic wlo1
Now I can hit the IP http://192.168.0.51:8888/ in my local browser to bring up the collectd web UI

- Reference Links
 
https://www.tecmint.com/install-collectd-and-collectd-web-to-monitor-server-resources-in-linux/
https://syedali.net/monitoring/
https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_virt
https://github.com/httpdss/collectd-web