Observability Pipeline as a Platform in OpenTelemetry

Observability Pipeline as a Platform in OpenTelemetry

Learn how the OpenTelemetry Collector, OTLP and a product mindset combine into one shared, governed, scalable service that moves traces, metrics and logs from every application to every backend your organization needs.

Picture a large city with no postal service. Every household that wants to send a letter must walk to the recipient’s door, learn that person’s address format, and carry the envelope by hand. Some people would stop sending letters. Others would invent their own rules. Within a year nobody could say which letters were delivered, which were lost, and how much the whole mess cost. Now picture the same city with a real postal service: standard envelopes, sorting centres, routes, tracking numbers and a single team that keeps the whole thing running. The letters are the same, but the experience is completely different.

Modern software systems face exactly this problem with telemetry. Telemetry is the stream of signals that applications emit about themselves: records of requests, measurements of health, and lines of text describing events. When a company runs hundreds of services, those signals must travel somewhere useful. An observability pipeline as a platform is the postal service for that data, and OpenTelemetry supplies most of the standard parts needed to build it. This tutorial explains the idea from the ground up, then goes deep into how it works, how it scales, how it is governed and where it goes wrong.

1Why Observability Needs a Pipeline

Before any tool is chosen, it helps to see the pain that a pipeline is designed to remove.

What observability actually means

Observability is the ability to understand what is happening inside a running system by looking at the data it produces. If a customer says the checkout page is slow, observability lets an engineer find out which service, which database call and which deployment caused the slowdown, without guessing and without logging into individual machines. The data that makes this possible is called telemetry, and it is usually grouped into signals: traces, metrics and logs.

Observability exists because modern systems are made of many small services that call each other over a network. One user click may touch twenty components. No single person can hold the whole picture in their head, so the system itself must tell its story in a structured way.

Simple Analogy

Think of a hospital. A doctor does not open up a patient to see what is wrong. Instead the patient is connected to monitors that show heart rate, temperature and oxygen, and charts that record what happened over time. Telemetry is the set of monitors and charts for a software system, and the pipeline is the wiring that carries every monitor reading to the nurses’ station.

The world before shared pipelines

In the early days, each team wired its own telemetry. One team used a vendor agent for metrics. Another wrote logs to files and shipped them with a custom script. A third added a tracing library that only worked with one backend. Every application ended up talking directly to one or more backends, which are the systems that store and display telemetry.

This direct wiring seems simple at first, but it creates a tangle. If the company decides to change its metrics vendor, every application must be changed, rebuilt and redeployed. If a backend slows down, applications may block or drop data. If a developer accidentally logs a customer’s email address, it is already sitting in a third-party system before anyone notices. If one service suddenly emits ten times more data, the bill grows, and nobody knows whom to ask.

Pain 1

Vendor lock-in

Telemetry code is welded to one backend, so switching or adding a backend means touching every application.

Pain 2

Inconsistent data

Each team names things differently, so one service is called “payments”, “payment-svc” and “Payments-API” in three places.

Pain 3

Runaway cost

Nothing filters or samples data in the middle, so everything is stored, and the bill grows with traffic instead of with value.

Pain 4

Privacy leaks

Sensitive values travel straight from application to vendor with no central place to remove or mask them.

Pain 5

Fragile delivery

When a backend is slow or down, applications must cope alone, and data is lost or latency is added to user requests.

Pain 6

No ownership

Telemetry is everyone’s job and therefore nobody’s job, so quality and reliability slowly decay.

!
Common Misconception

Many beginners think the hard part of observability is choosing a dashboard tool. In practice the hard part is the movement, shaping and governance of the data before it ever reaches a dashboard. That middle layer is the pipeline.

“A dashboard is only as trustworthy as the pipe that fed it.”

2OpenTelemetry Foundations You Need First

A short, plain tour of the building blocks that the platform will later organize.

What OpenTelemetry is

OpenTelemetry, often shortened to OTel, is an open-source, vendor-neutral standard for producing, collecting and exporting telemetry. It is hosted by the Cloud Native Computing Foundation, the same foundation that hosts Kubernetes. It provides specifications, language libraries, a wire protocol and a standalone data-handling program called the Collector. It deliberately does not provide a storage backend or a dashboard. Its job is to get good data out of applications and to the place you choose, in a format everyone agrees on.

Simple Analogy

OpenTelemetry is like the standard shipping container. Before containers, every port handled odd-shaped crates by hand. After containers, any ship, crane and truck could move any cargo. OTel does not own the ships or the warehouses; it standardizes the box so the whole logistics chain can cooperate.

The signals

Signal

Traces

The story of one request as it crosses services, made of timed steps called spans that are linked into a tree.

Signal

Metrics

Numbers measured over time, such as requests per second, memory used or queue depth, cheap to store and fast to query.

Signal

Logs

Timestamped text or structured records describing something that happened, which OTel can link to a trace.

Emerging

Profiles

Continuous snapshots of where code spends CPU and memory. This signal is newer and still maturing, so check the current project status before depending on it.

The API, the SDK and instrumentation

Inside an application, OpenTelemetry has two layers. The API is a thin set of calls that code uses to say “a request started” or “record this number”. The SDK is the implementation that decides what to do with those calls: how to sample, how to batch, and where to send the result. Splitting them lets library authors add instrumentation using only the API, without forcing any particular behavior on the people who use their libraries.

Instrumentation is the act of adding those calls. It can be automatic, where an agent or library hooks into common frameworks without code changes, or manual, where developers add spans and measurements around business logic. Most real systems mix both.

Resources, attributes and semantic conventions

Every piece of telemetry carries attributes, which are key and value pairs such as the HTTP method or the database name. A special group called the resource describes who produced the data: the service name, the version, the cloud region, the Kubernetes pod. Semantic conventions are the shared naming rules that say which attribute names mean what. They are the reason that two different teams, using two different languages, still produce data that a platform can understand uniformly.

i
Why This Matters Later

A platform can only enforce quality if the data has a common shape. Semantic conventions and resource attributes are the common shape. Without them, every routing rule and every cost report becomes a pile of special cases.

OTLP, the common language

OTLP, the OpenTelemetry Protocol, is the wire format used to move all signals between SDKs, Collectors and compatible backends. It can travel over gRPC or over HTTP. Because most observability products now accept OTLP directly, it has become the default handshake of the ecosystem, and it is the glue that makes a pipeline possible.

The Collector in one paragraph

The OpenTelemetry Collector is a standalone program that receives telemetry, optionally changes it, and sends it onward. It is written in Go, it runs as a single binary or container, and it is configured by a text file that declares what to receive, what to do and where to send. It is the engine room of everything that follows in this tutorial.

flowchart LR
  A["Applications with OTel SDK"] -->|"OTLP"| B["Collector"]
  B --> C["Metrics backend"]
  B --> D["Trace backend"]
  B --> E["Log backend"]
  B --> F["Archive storage"]
        
FIG 1 — Applications speak one protocol; the Collector fans data out to many destinations

3What “Pipeline as a Platform” Really Means

The phrase is an architectural idea, not a product name, so it is worth defining carefully.

Two ideas joined together

An observability pipeline is the path telemetry takes from where it is produced to where it is stored, including every step of receiving, enriching, filtering, sampling, routing and exporting along the way. A platform, in the engineering sense, is a shared internal service that many teams use through a simple, self-service interface, run by a dedicated team that treats the service like a product with users, documentation, reliability targets and a roadmap.

Put together, an observability pipeline as a platform means one centrally operated, OpenTelemetry-based data path that every application team plugs into with minimal effort, while a small platform team owns its quality, cost, security and uptime. It is important to be honest about vocabulary here: OpenTelemetry does not ship a thing called “the Observability Platform”. The project provides the standard parts, and organizations assemble them into a platform by adding operating practices around them.

Simple Analogy

Compare a pile of plumbing parts with a city water system. Pipes, valves and pumps are the Collector and its components. The water system is those parts plus a utility company: maps, maintenance crews, pressure rules, billing and a phone number to call when a tap runs dry. The platform is the utility, not the parts.

The four promises of a good platform

1

Easy to join

A new service needs only a service name and one endpoint address. Everything else, from enrichment to routing, is handled for it.

2

Safe by default

Sensitive data is masked, traffic is encrypted and tenants cannot see each other’s data without the platform team doing it on purpose.

3

Predictable cost and reliability

Volume is shaped by rules, back-pressure is handled gracefully, and the pipeline has its own targets and alerts.

4

Free to change

Backends can be added, replaced or run side by side without any application redeploy, because applications only know the pipeline.

Platform layers

It helps to see the platform as layers. At the bottom are the producers, which are applications and infrastructure carrying the SDK. Above them is the collection layer, made of agents close to the workloads. Above that is the processing layer, made of central gateways where heavier decisions happen. At the top are the destinations. Wrapped around all of these is the control layer: configuration management, access rules, cost reporting and self-monitoring.

flowchart TB
  subgraph Producers
    P1["Services with SDK"]
    P2["Kubernetes and hosts"]
    P3["Third-party systems"]
  end
  subgraph Collection
    A1["Agent Collectors"]
  end
  subgraph Processing
    G1["Gateway Collectors"]
  end
  subgraph Destinations
    D1["Metrics store"]
    D2["Trace store"]
    D3["Log store"]
    D4["Cold archive"]
  end
  subgraph Control
    C1["Config as code"]
    C2["Access and tenancy rules"]
    C3["Cost and quality reports"]
    C4["Pipeline self-monitoring"]
  end
  P1 --> A1
  P2 --> A1
  P3 --> G1
  A1 --> G1
  G1 --> D1
  G1 --> D2
  G1 --> D3
  G1 --> D4
  Control -.-> A1
  Control -.-> G1
        
FIG 2 — The layers of an observability pipeline platform and the control plane around them

Platform versus plumbing, in one sentence

If a team can only use the pipeline by reading Collector internals and editing shared configuration by hand, you have plumbing. If a team can onboard in an afternoon, see its own data quality and cost, and trust someone else to keep the pipe healthy, you have a platform.

4Anatomy of the Collector Pipeline

The Collector is built from a small number of component types that snap together like building bricks.

The five component types

Component 1

Receivers

The front door. A receiver accepts data from outside, whether pushed over OTLP or pulled by scraping, such as collecting host metrics or reading log files.

Component 2

Processors

The workshop. Processors inspect and change data in transit: batching, limiting memory, adding attributes, filtering, transforming and sampling.

Component 3

Exporters

The loading dock. An exporter sends data to a destination, such as another Collector, a vendor, a message queue or a metrics store.

Component 4

Connectors

A bridge between two pipelines. A connector acts as an exporter at the end of one pipeline and a receiver at the start of another, so data can be counted, converted or routed.

Component 5

Extensions

Helpers that are not on the data path: health checks, authentication, diagnostics and persistent storage for queues.

Simple Analogy

Imagine a package sorting hub. Trucks arrive at the receiving dock (receivers). Workers weigh, label, repack and inspect parcels on the conveyor (processors). Outbound trucks leave from the shipping dock (exporters). Sometimes a parcel is copied into a different conveyor for customs paperwork (connectors). The manager’s office, with its phone, cameras and keys, supports everything without touching parcels (extensions).

Pipelines are declared per signal

The configuration has a section where pipelines are defined. Each pipeline belongs to exactly one signal type, so there is a traces pipeline, a metrics pipeline and a logs pipeline, and a Collector may run several of each. A pipeline lists which receivers feed it, which processors run and in what order, and which exporters it sends to. A component can be defined once and reused across several pipelines.

Order matters. Processors run one after another in the order listed, so a memory protection step normally comes first, enrichment and filtering come in the middle, and batching comes last, right before data leaves.

The fan-in and fan-out behavior

If two receivers feed one pipeline, their data is merged into one stream. If one pipeline has two exporters, every item is copied to both. This simple rule is what makes dual-writing to two backends during a migration almost trivial, and it is also what makes careless configuration expensive, because every extra exporter multiplies the outgoing traffic.

flowchart LR
  R1["OTLP receiver"] --> M["Memory limiter"]
  R2["Host metrics receiver"] --> M
  M --> E["Enrichment and redaction"]
  E --> F["Filtering"]
  F --> B["Batch"]
  B --> X1["Exporter to primary backend"]
  B --> X2["Exporter to archive"]
  B --> CN["Connector to metrics pipeline"]
        
FIG 3 — One pipeline: two receivers merge, processors run in order, three outputs fan out

Useful processors, explained simply

Processor ideaWhat it doesEveryday comparison
Memory limiterRefuses new data when the Collector is close to its memory budget, protecting it from crashingA bouncer who stops letting people in when the club is full
BatchGroups many small items into fewer larger sends, improving efficiencyWaiting to fill a delivery van instead of sending one parcel per trip
Resource and attribute editingAdds, renames, hashes or removes attributesStamping a standard address label on every parcel
Resource detectionDiscovers facts about the host or cloud and attaches themA scanner that reads the pallet’s origin and writes it on the label
Kubernetes attributesLooks up pod, namespace and owner information and adds itLooking up which department a parcel belongs to
FilterDrops data that matches a ruleThrowing away junk mail before it enters the house
TransformRewrites data using a small expression language called OTTLA clerk who corrects forms according to a rulebook
Sampling processorsKeep only a chosen fraction or a chosen kind of tracesA quality inspector checking one box in ten, plus every box that looks damaged
i
Distributions

The Collector comes in a core build with a small set of stable components and a contrib build with a very large community collection. Organizations can also assemble a custom build that contains only the components they use, using the project’s builder tool. Fewer components means a smaller attack surface and a smaller image, which platform teams often value.

5Internal Working and Data Lifecycle

Knowing what happens to a single item inside the Collector explains almost every tuning decision later.

The journey of one batch of data

1

Arrival and decoding

A receiver accepts bytes from the network or reads them from a source, and converts them into the Collector’s internal, protocol-independent representation. From this moment the data no longer cares which format it arrived in.

2

Hand-off to the pipeline

The receiver passes the data to the first processor. Within a single pipeline this is a direct, in-memory call, which is why the Collector can be fast.

3

Processing in order

Each processor transforms or inspects the data and passes it along. A processor may also drop the data entirely, or return an error that travels back toward the sender.

4

Queueing at the exporter

Before sending, exporters usually place data into a sending queue so that a slow destination does not stall the whole pipeline. Retries with waiting periods are applied when a send fails.

5

Delivery or drop

If the destination accepts the data, the item is done. If retries are exhausted or the queue is full, the data is dropped and an internal counter is incremented, which is a signal the platform team must watch.

Back-pressure, the pressure valve

Back-pressure is what happens when a downstream step cannot keep up and the slowness travels backward toward the source. In a well-configured Collector, the memory limiter notices high memory use and starts refusing data, and the refusal is returned to senders as a retryable error. Well-behaved SDKs and upstream Collectors then wait and try again rather than flooding the system.

Simple Analogy

Think of a kitchen pass in a busy restaurant. When the cooks fall behind, the head chef tells waiters to stop taking new orders for a few minutes. The line outside grows, but the kitchen does not collapse. A missing memory limiter is a kitchen with no head chef: orders keep arriving until the stove catches fire.

Queues: memory and disk

By default, the sending queue lives in memory, which is fast but is lost if the process dies. A persistent queue stores waiting data on disk through a storage extension, so that a restart does not lose what was in flight. The trade-off is slower throughput and the need for a reliable volume. Choosing between the two is a decision about how much loss the business can tolerate for a given signal.

sequenceDiagram
  participant App as Application SDK
  participant Agent as Agent Collector
  participant GW as Gateway Collector
  participant BE as Backend
  App->>Agent: Send batch over OTLP
  Agent->>Agent: Memory check, process, batch
  Agent->>GW: Export batch
  GW->>BE: Export batch
  BE-->>GW: Slow or unavailable
  GW->>GW: Hold in queue and retry
  GW-->>Agent: Refuse when full, retryable
  Agent->>Agent: Queue and retry
  Agent-->>App: Refuse when full, retryable
  BE-->>GW: Recovered
  GW->>BE: Drain queue
        
FIG 4 — Back-pressure travels backward from a struggling backend toward the source, one hop at a time
!
Common Mistake

Teams often make queues enormous to avoid ever dropping data. A giant queue only hides the problem and turns a short outage into a long delay and a very large memory or disk bill. Size queues to the outage length you can truly afford to ride out, and alert when they start filling.

Logs are a special case

Traces and metrics usually arrive pushed by an SDK. Logs often start as plain files written by an application or container runtime. The Collector can read those files, parse them into structured records, and attach the same resource attributes used by traces and metrics. This is one of the most valuable platform features, because it lets old applications participate in the common data model without being rewritten.

6Deployment Topologies

Where you place Collectors decides your reliability, your cost and how much each team must know.

The four common shapes

Shape 1 — No Collector, SDK sends straight to the backend

This is the simplest possible setup and fine for a demo or a tiny system. The cost is that every application owns retry logic, credentials and backend choice, which is exactly the tangle a platform tries to remove.

Shape 2 — Agent only

A Collector runs next to every workload, either as a sidecar inside the pod or as one instance per node. Applications send to the local agent over a fast local connection. Agents handle batching, local enrichment and host-level data, and then export directly to backends.

Shape 3 — Gateway only

A central, scalable pool of Collectors sits behind a load balancer. Applications send to it directly. This gives one place for policy, but it means every application must reach the gateway across the network, and no local host data is gathered.

Shape 4 — Agent plus gateway, the platform default

Agents run close to workloads for cheap, local jobs. They forward to gateways, which perform central jobs such as tail sampling, routing, tenant rules and fan-out to multiple backends. Most organizations that call their pipeline a platform end up here.

Simple Analogy

Agent plus gateway is like a neighborhood post box plus a regional sorting centre. The post box is close and easy, so people use it. The sorting centre has the heavy machinery and the full picture of where everything must go.

flowchart LR
  subgraph Node1["Kubernetes node A"]
    S1["Service 1"] --> AG1["Agent"]
    S2["Service 2"] --> AG1
  end
  subgraph Node2["Kubernetes node B"]
    S3["Service 3"] --> AG2["Agent"]
  end
  AG1 --> LB["Load balancer"]
  AG2 --> LB
  LB --> GW1["Gateway 1"]
  LB --> GW2["Gateway 2"]
  LB --> GW3["Gateway 3"]
  GW1 --> V1["Vendor backend"]
  GW2 --> V2["Open-source stores"]
  GW3 --> V3["Archive"]
        
FIG 5 — Hybrid topology: agents near workloads, a scalable gateway tier in the middle

Agent flavors on Kubernetes

On Kubernetes, an agent can run as a sidecar, one extra container per pod, or as a node agent that runs once per machine. Sidecars give strong isolation and per-application tuning but multiply resource use. Node agents are cheaper and are the natural place to collect node metrics and container logs. Many platforms use node agents by default and allow sidecars for special workloads.

Comparing the shapes

ShapeStrengthWeaknessBest fit
No CollectorFewest moving partsEvery app owns delivery and credentialsExperiments and small systems
Agent onlyLocal buffering, host data, simple scalingPolicy is spread across many agentsSingle-backend, single-team setups
Gateway onlyCentral policyNetwork dependence, no host-level dataServerless or edge workloads
Agent plus gatewayBest balance of locality and controlMore components to operateShared platforms across many teams

Tiers beyond two

Very large organizations add more tiers. A regional gateway may forward to a global one, or a message queue may sit between tiers to absorb bursts. Each tier adds resilience and control, but also adds latency and operational effort. A good rule is to add a tier only when a clear problem demands it and to be able to name that problem in one sentence.

i
Design Tip

Whatever shape you choose, keep applications unaware of it. Apps should send to one stable address. If you ever re-shape the tiers behind that address, no application should need to change.

7Core Platform Capabilities

A platform earns its name by doing useful jobs for every team, once, in the middle of the road.

Capability 1: Enrichment and normalization

Enrichment means adding missing context to data as it passes through. A trace span from a small service might only say “database call took 300 milliseconds”. After enrichment it also says which Kubernetes namespace, which cloud region, which team owns the service and which version was running. Normalization means making equivalent things look identical, for example turning three spellings of an environment name into one agreed value.

Doing this in the pipeline rather than in each application is powerful because the platform team can fix a naming problem in one place and every service benefits on the next config rollout, with no code change by anyone.

Simple Analogy

Enrichment is like a mailroom clerk who stamps every incoming envelope with the date, the floor and the department. The sender only had to write a name; the building adds everything else that helps the envelope find its way and be filed later.

Capability 2: Routing

Routing sends different data to different places. Production traces may go to a premium trace store, while development traces go to a cheaper one. Security-relevant logs may be copied to a compliance archive, while debug logs are kept for only a few days. A routing connector inspects an attribute, such as the tenant or environment, and picks the pipeline that should handle the item.

Routing also enables safe migrations. During a move from one vendor to another, the pipeline can send everything to both for a trial period, compare the results, and then switch off the old one. Applications never notice.

Capability 3: Filtering and volume shaping

Some telemetry is noise. Health-check requests, which orchestrators fire every few seconds, may account for a large fraction of all spans while telling nobody anything. Filtering drops such items according to simple rules. Volume shaping goes further and reduces detail, for example by aggregating a high-detail metric into fewer series, or dropping a verbose log level in production.

Capability 4: Redaction and privacy

Applications sometimes put sensitive information in telemetry by accident: an email address in a URL, a card fragment in a log line, a token in a header attribute. A redaction step in the pipeline can mask, hash or delete values that match patterns or that sit under known attribute names. This acts as a safety net, and it is much cheaper to maintain a single net than to audit every codebase.

!
Do Not Rely on This Alone

Pipeline redaction is a safety net, not a licence to be careless. Pattern matching misses new formats, and data that is already stored in an application’s own logs or in memory is unaffected. Pair pipeline rules with developer guidance and with periodic sampling of real data to confirm the rules work.

Capability 5: Derived signals

Connectors can turn one kind of signal into another. A well-known example converts spans into metrics, producing request counts, error counts and latency distributions for every service and operation automatically. This is valuable because metrics are cheap to store for a long time, while detailed traces are expensive. A platform can therefore keep a complete statistical picture even when it only stores a small fraction of the individual traces.

Another common use is counting. A connector can count log lines or spans that match a rule and emit the count as a metric, which can then drive alerts without anyone storing every line.

Capability 6: Format bridging

Not every system speaks OTLP. Older applications may expose metrics in the Prometheus format, send logs through syslog, or emit traces in older open formats. Receivers for these formats let the pipeline accept them all and convert them into the common internal representation. On the way out, exporters can speak whatever the destination requires. The pipeline thus becomes a translator that protects the organization from format churn.

Benefit

One fix, everywhere

A naming or privacy correction is made once in the pipeline instead of in hundreds of repositories.

Benefit

Backend freedom

Routing and format bridging mean destinations can change without touching application code.

Benefit

Cheaper history

Derived metrics keep long-term trends alive while expensive raw data is trimmed.

Benefit

Safer data

Central masking catches mistakes before data lands in third-party systems.

flowchart LR
  IN["Incoming traces"] --> ENR["Enrich and normalize"]
  ENR --> RED["Redact sensitive values"]
  RED --> RT{"Route by tenant and environment"}
  RT -->|"Production"| P1["Premium trace store"]
  RT -->|"Development"| P2["Low-cost store"]
  RT -->|"Security tagged"| P3["Compliance archive"]
  RED --> SM["Span to metrics connector"]
  SM --> MET["Long-term metrics store"]
        
FIG 6 — A platform pipeline enriches, protects, routes and derives metrics from the same stream

8Sampling Strategy: Keeping the Right Data

Traces are the most expensive signal, so deciding which ones to keep is one of the platform’s biggest levers.

Why sample at all

A busy system can generate millions of traces per minute. Storing all of them is usually unaffordable, and most of them are boring successful requests that look identical. Sampling is the practice of keeping only a subset while preserving the ability to answer important questions. The art is keeping the interesting traces, such as errors and slow requests, while discarding most of the ordinary ones.

Simple Analogy

A factory cannot inspect every screw, so it checks a few at random. But if a screw looks cracked, it is always pulled out and examined. Good sampling does both: a random sprinkle for baseline statistics and a guaranteed catch for anything unusual.

Head sampling

Head sampling makes the keep-or-drop decision at the very start of a trace, before anything is known about how the request will turn out. It is cheap and simple, because dropped traces are never generated or sent. Its weakness is that it is blind. It cannot know that the request that just started will later fail or take ten seconds, so it may throw away exactly the traces you wanted. Head sampling usually happens in the SDK, and the decision is passed along to downstream services so that a trace is kept or dropped as a whole.

Tail sampling

Tail sampling waits until a trace is finished, or nearly finished, and then decides using everything that happened. It can keep all traces with errors, all traces slower than a threshold, all traces touching a sensitive service, and a small random share of the rest. This is far more useful, but it has a cost: the Collector must hold every span of every in-progress trace in memory until the decision time, and all spans of one trace must arrive at the same Collector instance.

QuestionHead samplingTail sampling
When is the decision made?At the start of the traceAfter the trace is mostly complete
Can it keep all errors?No, it cannot know yetYes
Resource costVery lowHigh memory and coordination
Where it usually runsIn the SDK or an agentIn a gateway tier
Main riskMissing rare, important tracesMemory pressure and incomplete traces if routing is wrong

The trace affinity problem

Imagine a trace whose spans are produced by five different services, which send their spans to five different agents, which forward them to a pool of three gateways. If the spans land on different gateways, no single gateway sees the whole trace, and any tail decision made on a partial view will be wrong. The solution is trace-aware load balancing: a first tier of Collectors uses an exporter that hashes the trace identifier and sends every span with that identifier to the same second-tier Collector. The second tier then runs the tail sampling policies with a complete view.

flowchart LR
  A1["Agent 1"] --> LB1["Load-balancing tier"]
  A2["Agent 2"] --> LB1
  A3["Agent 3"] --> LB1
  LB1 -->|"Trace IDs 0 to 33 percent"| T1["Tail sampler A"]
  LB1 -->|"Trace IDs 34 to 66 percent"| T2["Tail sampler B"]
  LB1 -->|"Trace IDs 67 to 100 percent"| T3["Tail sampler C"]
  T1 --> S["Trace store"]
  T2 --> S
  T3 --> S
        
FIG 7 — Hashing by trace identifier keeps every span of one trace on the same sampler
!
Operational Catch

When the sampler pool grows or shrinks, the hash ranges shift, and traces that were in flight may be split across two samplers for a short time. Plan scaling events for quiet periods, keep the pool size stable where possible, and accept that a small number of traces will be incomplete during changes.

Layering policies

A mature platform combines policies instead of choosing one. A typical pattern keeps every trace that contains an error, keeps every trace slower than a set latency, always keeps traces from a short list of critical business flows, and keeps a small random percentage of everything else so that baselines remain statistically honest. Because sampling discards the raw evidence of the ordinary traces, the derived span metrics from Chapter 7 are what keep rates and percentiles accurate.

Why derived metrics should be computed before sampling

If you calculate request counts after dropping most traces, the counts will be wrong by the sampling factor. Compute span metrics early in the pipeline, on the full stream, and sample afterward. Then dashboards show true traffic while storage shows only a curated set of examples.

9Scaling and Reliability

A platform that falls over during an incident is worse than no platform, because that is exactly when people need it.

Stateless and stateful parts

Most Collector work is stateless: each item can be handled alone, so you can add more identical instances behind a load balancer and capacity grows roughly in line. Some work is stateful, which means an instance needs memory of earlier items. Tail sampling is stateful because it must remember spans until a trace is complete. Certain metric conversions are stateful too, because they need previous values to compute rates or to merge cumulative counters. Separate stateless from stateful work into different tiers so that scaling rules for each can differ.

Simple Analogy

A stateless tier is like checkout tills at a supermarket: open more tills and the queue shortens, and any customer can use any till. A stateful tier is like a doctor’s waiting list where each patient’s file lives in one particular office. You cannot simply send the patient to another room without moving the file.

Horizontal scaling signals

To scale well, watch the right numbers. The key ones are CPU use, memory use, the depth of sending queues, the count of refused or dropped items, and the delay between data arriving and data leaving. Queue depth rising while CPU stays low usually means a slow destination, not a lack of Collector capacity, so adding more Collectors will not help.

Buffering with a message queue

For high-value data or for very bursty traffic, many platforms put a durable message queue between the gateway tier and the final writers. Gateways publish to the queue, and a separate pool of consumers reads from it and writes to backends at their own pace. This decouples the speed of arrival from the speed of storage. If a backend is down for an hour, the queue holds the data, and when the backend recovers the consumers drain the backlog.

Advantages

  • Absorbs bursts without dropping data
  • Lets several consumers read the same stream for different purposes
  • Survives backend outages of hours, not minutes
  • Separates ingestion scaling from storage scaling

Disadvantages / Trade-offs

  • Another system to run, secure and monitor
  • Adds delay between event and visibility
  • Storage and network cost for the buffered data
  • Retention limits still mean data can be lost in very long outages

High availability

Run at least two instances of every tier, spread across failure zones. Use health checks so the load balancer removes unhealthy instances. Roll out configuration changes gradually, one slice at a time, so that a bad change affects a small part of the fleet first. For persistent queues, use storage that survives the loss of a single machine.

Protecting the applications

The strongest reliability rule of a telemetry platform is that it must never harm the systems it observes. SDKs should use bounded in-memory buffers and drop data rather than block user requests when the pipeline is slow. Agents should have strict resource limits. Gateways should refuse excess load early rather than accept it and collapse. A monitoring system that causes an outage is a failure in design, not in luck.

i
Priority Order

Decide in advance what to sacrifice first when overloaded. A common order is to drop debug logs first, then low-value traces, then high-volume metrics, and to protect error logs and critical service metrics last. Writing this down turns a panicked decision into a policy.

10Kubernetes, Fleet Management and Configuration as Code

When there are hundreds of Collectors, the question changes from “how do I configure one?” to “how do I keep all of them correct?”

The OpenTelemetry Operator

On Kubernetes, the OpenTelemetry Operator is a controller that manages Collectors and instrumentation for you. You describe the Collector you want as a Kubernetes resource, including whether it should run as a sidecar, a node-level agent, a standard deployment or a stateful set, and the Operator creates and maintains the underlying objects. A second resource type lets you describe automatic instrumentation for supported languages, so that pods can be instrumented by adding an annotation rather than rebuilding images.

Simple Analogy

The Operator is a building manager. You tell the manager “every floor needs a fire extinguisher of this kind”, and the manager buys, installs and replaces them. You never carry an extinguisher yourself.

Scraping at scale with the Target Allocator

Metrics in the Prometheus style are often pulled by scraping endpoints rather than pushed. If many Collectors each scraped everything, work would be duplicated. The Operator’s Target Allocator discovers scrape targets and divides them fairly among the Collector instances, so each target is scraped by exactly one instance, and it rebalances as pods come and go.

Fleet control with OpAMP

OpAMP, the Open Agent Management Protocol, is a standard that lets a central server talk to a fleet of agents. Through it, the server can see which agents are running, which configuration each one has, whether the last change was applied, and what their health is, and it can push new configuration or request updates. It is the foundation for a real control plane because it replaces ad hoc scripts with a common, observable conversation between the platform and its Collectors. Support in tools and distributions is growing but uneven, so verify what your chosen distribution implements.

Configuration as code

Treat pipeline configuration like application code. Keep it in version control, require review for every change, validate it automatically before rollout, and deploy it through the same automated delivery process as other infrastructure. Validation steps can check that the file loads, that required processors exist and are in the right order, that no forbidden exporter is used, and that sample data passes through producing the expected output.

1

Propose

A platform engineer changes a pipeline definition in a repository and opens a review.

2

Validate

Automated checks load the configuration, run policy rules and replay sample telemetry through a test Collector.

3

Canary

The change is applied to a small slice of the fleet while health and drop counters are watched.

4

Roll out

If the canary stays healthy, the change spreads gradually to every environment.

5

Roll back

If any signal degrades, the previous version is restored automatically, and the change is reopened for repair.

Layered configuration

A useful technique is to build each Collector’s configuration from layers: a base layer owned by the platform team that contains non-negotiable safety items, and optional layers that tenant teams may select or tune within limits. The Collector supports merging several configuration sources, which makes this layering practical. The base layer guarantees memory protection, redaction and self-monitoring; the optional layers add things like extra attribute rules for a particular team.

11Multi-Tenancy, Governance and Self-Service

This chapter is where a pipeline stops being infrastructure and becomes a product that people choose to use.

What a tenant is

A tenant is a group of users and workloads that the platform serves as a unit, such as a business unit, a product team or an environment. Multi-tenancy means many tenants share the same pipeline while being kept apart in the ways that matter: whose data is whose, who may see what, who pays for what, and who may be affected if another tenant misbehaves.

Simple Analogy

A shared office building has many companies. They share the lobby, the lifts and the power supply, but each has its own locked door, its own meter and its own rules about visitors. Tenancy in a pipeline is the lock, the meter and the rulebook.

Identifying tenants

The platform needs a reliable tenant marker on every item of data. Common choices are a resource attribute set by the agent, a header on the incoming connection that is tied to a credential, or a naming convention that is verified by the gateway. The key principle is that tenant identity should be established by the platform from trusted information, not claimed freely by the application, otherwise one tenant could pretend to be another.

Isolation and fairness

Isolation

Data separation

Route each tenant’s data to its own storage area or partition so access control in the backend can mirror tenant boundaries.

Fairness

Rate limits

Apply per-tenant limits on volume so one noisy tenant cannot starve the others of capacity.

Safety

Blast-radius control

Dedicated pipelines or gateway pools for critical tenants keep their data flowing when others misbehave.

Money

Cost attribution

Count volume per tenant and report it, so spending is visible to the people who can change it.

Cardinality governance

Cardinality is the number of distinct combinations of attribute values for a metric. A metric labelled by user identifier can create millions of separate series, and each series costs storage and query time. High-cardinality mistakes are the most common reason for surprise bills. The platform can limit damage by removing or hashing risky attributes, by capping the number of series per tenant, and by publishing a list of the heaviest offenders so their owners can fix them at the source.

Data contracts and golden paths

A data contract is a written agreement between the platform and its users about what telemetry should look like: required resource attributes, naming rules, allowed attribute keys and size limits. A golden path is the easiest, best-supported way to do something, such as a starter template or a shared library that already has the SDK configured correctly. When the golden path is genuinely easier than the alternatives, most teams follow it voluntarily, and governance becomes a matter of convenience rather than of policing.

i
Product Thinking

Treat internal teams as customers. Publish onboarding guides, a clear support channel, a changelog, a status page and a roadmap. Measure time to first useful trace for a new service. If that number is days instead of hours, the platform has a product problem, however good its engineering is.

Showback and chargeback

Showback reports how much each tenant used, without charging. Chargeback actually bills them. Even showback alone changes behavior, because teams that can see their own volume tend to clean it up. The pipeline is a natural place to count, since all data passes through it before storage.

12Security, Privacy and Compliance

Telemetry often contains more sensitive information than people realize, so the pipeline is a security boundary and should be designed as one.

Encrypt and authenticate every hop

Every connection between SDK, agent, gateway and backend should be encrypted in transit. Where possible use mutual authentication, in which both sides prove their identity with certificates, so that only legitimate senders can submit data and only legitimate receivers can obtain it. Authentication extensions in the Collector can validate bearer tokens, certificates or other credentials at the receiving edge. Rotate credentials on a schedule and store them in a secrets manager rather than in plain configuration files.

Simple Analogy

Imagine armoured vans between bank branches. Encryption is the locked van. Mutual authentication is the guard at each end checking the other’s badge before the doors open. Without both, you only have a courier carrying cash in a backpack.

Least privilege and a small attack surface

Run Collectors as unprivileged users, with the smallest set of permissions needed. A node agent that reads container logs needs read access to log paths, not full control of the host. Use custom builds that include only the components you need, because every extra component is more code that could contain a flaw. Expose diagnostic and health endpoints only on internal interfaces.

Privacy engineering

Treat telemetry as potentially personal data. Define which attributes may never leave the region where they were produced, and use routing rules to keep such data inside the right geographic boundary. Mask or hash identifiers where the raw value is not needed. Limit retention periods per data type. Provide a process for deleting data when a legal request requires it, which means knowing where each tenant’s data physically lives.

Data residency in practice

A company operating in several regions may need European telemetry stored only in European backends. A regional gateway can tag and route data by region, forwarding only anonymized aggregates, such as span-derived metrics without user attributes, to a global store for company-wide dashboards.

Auditability

Because the pipeline can change what data looks like, changes to it must be traceable. Keep a history of who changed which rule and when, record which version of configuration each Collector is running, and keep records of access to sensitive archives. When an auditor or an incident investigator asks “what happened to this data on its way here?”, the answer should be available from records, not memory.

!
A Subtle Risk

Telemetry about security events can itself help an attacker if it leaks, since it describes system layout, internal names and error details. Apply access controls to observability data that match the sensitivity of the systems it describes.

13Observing the Pipeline Itself

The pipeline carries the evidence everyone relies on during an incident, so it needs its own instruments and its own promises.

The Collector reports on itself

The Collector exposes internal telemetry about its own behavior. This includes how many items each receiver accepted, how many each processor dropped, how many each exporter sent or failed to send, how full the sending queues are, and how much memory and CPU the process is using. These internal signals can be sent to a separate, simple, highly reliable path, deliberately different from the main one, so that you can still see problems with the pipeline when the pipeline itself is struggling.

Simple Analogy

A smoke alarm should not be powered by the same circuit as the thing it watches. If the main power fails, the alarm still needs to sound. The pipeline’s self-monitoring should use a separate route for the same reason.

The numbers worth watching

Accepted vs Refused
Receivers: are we turning data away?
Queue depth
Exporters: is a destination falling behind?
Send failures
Exporters: is data being lost?
Memory use
Process: how close to the limiter?
End-to-end delay
Freshness: how old is data when it lands?
Config version
Fleet: who is running what?

Service level objectives for a pipeline

A service level objective, or SLO, is a measurable promise about quality. For a pipeline, useful SLOs include the share of telemetry that is delivered rather than dropped, the delay between generation and availability for querying, and the availability of the ingestion endpoint. Publishing these numbers lets tenants plan around them and tells the platform team when to invest in reliability instead of features.

Canary data and end-to-end checks

Counters can look healthy while data is silently wrong. A strong technique is to inject synthetic telemetry with known content at the edge, then verify that exactly that content arrives at each destination within the expected time. This tests the whole path, including processors and routing, and catches subtle breakage that internal counters cannot see.

1

Detect

Alerts fire when refusal rates, drop counts or delays cross agreed thresholds, or when a synthetic probe fails to arrive.

2

Localize

The tier, the tenant and the component are identified from the labels on internal metrics.

3

Mitigate

The runbook is followed: shed low-priority data, scale a tier, or roll back the latest configuration.

4

Learn

The incident is reviewed, and the lesson becomes a validation rule, an alert or a limit so it cannot repeat silently.

i
Keep a Runbook

Write down, for each common failure, what the symptom looks like on the internal metrics, what the first safe action is and who decides when to shed data. During an outage nobody should be inventing policy.

14Design Patterns and Anti-Patterns

Patterns are shortcuts to decisions other teams already paid to learn; anti-patterns are the bills they paid.

Patterns that work

Pattern

Single front door

Applications know exactly one stable endpoint. Everything behind it can be reshaped without any application change.

Pattern

Safety first, shape second

Memory protection leads every pipeline, and batching ends it. Business rules live in the middle.

Pattern

Two-tier sampling

Cheap head decisions near the source, smarter tail decisions in a trace-aware gateway tier.

Pattern

Metrics before sampling

Derive statistics from the full stream first, then discard detail, so rates remain truthful.

Pattern

Layered configuration

A platform-owned base with non-negotiable safety rules, plus tenant-selectable optional layers.

Pattern

Separate monitoring path

The pipeline’s own health data travels by a different, simpler route than the data it carries.

Pattern

Dual-write migration

Send to old and new backends together for a trial period, compare, then retire the old one with no application change.

Anti-patterns to avoid

ANTI-PATTERN-01 Avoid
Problem

The team installs a single giant gateway that does everything: receives, enriches, samples, routes and exports, for all signals and all tenants, with no agents and no separation.

Why It’s Harmful

One mistake or one noisy tenant affects everyone. Stateful tail sampling competes for memory with stateless routing, and scaling for one starves the other. The gateway also becomes a single place where every change feels risky, so changes slow down.

Correct Approach

Split by responsibility and by blast radius. Use agents for local work, a stateless gateway pool for common policy, a separate stateful tier for tail sampling, and dedicated pools for critical tenants.

ANTI-PATTERN-02 Avoid
Problem

Pipelines are edited by hand on live machines whenever someone has an urgent need, and nobody records the changes.

Why It’s Harmful

Machines drift apart, nobody can say which rules are active where, and a bad edit can silently drop data for days. Recovery after an incident depends on one person’s memory.

Correct Approach

Keep every pipeline definition in version control, validate and canary each change, and make the repository the single source of truth.

ANTI-PATTERN-03 Avoid
Problem

Tail sampling is deployed behind a plain round-robin load balancer, so spans from one trace are scattered across several samplers.

Why It’s Harmful

Each sampler sees only fragments. Decisions about errors and latency are made on incomplete evidence, so valuable traces are dropped while broken partial traces are stored, and engineers lose trust in the data.

Correct Approach

Put a trace-aware load-balancing tier in front of the samplers so that all spans sharing a trace identifier reach the same instance.

ANTI-PATTERN-04 Avoid
Problem

The platform team becomes a ticket desk: every new service, every attribute rule and every dashboard request goes through a manual queue.

Why It’s Harmful

Teams wait, then give up and run their own shadow telemetry. The organization ends up with exactly the fragmentation the platform was built to prevent, plus an unused central system.

Correct Approach

Offer self-service onboarding through templates and automation, with guardrails that enforce safety automatically, and reserve human review for unusual requests.

ANTI-PATTERN-05 Avoid
Problem

The pipeline is treated as lossless and unmonitored, with no internal alerts, no limits and no known priorities for overload.

Why It’s Harmful

Data is dropped quietly, dashboards show gaps that look like application problems, and during a real incident the team discovers that the tool they rely on has been unhealthy for hours.

Correct Approach

Instrument the pipeline, publish service level objectives, define what is dropped first under pressure and test the failure behavior before it happens for real.

“A pipeline that cannot say what it dropped has already dropped something important.”

15Advantages, Disadvantages and Trade-offs

No architecture is free. A clear view of both sides helps decide whether, and how far, to go.

Advantages

  • Vendor neutrality: change or add backends without changing application code
  • Consistent data quality through shared naming and enrichment
  • Central cost control through filtering, sampling and per-tenant limits
  • Stronger privacy through one place to mask sensitive values
  • Faster onboarding for new services through golden paths
  • Resilience for applications, which hand data off and move on

Disadvantages / Trade-offs

  • A new critical system to build, run, secure and keep reliable
  • Added hops mean added delay and more places for things to break
  • A dedicated team with specialized skills is required
  • Central rules can frustrate teams who want freedom or special handling
  • Central sampling and filtering can remove data someone later needs
  • Component maturity varies, so upgrades need careful testing

Build, buy or blend

Some organizations assemble the platform entirely from open-source parts. Others buy a managed pipeline product, often built on or compatible with OpenTelemetry. Many choose a blend: open-source Collectors at the edge, a vendor or managed service for the hard central pieces. The right choice depends on team size, appetite for operating infrastructure, regulatory needs and how strongly the organization values independence from any one supplier.

ApproachControlEffortTypical fit
Self-built from open sourceHighestHighest, ongoingLarge organizations with a platform team and strict requirements
Managed or vendor pipelineMediumLowerTeams that want to focus on products rather than plumbing
BlendedMedium to highMediumOrganizations that want an exit option and fast results
i
A Test for Over-Engineering

If the platform team spends more time operating the pipeline than application teams spend benefiting from it, the design is too heavy for the organization. Start with the smallest topology that solves a named problem and add pieces only as problems appear.

16Real-World Scenarios

The following are composite scenarios, built from common patterns reported across the industry, to show how the ideas combine in practice.

Scenario 1 — Switching vendors without a freeze

A company wants to move from one commercial observability vendor to another. Because every service sends OTLP to the single front door, the platform team adds a second exporter in the gateway, runs both vendors in parallel for several weeks, lets teams compare dashboards and alerts, and then removes the old exporter. No application team files a ticket, and no release is delayed.

Scenario 2 — Taming a surprise bill

Monthly spend doubles. Per-tenant volume reports from the pipeline show that one service started emitting a metric labelled by user identifier. The platform team hashes and then removes the attribute at the gateway as an immediate measure, notifies the owning team with evidence, and adds a cardinality cap so the problem cannot recur unnoticed.

Scenario 3 — Keeping regulated data in its region

A financial services firm must keep customer-linked telemetry inside certain countries. Regional gateways tag and route detailed data to local stores, while only span-derived metrics without personal attributes flow to a global store. Auditors review the routing rules in version control and the access logs for each region.

Scenario 4 — Legacy applications join the platform

Dozens of older applications write plain text log files and cannot be changed quickly. Node agents read those files, parse them, add resource attributes and forward them as structured records beside modern services. The old estate becomes searchable with the same fields as the new one, and modernization can proceed at its own pace.

Scenario 5 — Surviving a backend outage

A trace store goes down for ninety minutes during a busy evening. Gateways queue data, refuse excess load back to agents, and agents drop the lowest-priority data according to the written order. When the store recovers, queues drain, and the platform’s own dashboards show exactly how much data was delayed and how much was dropped, so the incident report is based on numbers rather than guesses.

Scenario 6 — Seasonal traffic peaks

An online retailer expects ten times normal traffic during a sale. Weeks earlier the platform team load-tests the pipeline, raises limits for critical checkout services, tightens sampling for low-value browsing traffic, scales the gateway pool in advance and pre-agrees which data to shed first. The sale passes with complete error traces for checkout and acceptable gaps elsewhere.

17A Maturity Roadmap

Nobody builds the whole platform at once. A staged path keeps each step useful and affordable.

1

Stage 1 — Standardize emission

Agree on OpenTelemetry SDKs, OTLP and a minimal set of required resource attributes. Teams may still send directly to a backend, but the data now has a common shape.

2

Stage 2 — Introduce agents

Deploy node-level Collectors with memory protection, batching and basic enrichment. Applications begin to send to a local address, and host and log collection come online.

3

Stage 3 — Add the gateway

Place a gateway tier behind a stable address. Move routing, redaction and multi-backend export there. The first real benefit appears: backends become swappable.

4

Stage 4 — Shape and sample

Add derived metrics, filtering and tail sampling in a trace-aware tier. Costs become predictable, and the data starts to reflect what matters.

5

Stage 5 — Govern and automate

Introduce tenancy, limits, showback, configuration as code, canary rollouts and fleet management. The pipeline begins to operate like a product.

6

Stage 6 — Optimize and extend

Publish service level objectives, run synthetic probes, add buffering where justified and extend to new signals as they mature, always measuring benefit against operating cost.

flowchart LR
  S1["Stage 1 Standard data"] --> S2["Stage 2 Agents"]
  S2 --> S3["Stage 3 Gateway"]
  S3 --> S4["Stage 4 Shape and sample"]
  S4 --> S5["Stage 5 Govern and automate"]
  S5 --> S6["Stage 6 Optimize and extend"]
        
FIG 8 — A staged path from standardized data to a governed, product-like platform
!
Skipping Ahead

Teams that jump to advanced sampling or multi-tenancy before they have stable agents, a gateway and basic monitoring usually spend months debugging problems that earlier stages would have prevented. Each stage creates the foundation the next one stands on.

18Best Practices and Common Mistakes

A short checklist of habits that separate calm platforms from chaotic ones.

Best Practices

  • Make applications depend only on OTLP and one stable address
  • Put memory protection first and batching last in every pipeline
  • Require a minimum set of resource attributes on all data
  • Compute derived metrics before sampling
  • Test every configuration change with sample data before rollout
  • Canary changes and keep one-step rollback available
  • Publish per-tenant volume and cost reports
  • Monitor the pipeline on a separate path with its own alerts

Common Mistakes

  • Using very large queues instead of fixing slow destinations
  • Adding exporters casually and multiplying outgoing traffic
  • Letting applications claim their own tenant identity
  • Allowing unbounded attribute values on metrics
  • Sampling before counting, which makes metrics wrong
  • Scaling stateful tiers during busy periods without preparation
  • Upgrading Collector versions without reading release notes on component stability
  • Never rehearsing what happens when the pipeline is overloaded

Upgrades and stability levels

OpenTelemetry components carry stability labels that range from experimental to stable. A platform should prefer stable components for the critical path and confine experimental ones to limited, well-watched areas. Because individual component names and settings sometimes change between releases, read the release notes before each upgrade, test in a staging environment that carries realistic traffic, and upgrade the fleet gradually. The pace of change in the project is a strength, but it requires discipline from anyone who depends on it.

Capacity planning in plain terms

Estimate how many items per second arrive at each tier at normal and peak times, how large each item is on average, how long you want to survive a destination outage, and how much headroom you want. From those four numbers you can size memory for queues, disk for persistent buffers and instance counts for each tier. Revisit the estimates after every large product launch, because traffic and telemetry volume rarely grow at the same rate.

i
Rehearse Failure

Schedule regular game days in a staging environment. Cut a backend, flood a tenant, kill a gateway, apply a faulty configuration and watch whether the written priorities, alerts and rollbacks work as designed. A plan that has never been tried is a hope, not a plan.

19Frequently Asked Questions

Quick answers to the questions that usually come up first.

Q1Is “Observability Pipeline as a Platform” an official OpenTelemetry product?

No. It is an architectural and organizational approach. OpenTelemetry provides the standard building blocks, such as the specification, OTLP, SDKs and the Collector. The platform is what an organization creates by combining those blocks with shared operations, governance and a dedicated team.

Q2Do I always need a Collector?

Not for small experiments, where an SDK can send straight to a backend. As soon as you need central policy, several backends, reliable buffering, privacy controls or cost control, a Collector becomes the natural place to provide them.

Q3What is the difference between an agent and a gateway?

An agent runs close to workloads, on the same node or inside the same pod, and handles local jobs such as buffering and host data. A gateway is a central pool that receives from many agents and applies shared policy such as routing, sampling and multi-backend export.

Q4Why can’t I just use a normal load balancer for tail sampling?

Because all spans of one trace must reach the same sampler. A plain load balancer spreads spans across instances, so each sees only part of each trace. A trace-aware balancing tier hashes by trace identifier to keep traces together.

Q5Will the pipeline slow down my applications?

It should not. SDKs buffer in memory and send in the background, and agents on the same node add very little delay. The design rule is that if the pipeline is overloaded, data is delayed or dropped rather than user requests being blocked.

Q6How do I avoid losing data during an outage?

Use sending queues with sensible sizes, consider persistent queues on disk for important signals, and for demanding cases place a durable message queue between tiers. Also decide in advance which data may be dropped first, since no buffer is infinite.

Q7Is it safe to rely on the pipeline to remove sensitive data?

It is an excellent safety net but not a complete defense. Combine pipeline redaction with developer guidance, code review, tests and periodic checks of real stored data to confirm that rules actually catch what they should.

Q8How big should the platform team be?

It depends on the scale and ambition. A small team can run a modest agent-and-gateway design with strong automation. Large multi-tenant, multi-region platforms need more people for reliability, support and governance. Automation, templates and self-service are what let a small team serve many.

Q9Can I keep using my existing metrics and logging formats?

Often yes. The Collector has receivers for many older formats and exporters for many destinations, so it can translate between them. This lets you adopt the common pipeline first and migrate application instrumentation gradually.

Q10How do I know the platform is working well?

Look at both sides. Technically, track delivery rate, drop counts, delay and availability against published objectives. For users, track how long a new service takes to get its first useful trace, how often teams bypass the platform and how satisfied they say they are.

Q11What changes quickly in this area, and where should I check for current details?

Component stability levels, the status of newer signals such as profiles, support for fleet management and configuration features all evolve quickly. Treat the official OpenTelemetry documentation and release notes as the source of truth for current names, settings and maturity before you commit to a design.

20Summary and Key Takeaways

An observability pipeline as a platform turns telemetry from a private chore of each team into a shared, reliable service. OpenTelemetry supplies the common language and the Collector that moves and shapes data, and the platform adds the human side: a team that owns quality, cost, security and uptime, and an experience that makes the right thing the easy thing. Like the postal service in the opening picture, its value is not in any single letter but in the fact that every letter, from every household, can travel by the same trusted route, be tracked and arrive where it should.

The journey is incremental. Start by standardizing how data is produced, add agents for local safety and context, introduce a gateway for central policy and flexibility, then layer on sampling, governance and automation as real needs appear. At each step, measure the benefit and watch the operating cost, and always make sure the pipeline observes itself.

Key Takeaways

  • It is an approach, not a product — OpenTelemetry provides the standard parts; the platform is those parts plus ownership, governance and self-service.
  • Applications should know only OTLP and one stable address — everything behind it can then change without redeploying a single service.
  • Agent plus gateway is the usual shape — agents handle local, cheap jobs; gateways handle central policy such as routing, redaction and sampling.
  • Tail sampling needs trace affinity — hash by trace identifier so every span of a trace reaches the same sampler, and compute derived metrics before sampling.
  • Reliability is designed, not hoped for — memory protection, sized queues, back-pressure, optional buffering and written drop priorities keep the pipeline from harming what it observes.
  • Govern like a product — tenants, limits, data contracts, golden paths and showback reports keep quality and cost under control without a ticket queue.
  • Watch the pipe itself — publish objectives, monitor on a separate path, run synthetic probes and rehearse failures regularly.