Skip to content
About
Main content

The telemetry pipeline is a data system

Why must telemetry be lossy by design, and why must alerting not share a failure domain?

The path from the application to the dashboard is agent → → store. An agent runs next to the application and sends data out. A collector receives, batches and forwards data. The store keeps it and answers queries. This path inherits the whole data-engineering stack: ingest, , index, compact, tier (hot, warm, cold storage), expire. Two properties are non-negotiable.

It must be lossy by design

When the collector is saturated, the correct behaviour is to , never to apply into the application (slow the application down until the collector catches up). An observability system that stalls the workload has turned monitoring into an outage.

The alerting path must not share a failure domain with the observed system

A is the group of things that fail together (one rack, one cluster, one cloud region). Putting the alerts in the same failure domain as the app is a contradiction of the usual shared-fate reality: the cluster dies, and the monitoring dies with it. This is what happened to Nadia when the cluster failed.

The practical resolution everyone converges on:

  • : alert evaluation, paging, and a dead-man's switch (an alert that fires when stops arriving, so silence itself is detected). For example, the application sends a heartbeat every minute to an external service, which pages if no heartbeat arrives for 5 minutes.
  • Let the large, expensive analysis path share infrastructure.

Cost typically lands in the range of 5–15% of infrastructure spending. This is engineering reality, not a law, and it varies by an order of magnitude depending on log discipline.