We use 3 different monitoring system in our server setup.
First, we use Zabbix monitoring to monitor all critical server and service parameters, like load average, number of running processes, number of active connections, request per second, bandwith, etc. Also Zabbix have number of triggers to alert our staff that something goes wrong.
Secondly, we use Monit to watch critical server processes, like apache. If apache leaks memory, or have too many childs, or response unexpectedly – monit alert our staff restarts it automatically. So, in case of typical problems, service restarts and staff resolves incident after that.
We use Wormly as external independend monitoring and alerting service. If your server works fine, but unreacheable for someone, we got alert and fix it.