This depends on exactly what you want to monitor:
- A service has actually stopped as far as the Service Control Manager (SCM) is concerned.
- A service has crashed without the SCM being aware - this is very common due to threading.
- A service has hung without the SCM being aware - also very common.
For the first item, you can configure the service to kick-off a script that sends an email alert. Note this can be really annoying if the service keeps rebooting due to circumstances outside its control (dependence on a flaky network connection, or whatever).
For the other two items, you will need some type of heartbeat service, which you can either build or buy. Be careful to have the heartbeat monitor running local to the services it's monitoring because as I wrote a while ago, the network is not reliable.