Are there any simple, but automated, ways to test that Exchange is running properly? Specifically we're looking to see if Outlook users can connect to Exchange and email traffic is flowing.
Occasionally our server has run into some virtual memory issues, and while we are trying to fix the cause of those issues it would be helpful to know immediately that our server is down.
This doesn't completely answer your question, but I wrote a script to Monitor Exchange Servers. (It was written for E2k3, but should work on E2k7, but E2k10 is iffy). As it stands now, it checks that the servers specified are pingable, Exchange Services are running, Connectors are running, Datastores are mounted, and the Transaction log drives are at least 50% full (the threshold of which can of course be changed.)
I have this running as a scheduled task every 10 minutes, sending an email/pager alert if a problem is detected. This works best if you have a standalone SMTP server (say a small Linux/Unix sendmail server sitting quietly somewhere), as nothing will happen if your mail environment is broken at a single-point-of-failure...
Another way to get around this limitation (of SPoF) is to make a modified copy intended to run from a command prompt and just print the results to the screen.
This is not to say that you couldn't modify it to output a file format of your choosing (html/json/xml) for a Dashboard to read-in, or trigger other kinds of alerts. You're only limited by your imagination.
Almost every network monitoring tool has an email test. They generally send an email to an email address (SMTP test) and then retrieve the email (POP test). This verifies, for the most part, that Exchange is operating and email is flowing. For instance if the SA service was down, the test would fail, if the IS service is down the test would fail, if the mailstore is unmounted the test would fail, etc., etc.
This doesn't test components like OWA but you could configure an HTTP test for that.
I ran into this link yesterday - http://www.msexchange.org/articles-tutorials/exchange-server-2007/monitoring-operations/testing-exchange-2007-powershell-part1.html. I think if you ran the test commandlets you need with a 1 or 2 or 5 minute sleep, parsing the returned objects for failure conditions, you would get a heads up when something goes down.