Observability

Alerts With an Action Attached

Define the observation, denominator, missing-data behavior and useful response before creating an alert.

On this page
  1. Describe the user-visible condition
  2. Give ratios a denominator
  3. Make missing observations visible
  4. Control repetition and recovery
  5. Keep signal cost bounded
  6. Test the action with a fixture

An alert asks someone to interrupt other work. The request needs a reason and a plausible action. A chart can be interesting without justifying that interruption. Designing the response first helps distinguish an operational alert from a signal that belongs in a periodic review.

For a small publication, a local article failure may need prompt investigation. A temporary failure of an optional external feed may need only a degraded label and a later check. Both are observable conditions, but they affect the reader differently. One universal red indicator hides that difference.

Describe the user-visible condition

Start with the useful path that is at risk. A statement such as article requests are failing is easier to connect to an action than CPU is above a threshold. Resource signals can explain or predict a problem, but the relationship to service behavior needs to be stated.

Define the scope. Is the check observing one process, the proxy, or a request through the public route? A loopback request bypasses DNS and TLS. A public synthetic request adds those dependencies but may observe only one region and one article. Neither is a complete account of every reader's experience.

Choose a condition the operator can inspect. A useful alert includes the observation time, affected path, release identity when available, and a link to a bounded runbook. It should not require access to a dashboard that has never been configured.

Give ratios a denominator

An error ratio without a request count can mislead. One failed request out of one is a different workload from one thousand failures out of ten thousand. Record the relevant numerator, denominator and time window together.

This illustrative definition separates those values:

window: five minutes
eligible requests: local article routes
bad outcome: application 5xx response
condition: error ratio above chosen threshold
minimum evidence: enough eligible requests to interpret ratio
missing samples: unknown, not zero errors
action: verify useful route and current release record

The threshold and minimum count require a real workload decision. This publication does not claim that a particular ratio is an appropriate service objective for every installation.

Make missing observations visible

A collector can stop sending data while the service continues to operate. If a query interprets the absent series as zero failures, the monitoring system reports success precisely when it has lost evidence.

Distinguish service failure from observation failure. A missing synthetic result can trigger a check of the probe or its route. A failed synthetic result can trigger a check of the website. Include expected sample age so that a green result from yesterday cannot be presented as a current check.

Optional dependencies need the same distinction. Previously cached external articles are a useful fallback, but stale metadata should be labelled stale. Successful rendering of that fallback does not establish that the upstream has recovered.

Control repetition and recovery

Use a persistence interval or a small sequence of observations when brief fluctuations do not justify action. Then define how the condition recovers. A condition that repeatedly crosses one threshold can produce a stream of notifications without new information.

Recovery can require a stable run of useful requests or a threshold different from the firing threshold. The choice should follow the system's behavior. Delaying every alert by the same arbitrary duration can hide an immediate, severe failure while still failing to suppress a slowly oscillating signal.

Group related symptoms where one action addresses them. A stopped application may produce request failures, connection errors and missing application metrics. Sending three independent interruptions for one known condition gives the operator more messages without three useful actions.

Keep signal cost bounded

Choose labels with a finite, understood set of values. Route templates are usually more manageable than raw URLs containing arbitrary queries. User identifiers, random request IDs and full exception messages can create unbounded series and expose information that monitoring does not need.

Use detailed identifiers in a bounded log or trace when necessary, with appropriate access and retention. Aggregated signals should answer operational questions without turning every request into a new monitoring object.

The monitoring path also needs a resource budget. A modest host should not spend more effort collecting and retaining observations than serving its primary workload. Set sample intervals and retention intentionally, then review the actual cost under the intended traffic.

Test the action with a fixture

In a disposable environment, make a known article request fail. Confirm that the condition becomes visible, the notification contains the intended evidence, and the runbook reaches a useful observation. Then restore the route and inspect the recovery behavior.

Separately remove the observations while leaving the service healthy. The result should say that evidence is missing rather than manufacture a healthy series. Finally, make only the optional feed fail and verify that the response matches its limited impact.

Keep a short test record with the rule revision and expected outcomes. These exercises establish that the rule and response are connected. They do not prove an uptime history or a promised response time. An alert earns attention when it points to a meaningful condition and gives the reader a bounded, useful next action.