efima.digitalforest.my

Config drift is a process failure

During a quarterly audit we found a production host whose nginx configuration had eleven directives that existed nowhere else in the fleet. All added by hand, none documented, two of them demonstrably from an emergency at least a year old. Nothing was broken. That is exactly the problem.

Drift is not a config problem

The config did not drift. The process did. Someone had an incident at 23:40, fixed it the only way available at 23:40 — directly on the box — and then went back to bed. The commit that says "NGINX: raise client_max_body_size for the intake endpoint (incident #4281)" never happened, so the next operator sees a value with no story attached and a fleet baseline that disagrees with production.

The weekly stroll

One rule has survived since the seventies of machine administration: walk the config once a week, by hand, with a diff against the source of truth. It sounds démodé until the first time it catches something. Ours took four minutes and found:

--- expected/httpd.conf
+++ reality/httpd.conf
@@ -14,5 +14,6 @@
  KeepAlive on
  KeepAliveTimeout 5
+ RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
  IncludeOptional conf.d/*.conf

One line, added under pressure, matching nothing, breaking nothing yet. The fix is not a rollback; the fix is a commit plus a link to the incident.

Make the honest path cheapest

Every operator takes the shortest path from "it hurts" to "it doesn't". Drift prevention means making the short path concrete:

The box is boring again. Next quarter the audit will find nothing, because there will be nothing to find.