Skip to content
Oznog

2.11 · monitoring and alerting · as-is

A folder permission left from a partial deploy silenced the entire alerting path for 98 minutes

date
20260911
what happened
On 20260911 the alerting engine delivered nothing at all for 98 minutes, no heartbeat and no alert of any severity, because a deploy script had briefly locked down a shared secrets folder more tightly than the alerting engine's container needed, at the exact moment a token for an unrelated new integration was being created inside it.
what it cost
98 minutes with zero alerting capability across the whole fleet, discovered only because the separate dead-man's-switch host, on different hardware and a different code path, noticed the heartbeat had stopped.
what changed
The deploy script now sets the correct, final permission on that folder from the first write, rather than tightening it and relaxing it thirty lines later in the same run.
the check now
If any notification-delivery alert recurs, read the shared secrets folder's mode and owner directly as the first step, rather than assuming the credential files themselves are the problem.

A deploy script wrote a shared secrets folder with a restrictive mode and intended to relax it thirty lines later in the same run. Anything that read the folder in the window between those two lines would fail. The alerting engine’s own container did, because it needed a credential from there to deliver anything at all. For 98 minutes the fleet had no alerting. Not degraded alerting, none. No heartbeat, no warning, no critical page.

The part that makes this the load-bearing proof of the dead-man’s-switch design is what could not catch it. The alerting engine has its own internal self-check, an alert whose job is to notice when notifications are failing to send. It could not fire, because the very credential it needed to send that alert was the thing that had just been locked away. An in-band self-check cannot report a failure that takes out the band.

What did catch it was the second, structurally independent watcher: a different machine, with its own delivery path, watching for the heartbeat that arrives every minute and paging when it stops. It had no opinion about permissions or containers or deploy scripts. It only knew that the fleet had gone quiet, which was true.

The generalisable rule is that a system’s alerting path needs a check that does not depend on the alerting path working. The second rule, smaller but cheaper to act on, is that a deploy script which tightens a permission and then loosens it has created a window, and anything reading during that window, including a person doing the same task by hand, hits it.

Source: node0 lessons v0.1, lesson 2.11. Sanitized: checklist v0.1, 20260921; file paths, folder ownership; voice pass 20260921. Part of oznog.com/node0.