I am the developer for a web application and also support the application. I developed a Windows service that runs on a scheduled basis to see that it can retrieve the login page from the web server and that it can connect to the database and run a query. For problems related to the web server, it notifies the server hosting team. For problems related to the database, it notifies the DBA team. Once an error has been detected, it switches to a longer polling interval to give the team a chance to respond to and fix the problem. For afterhours, weekends, and holidays, the polling interval is longer than it would be during working hours. When connecting to the database, if it gets the "host not found" error, it notifies the server hosting team, besides the DBA team, because the VM or the server hosting the VM may be down.
I've used the same monitoring application as a shell to monitor two other systems that were extremely fragile; both applications have been retired. One of those systems used a PostgreSQL database. The other system was prone to database corruption, so I wrote a query and analysed the result to find out if a non-numeric character got into a column that was supposed to contain integers (the column is a character field). That database was a bizarre design, using character columns to store dates instead of using the date data type. Good riddance to that system!