I am responsible for three critical web applications. For one system, I developed a Windows service that monitors the web application; it pulls the login page and verifies that it contains the username/password fields and checks that it can connect to the database. If it is a problem with the web application, then it notifies the group responsible for the web servers and me; if it is a database problem, it notifies the DBA and me.
I used that code as a shell to create monitoring services for the other two applications. One application will have a problem is a non-numeric value gets in a particular column of a database, so that service retrieves that column's values and checks that it is numeric and generates a SQL DELETE statement to run as part of the notification for that application.
During working hours, one service runs every 5 minutes; once an error is detected, it runs every 15 minutes until no error is found. After hours, weekends, and holidays, it runs every hour and every 4 hours after an error is detected. The other services have different polling intervals based on how often the web applications are used.
It logs successes and failures in the event log and only sends emails out for failures, so I can check that the services are running normally.