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 → collector → 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, partition, 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 drop telemetry, never to apply backpressure 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 failure domain 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:
- Externalize the small critical path: alert evaluation, paging, and a dead-man's switch (an alert that fires when telemetry 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.