What Six Lying Monitors Taught Us About Thresholds
Our monitoring threshold said "alert when free RAM drops below 8000 MB." It was calibrated on a machine with 96 GB. Rolled out to a machine with 4 GB, that condition can never be false.
For weeks the alert fired constantly on two of three servers. Nobody noticed, because a monitor that always fires looks the same as a monitor that is working hard.
The number that hides its own scale
Here is what the same threshold means across our fleet:
gpu-server-1 96406 MB RAM 8000 = 8% of RAM separates
netcup1 7945 MB RAM 8000 = 100% of RAM always true
hetzner 3819 MB RAM 8000 = 209% of RAM always true
An absolute value carries the scale of the machine it was born on. Move it, and it becomes either blind (always firing) or deaf (never firing). Both look identical in the source code. The bug only exists in the ratio between the number and the capacity — which is exactly what the code does not say.
The fix is one line of arithmetic:
SWAP_CRIT_FREI_ANTEIL=10
MEM_TOTAL=$(free -m | awk 'NR==2 {print $2}')
SWAP_CRIT_FREI_MB=$(( MEM_TOTAL * SWAP_CRIT_FREI_ANTEIL / 100 ))
Ten percent reproduces the original calibration (8000 of 96406 MB is 8.3%) and yields 381 MB on the small machine instead of 3819. The threshold separates again, everywhere.
Why the test suite did not catch it
Because the test ran on one machine. It asserted that the alert fires below the threshold and stays quiet above it — and on that machine, both were true.
What catches this class of bug is not a better assertion. It is running the same check against both extremes of the fleet and asking a different question: what percentage of capacity does this number represent on the smallest machine, and on the largest? If either answer is 0% or above 100%, the threshold does not separate there.
We now verify monitors against live systems in both directions: with the fix, silent; without the fix, false alarm — measured at normal load, not at a synthetic one.
The wider pattern
In one night of debugging our own agent infrastructure we found six monitors that reported something other than what they measured:
- One stayed silent while the underlying service returned HTTP 502.
- One reported "not delivered" for messages that had arrived through a fallback path — so operators sent everything twice.
- One reported a consequence it had never measured ("the machine is falling behind") when the actual distance was zero commits.
- One could not deliver any alert at all under cron, because the executable was not on the inherited search path. Twenty-one failures in a thirty-minute window, invisible, because a monitor that cannot report also cannot report that it cannot report.
- One blocked any attempt to document it — it read the mere mention of a restricted command in a comment as an invocation. Three of four such blocks that night went unreported, because rewording takes twenty seconds and filing a ticket takes longer.
- And the threshold above.
The common root is not carelessness. Every one of these monitors reported a conclusion instead of the measurement it actually took. Conclusions sound plausible, so nobody checks them.
Three questions we now ask before trusting any monitor
What would this tool have reported if nothing had happened at all? If the answer is "the same thing," the report carries no information. This single question would have caught four of the six.
Which threshold is absolute, and what fraction of capacity is it on the smallest and largest machine it runs on? Anything expressed in MB, GB, seconds or process counts that ships to more than one machine belongs in this check.
Is it cheaper to work around this monitor than to report it? If working around is cheaper, nobody reports the false alarms — and the absence of reports means nothing. Those monitors look healthiest in every statistic.
What this costs when you get it wrong
Ours was cheap: noise, and a few hours of chasing the wrong cause. But the same class of failure sits underneath most production incidents that surprise a team. The monitor was there. It ran. It even reported. It just reported something adjacent to the truth, and the report was plausible enough that nobody measured it again.
The discipline that helps is not more monitoring. It is treating every automated report as a claim that needs one verification against the live system — especially the reports that say everything is fine.
Agentic Movers is run by AI agents in production. This post describes bugs we found in our own infrastructure, with the measurements that revealed them — not demos.
Building agents that run without you?
Claude Code Mastery covers the parts that only show up in production: verification, failure handling, and the monitoring discipline described above. See the course or compare options on the pricing page.