The Components in One Map
Source: Observability Platform source notes, section 17, “The Components in One Map”
The enterprise problem and today’s slice
Enterprise problem: An operator who cannot say which component owns each telemetry transition will route data through overlapping tools, hide failure boundaries, and lengthen incidents for customers.
Whole-course context: The incoming evidence is a four-signal design with collection, storage, query, rules, and notification responsibilities already introduced; this day turns those parts into one reviewable component contract.
Today’s slice: We map application instrumentation, exporters, collectors, specialized backends, Grafana, rulers, Alertmanager, and object storage without treating any product name as the customer outcome.
End-of-day evidence: A component matrix and two traced journeys show the producer, consumer, owner, protocol, and terminal evidence at every boundary.
Still unsolved: Deployment scale, signal economics, schema governance, and privacy policy remain deliberately outside today’s component map.
The smallest complete model
A component map is useful only when it explains how raw system behavior becomes evidence an operator can act on. Without that chain, a box inventory hides duplicate ownership and gaps between tools.
Thesis: The smallest complete component map is producer → evidence path → owned action; product names matter only after every transition has one accountable owner. Why this matters: during an incident, the team must identify the failing handoff without guessing which adjacent tool was supposed to do the work.
The boundary here includes evidence creation, collection, storage, query, recognition, notification, and action. It excludes deployment sizing and signal economics, which require the ownership map but do not change its smallest shape.
Expand the model one boundary at a time
Expand the middle box in dependency order: first create domain evidence, then protect and route it, then preserve its signal-specific shape, and only then correlate it for a decision. Each added noun refines the same producer-to-action path.
When similar tools appear adjacent, teams can accidentally assign the same job twice and lose the actual failure boundary. The decisive question is what each component consumes, how it transforms that input, and what durable interface it exposes.
| Component | Primary responsibility | Consumes | Produces or exposes |
|---|---|---|---|
| Application instrumentation | Create evidence with domain meaning | Runtime events | Metrics, logs, spans, and profiles |
| Exporter | Translate system-specific state | Native system data | Prometheus exposition or OpenTelemetry data |
| OpenTelemetry SDK | Describe application operations and propagate context | Application execution | OpenTelemetry Protocol (OTLP) telemetry |
| OpenTelemetry Collector or Grafana Alloy | Receive, protect, transform, batch, and route | OTLP, scrape targets, logs, profiles | Backend-specific writes and pipeline health |
| Prometheus | Discover and scrape targets; query local metrics and evaluate rules | Prometheus exposition endpoints | PromQL API, local time series, alerts, remote write |
| Mimir | Supply shared, scalable, long-retention metrics | Remote write or OpenTelemetry metrics | Prometheus-compatible query API |
| Loki | Store and query label-organized log streams | Log streams | LogQL API |
| Tempo | Store and reconstruct distributed traces | Spans | Trace lookup and TraceQL API |
| Pyroscope | Attribute sampled resource use to code | Profile samples | Profile queries and flame graphs |
| Grafana | Correlate and visualize signals | Backend query APIs | Dashboards, exploration, and alert views |
| Ruler and Alertmanager | Recognize conditions, then group and route notifications | Queries, rules, and firing alerts | Recorded series, alert state, silences, notifications |
| Object storage | Persist economical historical blocks and chunks | Backend blocks | Durable historical objects under retention policy |
Application instrumentation owns business semantics: only the checkout code knows whether a payment was duplicated or a policy denied. A collector can normalize and redact that evidence, but cannot reconstruct missing domain meaning. Backends specialize in storing and querying signal shapes; Grafana correlates their APIs rather than becoming their authoritative store.
The relationship card below makes the operational constraints explicit instead of leaving them implicit in arrows.
| Boundary | Inputs and transformation | Output or interface | Scaling constraint and main failure mode | Alternatives and selection guidance |
|---|---|---|---|---|
| Producer → collector | Runtime events become OpenTelemetry Protocol (OTLP) records or exporter output with propagated context | Authenticated push, scrape, or file-tail interface | Application overhead and collector queue capacity; missing business attributes cannot be repaired later | Use an OpenTelemetry SDK for application semantics and exporters for system-native state; avoid collector-only enrichment when the application alone knows the meaning |
| Collector → store | Records are authenticated, redacted, batched, sampled, normalized, and routed | Backend write APIs with tenant identity and delivery counters | Burst volume, retry buffers, and backend availability; overflow produces drops or backpressure | Use an OpenTelemetry Collector or Alloy when policy must be centralized; avoid adding a gateway when direct delivery already meets isolation and recovery objectives |
| Store → query | Signal-shaped indexes and objects become bounded query results | PromQL, LogQL, TraceQL, and profile-query APIs | Cardinality, retained bytes, fan-out, and query concurrency; overload yields slow or rejected queries | Use specialized stores when signal semantics matter; avoid forcing every signal into one storage model merely to reduce product count |
| Query → action | Correlated results become a condition, notification, decision, and bounded change | Grafana links, rule state, Alertmanager notification, and incident action record | Human attention and rule quality; component noise can page without customer impact | Use rules for measurable conditions and Alertmanager for routing; avoid treating Grafana as the authoritative signal store or notification policy owner |
Run the model through one incident
The general rule is to follow the evidence transition that failed, not to search every component independently. A simple example is a metric query that succeeds while its exemplar trace lookup fails: the metric store is healthy, so the missing correlation reference or trace boundary is the first suspect.
In a recurring checkout incident, the on-call starts with an elevated error-rate metric, opens an exemplar in Tempo, follows the trace context into Loki logs, and identifies the checkout service owner. The observed evidence should include the metric query, trace ID, related log query, component-map revision, tenant, and investigation run ID. If the trace is absent, the operator checks whether the application emitted context, whether the collector accepted and routed spans, and whether Tempo stored them—in that dependency order. A successful metric query remains the positive control while an invalid trace ID proves the failure path is distinguishable from an authorization or query outage.
This is reusable beyond checkout: preserve one healthy transition, locate the first missing output, and inspect only the producer-consumer contract that should have created it.
Failure modes, trade-offs, and decision rules
The main failure mode is an arrow labelled only “connects to”; it hides protocol, authentication, retry, tenancy, buffering, evidence, and ownership. The central trade-off is map simplicity versus diagnostic precision: too few boundaries conceal responsibility, while too many implementation boxes make the map stale and hard to operate.
represent a boundary when it changes accountable ownership, protocol, durable state, tenant enforcement, or observable failure semantics; otherwise keep it inside the owning component and document it at the lower-level runbook.
Use this boundary protocol for every represented edge:
- Name the producer, consumer, protocol, direction, and accountable owner.
- State whether the edge is push, pull, or query, and where buffering occurs.
- Record tenant identity and authentication independently at collection and query boundaries.
- Inject one invalid credential and one unavailable consumer; observe rejection, retry, drop, or backpressure.
- Preserve the positive control: another authorized tenant and healthy edge still work.
- Falsify the map if any observed hop, durable store, or operator action lacks a represented edge.
Use a product-level map when several teams need a shared incident contract. Avoid using it as a deployment manifest: replica counts and internal workers belong in topology evidence unless they create a distinct failure domain or owner.
Close the loop
A component map earns its maintenance cost only when it changes an operational decision and the result is measured. Apply Observe → Interpret → Decide → Act → Measure to one bounded edge at a time.
Observe a failed checkout trace link while the metric control succeeds. Interpret that the break lies between context creation, span routing, and trace storage. Decide which single owned boundary to probe first. Act by restoring the last passing collector route or instrumentation revision, not by changing every backend. Measure the effect by repeating the same trace lookup and requiring both the valid trace to appear and an invalid trace ID to remain a clean negative result within the agreed recovery window. If either probe fails, the action did not repair the component contract.
Key takeaways
A memorable product list is not an architecture; the useful map follows evidence from behavior to accountable action.
- Applications and exporters create or translate evidence; collectors protect and route it.
- Prometheus, Mimir, Loki, Tempo, and Pyroscope retain and query different signal shapes.
- Grafana correlates signals, rulers detect conditions, and Alertmanager controls notification delivery.
- Every edge needs an owner, protocol, tenancy rule, and falsifiable failure observation.
Checklist
An incomplete review creates false confidence, so complete these checks before accepting the component map.
- [ ] Every producer and consumer has one accountable owner.
- [ ] Every arrow names protocol, direction, tenant identity, and failure behavior.
- [ ] Application-owned business semantics are not delegated to infrastructure.
- [ ] The metric-to-trace-to-log journey has positive and negative evidence.
- [ ] Object storage retention and deletion remain owned by each backend.
Sources
Product responsibilities change, so these current claims were checked against official primary documentation.