There are lots of applications depending on your requirements. If you know your way around UNIX/Linux, get something like Nagios/Zabbix. Not only will they be able to monitor remote services (HTTP, DNS, POP etc.) but they can also monitor a machines stats, things like CPU load, disk usage, disk health and pretty much anything you can think off.
Both Zabbix and Nagios can be a bit of a fuss to configure, if all you want to do is monitor a few public facing web servers check out something like Pingdom (A hosted service).
It really comes down to how advanced you want your system to be. If you go the Nagios/Zabbix/Self-hosted route you can get it to do pretty much whatever you want, they come with a decent number of plugins to monitor most things you'd need but you can write your own plugins too. You can also write custom output plugins for alerts (When one of our servers goes down, it sends us an email, phones us and uses TTS to tell us what's going on).
Pingdom/ScoutApp are great if you don't need anything too advanced and want a nice simple point-and-click interface to configure it.