What is OpenTelemetry? OpenTelemetry, often shortened to OTel, is a vendor-neutral open source observability framework for instrumenting, generating, collecting, and exporting telemetry data. The official OpenTelemetry documentation describes a project that spans APIs, SDKs, semantic conventions, context propagation, the OpenTelemetry Protocol, the Collector, and exporters. CNCF lists OpenTelemetry as a Graduated project on its project page.
That scope matters. OpenTelemetry is not just a tracing library, and it is not an observability backend. It does not store long-term telemetry, run your query language, build your dashboards, define your incident workflow, or own your alert routing. Those responsibilities still sit with observability backends and operational tooling.
A practical mental model is the telemetry pipeline:
instrument → correlate → collect → process → export → analyze
Application code, libraries, agents, or runtime instrumentation create telemetry. Context propagation links work across service and messaging boundaries. Semantic conventions make the resulting data more consistent. OTLP moves telemetry between components. The Collector receives, processes, and exports it. Backends store, query, visualize, and alert on it.
Callout: OpenTelemetry standardizes telemetry production and movement; the backend still handles storage, query, dashboards, alerting, retention, and incident workflows.
Thinking in pipeline terms prevents a common failure mode: teams instrument a few services, see spans arriving somewhere, and assume they have solved observability. More precisely, they have solved one layer: data production. The harder production problem is consistent, correlated, governable telemetry across services, teams, runtimes, and backends. That is practitioner inference based on the architectural boundary described in the OpenTelemetry documentation.
OpenTelemetry is easier to reason about when you separate three architectures:
| Misconception | Better framing | Practical consequence |
|---|---|---|
| “OpenTelemetry is tracing.” | OpenTelemetry supports multiple telemetry signals, including traces, metrics, and logs, as described in the official docs. | Do not design the rollout as “add traces everywhere” only. Plan how traces, metrics, and logs should share resource identity and correlation context. |
| “The Collector is the backend.” | The OpenTelemetry Collector is a vendor-agnostic proxy that receives, processes, and exports telemetry. | You still need a backend for storage, querying, dashboards, alerting, and workflows. |
| “OTLP makes backend choice irrelevant.” | OTLP and semantic conventions improve interoperability; backend data models, query semantics, dashboards, and alerting behavior can still differ. | Treat portability as a spectrum, not a guarantee. Standardize what OTel can standardize and document backend-specific assumptions. |
The third point is worth stressing. OpenTelemetry can reduce the amount of backend-specific code inside services. It does not make every backend operationally equivalent. That would be an overclaim.
A signal is a category of telemetry data produced by an instrumented system. In day-to-day cloud-native instrumentation, teams most often reason about traces, metrics, and logs. Baggage is different: it is propagated context, not an event stream, but it affects correlation and governance decisions.
| Category | What it shows | Best use | Common risk | Correlation mechanism |
|---|---|---|---|---|
| Trace | A request or workflow path across services, composed of spans | Debugging latency, dependency behavior, retries, cross-service failures | Too many low-value spans or missing business context | Trace ID, span ID, parent-child relationships, or links depending on the pattern |
| Metric | Aggregated measurements over time | SLOs, trends, saturation, alerting | High-cardinality labels and misleading aggregation | Resource attributes; exemplars can connect observations to trace/span context |
| Log | Timestamped event record | Local detail, errors, audit-style evidence, debugging | Noise, cost, sensitive data exposure | Logs can carry trace ID and span ID |
| Baggage / propagated context | Contextual key-value data propagated across boundaries | Passing limited execution context | Privacy, size, consistency, and governance issues | Propagated context |
Traces answer “what path did this work take?” Metrics answer “how is this behavior changing over time?” Logs answer “what happened here at this moment?” Baggage can be useful, but teams should avoid turning it into an uncontrolled metadata bus. That governance caution is practitioner inference, not a claim from the OpenTelemetry specification.
Correlation is the point. An incident path might start from a metric alert, jump through an exemplar to a trace, then inspect logs that include the same trace ID and span ID. OpenTelemetry supports these correlation mechanisms, but backends may expose them differently.
The OpenTelemetry components model separates the API from the SDK.
The API defines public interfaces used by instrumentation code. A library can call the tracing or metrics API without deciding which backend receives the data.
The SDK implements runtime behavior: configuration, resources, processors, exporters, sampling, and signal-specific handling. Application owners still need to configure SDK behavior: service identity, environment metadata, exporter or Collector endpoint, sampling defaults, and signal-specific settings.
This split is one reason OpenTelemetry is better understood as a standardization layer than a single library.
Teams commonly evaluate a mix of automatic and manual instrumentation. The following table is a non-authoritative heuristic, not company reference architecture and not a claim about any specific language, framework, runtime, or instrumentation package. Verify behavior against the instrumentation you actually deploy and have your platform team define defaults.
| Examples teams commonly evaluate from automatic instrumentation | Examples teams commonly evaluate for manual instrumentation |
|---|---|
| Baseline request or client spans where a supported framework integration exists | Domain-relevant spans around operations engineers investigate during incidents |
| Baseline context propagation where the runtime integration supports it | Context at boundaries that are not well represented by automatic instrumentation |
| Runtime or library metrics where supported | Safe, low-cardinality attributes that explain business or operational meaning |
| Log correlation support where available | Span names and attributes that match how the service team debugs the system |
Manual instrumentation should not mean wrapping every function. It usually works better when focused on boundaries that matter during incidents: handoffs, external calls, expensive operations, retries, cache behavior, and domain identifiers that are safe and low-cardinality. That is practical guidance, not an OpenTelemetry requirement.
A Resource describes the entity producing telemetry: a service, process, container, pod, node, cloud environment, or other runtime entity, depending on available attributes. An attribute is key-value metadata attached to telemetry. OpenTelemetry documents Resource concepts and semantic conventions in its official documentation and semantic conventions.
Attributes are powerful because they make telemetry searchable and groupable. They also need governance. High-cardinality values, inconsistent names, and sensitive fields can create operational, cost, privacy, and compliance-review concerns. Security/privacy review: any plan to propagate sensitive identifiers, user data, tokens, payload fragments, or regulated data through attributes, baggage, or logs should be reviewed before rollout.
Semantic conventions define common attributes, span names and kinds, metric instruments and units, and resource conventions. The value is not aesthetic consistency. It is making independently instrumented systems more comparable.
For cloud-native systems, teams often evaluate which resource identity fields should be centrally standardized and which should remain service-owned. The exact defaults, approved metadata sources, and exception process should be defined by the platform team or observability owners.
| Candidates for central standardization | Service-owned instrumentation |
|---|---|
service.name pattern |
Domain span names |
| Environment names | Safe custom attributes |
| Deployment identifiers | Business-operation boundaries |
| Cluster, namespace, region | Useful log and metric context |
| Ownership metadata, if approved | Error classification and retry context |
| Kubernetes metadata policy | Domain-specific metric dimensions |
Illustrative anti-patterns:
| Same concept represented as | Why it can hurt |
|---|---|
checkout, checkout-api, checkout_service, prod-checkout |
Can fragment service views and make grouping unreliable |
env=prod, environment=production, stage=prd |
Can break dashboards and filters that assume one convention |
| Arbitrary Kubernetes labels copied into metrics | Can create cardinality and time-series continuity problems |
The last point is a caution, not a universal rule. Kubernetes metadata is useful, but unbounded labels and annotations need governance.
Context propagation carries execution-scoped values across API and process boundaries. Trace context lets downstream spans become part of the same trace instead of appearing as unrelated local observations. OpenTelemetry covers propagation as part of its core concepts.
This matters most where work crosses boundaries: frontends, API gateways, service meshes, HTTP clients, gRPC clients, async queues, workers, and Kubernetes-hosted microservices. Broken propagation creates orphan spans. The backend may receive telemetry, but it cannot reconstruct a coherent request path.
For some messaging patterns, the relationship may be represented with a span link rather than a strict parent-child relationship. The essential point is that the consumer extracts propagated context from the message and records telemetry with that context; a response from the consumer back to the producer is not required for correlation.
Callout: If context is not propagated, the backend may receive spans but not a coherent trace.
Baggage can propagate additional key-value context, but teams should govern it carefully. Treat baggage as a constrained mechanism for context, not a general-purpose place to store request metadata. Messaging propagation deserves extra care because behavior can vary by language, library, and broker integration.
OTLP is the OpenTelemetry Protocol. The official docs describe it as designed with OpenTelemetry data types in mind. It is commonly used between SDKs, agents, Collectors, and compatible backends.
OTLP helps reduce the need for every service to speak every backend’s proprietary ingestion protocol. A service can export OTLP to a Collector; the Collector can then export OTLP or use a backend-specific exporter.
| Standard transport | Backend-specific behavior |
|---|---|
| OTLP payloads | Storage and retention |
| Signal data model concepts | Query language |
| Export path | Dashboard model |
| Collector integration | Alerting semantics |
| Common ingestion contract | Correlation workflows |
OTLP is transport standardization, not full operational portability. Exporters still matter because production pipelines may need more than one destination, different backend ingestion paths, or another Collector tier.
The OpenTelemetry Collector is a vendor-agnostic proxy that can receive, process, and export telemetry data. In some architectures, it becomes a control point between application instrumentation and observability backends. That is a pattern to evaluate, not a universal requirement.
Collector pipelines define the path telemetry follows, as described in the Collector architecture documentation:
The Collector can let platform teams move some pipeline configuration out of every application process and into managed infrastructure. Exact component choices, authentication, authorization, tenancy rules, and failure-handling defaults should be defined by your platform team and verified against the Collector distribution you deploy. Security/privacy review: Collector configuration that handles sensitive telemetry, tenant boundaries, credentials, or access-control behavior should be reviewed like production infrastructure code.
| Responsibility | Application SDK | Collector | Backend |
|---|---|---|---|
| Create spans, metrics, logs | Yes | No | No |
| Attach domain context | Yes | Limited | No |
| Add environment/resource metadata | Yes, depending on configuration | Possible, depending on configured components | Sometimes |
| Apply pipeline processing policy | Sometimes | Possible, depending on configured components | Sometimes |
| Export telemetry onward | Yes | Yes | Not usually the primary role |
| Store and query telemetry | No | No | Yes |
| Dashboards and alerts | No | No | Yes |
The Collector can operate on telemetry already emitted into the pipeline. It cannot infer every missing business context. If a service never records that a payment authorization was retried, the Collector cannot reliably invent that domain fact later.
The Collector components documentation defines the vocabulary you will see in real configurations.
| Component | Role |
|---|---|
| Receiver | Ingests telemetry from SDKs, agents, other Collectors, or compatible sources |
| Processor | Operates on telemetry after receipt and before export |
| Exporter | Sends telemetry to one or more destinations, including a backend or another Collector |
| Connector | Acts as an exporter for one pipeline and a receiver for another |
| Extension | Provides capabilities not directly part of telemetry pipelines, depending on the configured extension |
Shape only, not runnable production config:
receivers -> processors -> exporters
example trace pipeline shape:
receive OTLP
optionally process telemetry
export to <backend-endpoint> or another Collector
This is intentionally not YAML. Production Collector configuration depends on component versions, endpoints, protocols, TLS, authentication, authorization, resource limits, and backend behavior. Verify exact behavior against current Collector docs and route security-sensitive examples through review.
Collector deployment is a topology decision, not a religion. Official docs describe agent and gateway patterns, and the OpenTelemetry Collector Helm chart can install a Collector as a Deployment, DaemonSet, or StatefulSet. The gateway deployment pattern is one documented shape.
| Pattern | Strengths | Tradeoffs |
|---|---|---|
| Sidecar/local agent | Close to workload; can reduce direct app coupling to remote backends | More per-workload operational overhead; rollout complexity |
| DaemonSet-style local collection | Node-local collection; useful for Kubernetes node/pod/runtime context | Node-level blast radius; resource contention needs management |
| Gateway | Centralized pipeline configuration and egress control | Adds network hop and centralized dependency |
| Hybrid | Local collection plus gateway policy layer | More moving parts, but clearer separation of local context and central governance |
Some systems evaluate a hybrid: local collection near workloads, then a gateway Collector for shared policy and export. That is a design option, not a universal recommendation. Evaluate topology using blast radius, operational ownership, network paths, resource limits, tenancy boundaries, config rollout, and failure behavior.
For teams designing this inside Kubernetes, the Kubernetes primitives behind scheduling, DaemonSets, Deployments, and service discovery are worth understanding first; see Kubernetes Explained: Core Concepts Every Engineering Team Should Know. For broader operating-model questions, a paved-road approach can help separate platform defaults from service-team exceptions; see Cloud-Native Development Operating Model: Paved Road + Explicit Exceptions.
There is no universal placement rule for telemetry processing. The right answer depends on signal type, latency tolerance, compliance needs, backend economics, and whether a decision requires local context or broader pipeline visibility. Because approved processor lists and organization-specific placement guidance vary, this article does not prescribe where specific operations should live.
Use architecture-review questions instead:
| Question | Why it matters |
|---|---|
| Should this decision happen before telemetry leaves the process, near the workload, in a shared Collector tier, or in the backend? | Placement changes failure modes, ownership, and what context is available. |
| Is the decision signal-specific? | Traces, metrics, logs, and baggage have different data shapes and operational risks. |
| Does the decision require domain context only the service has? | Missing domain context is hard to reconstruct later in the pipeline. |
| Does the decision affect sensitive data, tenancy, credentials, or access control? | These choices require security and privacy review before rollout. |
| What happens when export fails or a downstream backend slows down? | Failure behavior should be designed and monitored, not discovered during an incident. |
| Which team owns the configuration and exception process? | Centralized control without clear ownership turns telemetry pipelines into shared-state infrastructure risk. |
Sensitive fields deserve special handling. Removing secrets after collection is weaker than not recording them in the first place, because the data has already entered at least part of the telemetry path. Security/privacy review: examples involving user identifiers, tokens, payloads, regulated data, tenant routing, or authorization behavior should be reviewed before publication or rollout.
Cost is part of this architecture review, too. Telemetry volume, label cardinality, retention choices, indexing behavior, and backend query patterns can all affect observability spend. For a broader cost-aware design framework, see Cloud Economics in Architecture Review: Cost-Aware Design Framework.
Exporters send telemetry from an SDK or Collector to a destination: an observability backend, another Collector, or another compatible endpoint. They are the bridge between the standardized OTel pipeline and backend-specific ingestion paths.
OpenTelemetry improves interoperability by standardizing instrumentation APIs, SDK behavior concepts, semantic conventions, OTLP, Collector pipelines, and exporter interfaces. That reduces backend-specific instrumentation code in services, while leaving backend query and alert semantics outside OTel’s scope.
Backend portability is a spectrum:
| More standardized by OpenTelemetry | More backend-specific |
|---|---|
| Instrumentation API | Query language |
| Resource and attribute conventions | Dashboard definitions |
| Trace/span concepts | Alerting semantics |
| OTLP transport | Retention and indexing model |
| Collector pipeline shape | Correlation workflows |
| Export contracts | Operational habits and runbooks |
A practical approach is to standardize what OpenTelemetry can standardize, then document backend assumptions explicitly. It is usually easier to move instrumentation and pipeline configuration than to move years of dashboards, alerts, queries, and team workflows. That statement is an inference, but it matches the portability boundary implied by OpenTelemetry’s scope.
The following is a short planning checklist, not an official methodology and not company-approved reference architecture.
| Owner | Responsibilities to define |
|---|---|
| Platform team | Shared conventions, Collector topology, SDK defaults, exporter policy, review process |
| Service team | Domain spans, safe attributes, instrumentation quality, service-specific signal usefulness |
| Backend/tooling team | Storage, query, dashboards, alerts, retention, incident workflow integration |
These are practical cautions, not claims from a specific incident dataset.
| Mistake | Symptom | Pipeline layer affected | Mitigation |
|---|---|---|---|
| Collecting before naming standards | Fragmented service and environment views | Instrument, collect, analyze | Standardize resource attributes early |
| Relying only on auto-instrumentation | Traces exist but lack operational meaning | Instrument | Add domain spans and safe attributes where automatic coverage is insufficient |
| Adding unbounded attributes | High-cardinality metrics, noisy queries, unstable grouping | Instrument, process, analyze | Review attribute policy; avoid request IDs, user IDs, and arbitrary labels as dimensions unless justified |
| Recording sensitive data | Data spreads across pipelines and backends | Instrument, export, analyze | Prevent at source; review privacy/security controls |
| Treating Collector config as a dumping ground | Fragile ownership and risky changes | Collect, process, export | Govern config like production code |
| Assuming exporters make backends interchangeable | Migration pain in dashboards, alerts, and queries | Export, analyze | Document backend-specific assumptions |
| Validating success by ingestion volume | Lots of data, weak incident workflows | Entire pipeline | Test whether engineers can answer: what changed, where did it fail, who owns it, and what evidence correlates? |
Noise, cost exposure, and privacy exposure can be introduced at instrumentation time, amplified in the Collector, and surfaced only later in backend operations. Treat telemetry quality as a pipeline property, not just a backend concern.
OpenTelemetry is a vendor-neutral standardization layer for cloud-native telemetry. The outcome to aim for is not merely “more spans.” It is telemetry that is consistent enough to compare, correlated enough to debug, and governed enough to operate across teams.
The Collector gives platform teams a control point to evaluate, but it does not replace service-owned instrumentation. OTLP, semantic conventions, and exporters improve interoperability, while backend storage, query, dashboards, alerts, and workflows remain outside OpenTelemetry’s scope.
If you remember one thing, remember the pipeline:
Instrument close to the code. Correlate across boundaries. Collect and process through governed pipelines. Export through explicit contracts. Analyze in backends built for storage, query, visualization, and alerting.
Use this checklist before broad rollout:
service.name, environment, deployment, cluster, namespace, and ownership metadata?Standardize shared conventions and pipelines centrally. Keep domain instrumentation close to the teams that understand the service. Treat telemetry quality as part of production engineering, not as an afterthought once data reaches a dashboard.
Founder & CEO
OpenTelemetry is best understood as a standard telemetry pipeline: APIs and SDKs create signals, context propagation links work across services, semantic conventions make data consistent, OTLP transports it, Collectors process it, and exporters deliver it to observability backends.
Coding-agent cost is not mainly the price of one clever prompt. It is the recurring cost of moving repository state, tool output, and loop history through paid models until useful work is accepted. Gateway observability makes that spend attributable and governable, while agent-loop discipline determines how much context gets sent.
Tool-using AI agents need more than prompt guidance. If an action can create a real side effect, enforcement should live in executable policy that can allow, deny, stop, or escalate before the tool call happens.
A practical way to distinguish DevOps, Platform Engineering, and SRE by responsibility instead of buzzword: collaboration, paved roads, and explicit reliability ownership.