Glossary
Glossary

What Is OTLP (OpenTelemetry Protocol)?

By Sazabi Team

Last verified on Nov 8, 2026.

OTLP, the OpenTelemetry Protocol, is the wire format OpenTelemetry uses to send traces, metrics, and logs from an application or Collector to a backend. The spec is stable for all three signals. If a tool says it accepts OTLP, you can point any OpenTelemetry SDK at it without a custom exporter.

Transports and Ports

OTLP has two transports, and a server may accept both.

TransportDefault portPayload
OTLP/gRPC4317Protobuf over gRPC
OTLP/HTTP4318Protobuf (binary or JSON-encoded) over HTTP POST

OTLP/HTTP sets Content-Type: application/x-protobuf for binary Protobuf and application/json for JSON-encoded Protobuf. The client may gzip the body, in which case it must send Content-Encoding: gzip.

HTTP Paths

Each signal posts to its own path, appended to the base URL:

SignalDefault path
Traces/v1/traces
Metrics/v1/metrics
Logs/v1/logs

So a base of https://collector.example.com:4318 receives traces at https://collector.example.com:4318/v1/traces.

Configuring an Exporter

SDKs read standard environment variables. OTEL_EXPORTER_OTLP_ENDPOINT sets one endpoint for every signal, and OTEL_EXPORTER_OTLP_PROTOCOL picks grpc, http/protobuf, or http/json. The default is SDK-dependent, typically http/protobuf or grpc. Signal-specific variables override the shared one:

export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4318/v1/traces

Note the difference: with a signal-specific variable you give the full URL including the path, while for the shared variable the SDK adds /v1/traces and the other paths itself in HTTP mode. For gRPC, the docs say not to append signal paths at all, because the exporter uses the protobuf service method for each signal.

OTLP Errors and Retries

The spec splits server errors into two groups. Retryable errors mean the server could not process the data right now, and the client may retry the same data. Non-retryable errors, such as a request that cannot be deserialized, mean the client must drop that data. For HTTP, an overloaded server should answer 429 Too Many Requests or 503 Service Unavailable. A server can also accept part of a batch: it fills in partial_success, and the client must not retry that request.

Common Problems

  • Wrong port or protocol. Port 4317 speaks gRPC and 4318 speaks HTTP by default, so sending one protocol to the other port will not work. Match the protocol variable to the port.
  • Wrong path. A signal-specific variable takes the full URL, so a base URL with no /v1/traces sends spans to the wrong place. The shared variable does the opposite: give it only the base, or the path gets doubled.
  • Dropped batches. Non-retryable responses mean data is gone, so watch your SDK's exporter logs.
  • Nothing in the backend. Confirm the URL and protocol first, then send one request end to end. The OpenTelemetry docs recommend a Collector next to your service because it handles retries, batching, and encryption.

OTLP in Sazabi

Sazabi, an AI-native observability and security platform, acts as an OTLP/HTTP destination. For traces, set OTEL_EXPORTER_OTLP_TRACES_ENDPOINT to the intake URL copied from your project, which already ends in /v1/traces, and set OTEL_EXPORTER_OTLP_TRACES_PROTOCOL to http/protobuf. Sazabi ingests OpenTelemetry metrics (Prometheus metrics through an OpenTelemetry Collector) and OTLP traces through the same intake as your logs. It stores each metric data point and each span as a log record that its agent queries alongside your logs, so there is no separate metrics store to run. From a Collector, add an otlphttp exporter. The OpenTelemetry traces integration walks through it.

Frequently Asked Questions

What does OTLP stand for?

OpenTelemetry Protocol. It is the standard wire format OpenTelemetry uses to send traces, metrics, and logs from an application or Collector to a backend.

What is the default OTLP port?

Port 4317 for OTLP over gRPC and port 4318 for OTLP over HTTP.

What is the OTLP HTTP endpoint path?

By default /v1/traces for traces, /v1/metrics for metrics, and /v1/logs for logs, sent with HTTP POST. For example https://example.com/v1/traces.

Should I use OTLP gRPC or OTLP HTTP?

Both carry the same data, so use whichever your backend accepts. The Sazabi intake, for example, takes OTLP/HTTP with protobuf. The default varies by SDK, so set the protocol explicitly.

Sources

  1. OTLP over gRPC uses port 4317 and over HTTP uses port 4318; HTTP paths are /v1/traces, /v1/metrics, and /v1/logs; payloads are binary or JSON-encoded Protobuf with application/x-protobuf or application/json; gzip is allowed; stable for traces, metrics, and logs; retryable and non-retryable errors; partial success; 429 and 503 for overload (accessed Nov 8, 2026)
  2. OTLP is short for OpenTelemetry Protocol (accessed Nov 8, 2026)
  3. OTEL_EXPORTER_OTLP_ENDPOINT and OTEL_EXPORTER_OTLP_PROTOCOL configure the exporter; values are grpc, http/protobuf, and http/json; do not append /v1/traces to gRPC endpoints; signal-specific variables such as OTEL_EXPORTER_OTLP_TRACES_ENDPOINT override the shared one (accessed Nov 8, 2026)
  4. OpenTelemetry includes a standard protocol that defines the shape of telemetry data (accessed Nov 8, 2026)
  5. The Collector receives, processes, and exports telemetry and supports OTLP among other formats (accessed Nov 8, 2026)
  6. Sazabi traces intake uses OTEL_EXPORTER_OTLP_TRACES_ENDPOINT with the full intake URL ending in /v1/traces and the http/protobuf protocol (accessed Nov 8, 2026)
  7. Sazabi acts as an OTLP/HTTP destination for the Collector via an otlphttp exporter (accessed Nov 8, 2026)