This internal project was initiated in response to the need for efficient monitoring of the operational status of both local and client servers running critical services. Previously, it was common for the team to learn about server or service outages only with a delay—often through a phone call from a customer. The challenge was to build a reliable monitoring system that could detect outages or anomalies in a timely manner—such as exhausted RAM or service failures—and thus prevent unnecessary downtime.

We developed an internal monitoring system based on a PHP application running on an Apache web server. The system consists of several key components. At its core is a web application written using the Nette framework, which receives a configuration JSON file generated from a FileMaker database. This file defines which servers and services should be monitored, the thresholds and rules for error detection, and how and to whom notifications should be sent.
Monitored servers actively and regularly send data about their current status via HTTP POST to the web server. The server evaluates this data to check if services are available, whether data is being received on time, and if not—after certain conditions are met (such as repeated missing data)—it sends a push notification. The system differentiates recipients of notifications based on their responsibility for specific servers, ensuring messages are delivered only to the appropriate people.
Notifications are handled via our internal tool Notifity, which forwards messages using Pushover or email. The web server is accessible from the public network to receive data from external servers. At the same time, the FileMaker configuration database enables the management of monitored instances and notification rules. In case this service or the entire web application fails, alerts are sent from a separate monitoring system.
The system’s extended functionalities include displaying system information such as memory usage, disk usage, and monitoring the status of services like Data API or OData. As a result, we built a robust and flexible solution that helps detect problems early and significantly reduces response time.