There's a dearth of thorough reviews of open-source monitoring software, but I will take open-source over proprietary or hosted solutions any day.
We use Zabbix (with the PostgreSQL backend) to manage just shy of a hundred physical servers and around 500 containers. Like any serious piece of software, there is a learning curve, and the terminology is sometimes confusing because it is written by Russians, not native English speakers, but I haven't found it particularly difficult to set up. It 's certainly easier than Nagios, Ganglia or MON, and actually usable by non-technical users like support or management.
My main beef with it is that it assumes "no news is good news" and will ignore items (metrics) that are not sending data, which usually means the system is down or hung so badly the agent is not responding either. Ad-hoc querying and graphing capabilities are also somewhat crude, e.g. "build me a screen (dashboard) of CPU vs. swap for all machines in host group 'database servers'". The PHP-based web UI is a bit tired and it would be nice to have modern JS/canvas-based interactive graphs, but it is serviceable.
That said the template system is fairly flexible and powerful if you give some forethought to design, it does have the ability to handle dependencies so as to reduce the flood of downstream alerts, and is fairly easy to extend. Performance is better than a Python/Perl/Ruby solution like ZenOSS, but you will still need to dedicate a system past 100 monitored hosts/VMs or so.