Cover for alert grouping and silences, with observe, decide and act steps.

Alertmanager grouping batches alerts while silences suppress notifications

One incident can produce many alerts, but a group is not proof that those alerts have one cause. Alertmanager groups alerts according to configured labels and routing context so their notifications can be handled together. The original alert identities remain available inside the group. Silences add another operation: they suppress matching notifications for a time window without resolving the underlying conditions. ...

July 27, 2027 · 6 min · XB Field Notes
JSON escaping protects string content, while quoted optional fields preserve valid records when a value is absent.

Structured nginx logs need escaping and a value-type contract

A log_format that resembles JSON is not necessarily a reliable structured event format. nginx substitutes variable values into the text, and those values can contain quotes, backslashes, control characters, or no data at all. Correct string escaping and correct value types are separate requirements. Testing emitted records with a real parser catches failures that a visually convincing configuration or successful nginx -t cannot establish. ...

July 15, 2027 · 6 min · XB Field Notes
A probe changes the health state without automatically restarting the application process.

Docker healthchecks report a state; recovery needs a consumer

A Docker HEALTHCHECK runs a configured command inside a container and records the result as health state. It adds an observation beyond whether the main process is running. The meaning of that observation depends on what the command tests: a process check, an HTTP response, or an application-specific readiness condition. Docker does not infer a universal readiness contract from the presence of the instruction. ...

July 5, 2027 · 5 min · XB Field Notes
A declaration creates a missing account while existing identity records remain unchanged.

systemd-sysusers creates missing service accounts

A service package often needs a dedicated account before it can own files or run without root. systemd-sysusers describes that account and its groups in a small configuration file. Its central operation is creating missing identities and establishing requested memberships. It is not a general account migration engine, a directory creator, or a guarantee that automatically allocated numeric IDs match on every host. ...

June 8, 2027 · 5 min · XB Field Notes
Background pruning that stops Postgres tables from slowly bloating.

Autovacuum quietly prunes dead rows

An update creates a new PostgreSQL row version, and a delete makes an existing version invisible to later snapshots. Neither operation means every older transaction has finished using that version. Ordinary vacuum, including work started by autovacuum, must respect that visibility horizon before reclaiming storage. Scheduling more cleanup cannot override a reader’s legitimate snapshot. ...

June 4, 2027 · 4 min · XB Field Notes
Fragmented gaps that inflate Redis footprint far above its data.

Redis memory fills with fragmentation over time

A Redis process can keep a substantial resident footprint after application keys are deleted. That observation deserves explanation, but it does not by itself prove a leak or allocator fragmentation. The useful question is which bytes remain allocated, which pages remain resident, and whether that footprint threatens the actual capacity budget. ...

June 3, 2027 · 6 min · XB Field Notes
Redis key names identify ownership and data shape without enforcing either.

Redis keys read well with clear naming

Redis keys are binary-safe names in a flat keyspace, not filesystem paths or schema declarations. Colons are a useful convention for separating ownership, environment, entity, and identifier. A name such as cart:prod:string:42 can explain intent, but Redis does not interpret those labels as a type check or access restriction. ...

June 1, 2027 · 6 min · XB Field Notes