Regardless of whowhich you use, the one thing I would definitely suggest is—unless you have a full-time IT staff—do not maintain your own monitoring: rely on a service that's completely independent from your servers. It's one thing to have a public-facing server down, it's another to have it down and not know about it because your monitoring server is also down. Most monitoring services will include all of the requirements you've listed out of the box.
But at the risk of this being turned into a shopping recommendation question, the service I use for the requirements you've listed is Pingdom:
- Tells you if a sites up (of course)
- Measures how long it takes to respond
- Measures responsiveness and availability on any custom TCP/UDP port
- Email availability checking
- Allows for custom HTTP requests, letting you test out different aspects of your application
- Extensive reporting
- Worldwide monitoring, and they add about a dozen more monitoring sites every few months