Hi Fariborz, I would consider both ways to monitor the instance. Even if the hypervisor can give you accurate information about allotted CPU time and memory, there are always some things that it doesn't see.
As for monitoring agents, it highly depends on what monitoring system you use or want to use. A modern choice would be something like Prometheus, and there is an agent called node_exporter[2] that produces Linux system metrics. You could also install snmpd and monitor with any tool that can fetch SNMP data. Or, Nagios, Icinga, ..... [1] https://prometheus.io/ [2] https://github.com/prometheus/node_exporter