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:

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.