The monitoring server is responsible for sending out the requests to the client systems and receiving the sensor readings from all clients. There are two options for obtaining the data from the clients: the first is to have the server initiate the connection, and the second is to have the client do so. Each approach has its benefits. When the client initiates the connection there's less overhead on the server side, because it does not need to do any scheduling work. It is also safer, because it is impossible to request the data, and therefore the data will only be received by the system, which is registered on the client—the monitoring server.
However, the biggest disadvantage with the client-initiated connections is that the server has absolutely no control over the incoming information flow, and this can lead to the server being overloaded. Ideally it would be up to the server to decide what information it requires and at what point in time. For example, a really intelligent system disables certain checks if making them doesn't make sense. A good example would be to stop volume usage checks after receiving a hard disk failure alert, because it is obvious that the disk failure will cause all volume checks to fail, so there is no point in reporting symptoms of the underlying issue.
In my simple monitoring system I'm going to use what is effectively a server-initiated control mechanism, but without sacrificing the security model. The server process will be sending out notifications to the client to submit the sensor data. When the client receives such notification it will perform the check and submit the readings back to the server it is registered with. So there is no way of obtaining the data from the client; it's only a one-way communication channel. Only the "trusted" server can receive the results.
Client configuration is done in a similar fashion: the client receives an external signal to update its configuration (either the "trusted" server address or the sensor code) and then it initiates the connection back to the server to get the required details.
Was this article helpful?