
- Reduces duplicate exporters and agents.
- Standardizes telemetry signals (traces, metrics, logs).
- Decouples instrumentation from destination choices using a neutral wire format.
- Enables the OpenTelemetry Collector to receive, process, and forward telemetry to any backend.
- Prometheus: text-based exposition format (moving toward OpenMetrics).
- Jaeger: originally Apache Thrift (UDP), later gRPC + Protobuf.
- Zipkin: Thrift and JSON.
- OpenCensus: Protobuf-based wire format.


- A wire protocol: defines how telemetry is structured and transmitted over the network (application-layer protocol).
- A data model: trace, metric, and log message schemas encoded with Protocol Buffers (Protobuf).
- A transport specification: commonly uses gRPC or HTTP, with defined compression, batching, and error-handling semantics.

OTLP is signal-agnostic: the same structural approach applies to traces, metrics, and logs. Typical transports are gRPC (preferred) and HTTP (Protobuf over HTTP; some mappings support JSON).
- Traces: spans representing operations and distributed request flows.
- Metrics: numerical measurements like counters, gauges, and histograms.
- Logs: timestamped event records with severity and structured fields.

- Resource — describes the entity producing telemetry (service name, host, deployment, etc.).
- Instrumentation Scope — identifies the library or instrumentation (name + version) that generated the signal.
- Signal Data — the actual spans, metric points, or log records.
- Set at initialization (TracerProvider, MeterProvider) and treated as immutable for emitted telemetry.
- Typical attributes:
service.name,service.version,host.name,k8s.namespace.name, cloud metadata, etc.
- Ties telemetry to the library or module that produced it (
name+version). - Useful for slicing by library usage, finding regressions, or tracking adoption.


- Traces: collections of spans (traceId, spanId, timestamps, kind, attributes, events).
- Metrics: data points with timestamps, values, and aggregation metadata.
- Logs: structured log records with severity, timestamp, and attributes.

- OTLP structures are compiled to Protobuf messages and serialized into compact binary form.
- Protobuf yields smaller payloads and faster parsing than text formats.
- Protobuf supports schema evolution: new optional fields can be added without breaking older clients (unknown fields are ignored).
| Transport | Typical Encoding | Use Cases |
|---|---|---|
| gRPC | Protobuf (binary) | Preferred for high-throughput, low-latency telemetry (supports streaming, deadlines, and built-in compression). |
| HTTP | Protobuf over HTTP (or JSON in some mappings) | Simpler setups, easier to route through HTTP infrastructure or when gRPC is not available. |
- Prefer gRPC for production telemetry if your stack supports it.
- Attach stable resource attributes (
service.name,service.version) at startup to ensure consistent attribution. - Use the OpenTelemetry Collector to centralize processing (batching, sampling, enrichment) and flexible export to backends.
- Instrumentation scopes help identify problematic libraries and track upgrades or regressions.
When designing telemetry pipelines, avoid embedding volatile identifiers (like pod names) as the only way to identify a service — rely on stable resource attributes (e.g.,
service.name) and add volatile metadata separately if needed.