Cloud

otlp_grpc

Send OpenTelemetry traces, logs, and metrics via OTLP/gRPC protocol.

Sends OpenTelemetry telemetry data to a remote collector via OTLP/gRPC protocol.

Accepts batches of Redpanda OTEL v1 messages (spans, log records, or metrics) and converts them to OTLP format for transmission to OpenTelemetry collectors.

Input format

This output expects messages in Redpanda OTEL v1 format (protobuf or JSON, detected automatically) with the following metadata:

  • otel_signal_type: The signal type (trace, log, or metric)

Messages produced by the otlp_grpc and otlp_http inputs already include this metadata.

Each batch must contain messages of the same signal type. The entire batch is converted to a single OTLP export request and sent via gRPC.

Authentication

This output supports OAuth v2 authentication using the oauth2 configuration block. OAuth v2 requires TLS to be enabled.

To send a static bearer token, add an authorization header using the headers field.

  • Common

  • Advanced

output:
  label: ""
  otlp_grpc:
    endpoint: "" # No default (required)
    max_in_flight: 64
output:
  label: ""
  otlp_grpc:
    endpoint: "" # No default (required)
    headers: {}
    timeout: 30s
    compression: gzip
    tls:
      enabled: false
      skip_cert_verify: false
      cert_file: ""
      key_file: ""
    tcp:
      connect_timeout: 0s
      keep_alive:
        idle: 15s
        interval: 15s
        count: 9
      tcp_user_timeout: 0s
    oauth2:
      enabled: false
      client_key: ""
      client_secret: ""
      token_url: ""
      scopes: []
      endpoint_params: {}
    max_in_flight: 64

Fields

compression

Compression type for gRPC requests. Options: 'gzip' or 'none'.

Type: string

Default: gzip

Options: gzip, none

endpoint

The gRPC endpoint of the remote OTLP collector.

Type: string

headers

A map of headers to add to the gRPC request metadata.

This field supports interpolation functions.

Type: object<string>

Default: {}

# Examples:
headers:
  X-Custom-Header: value
  traceparent: ${! tracing_span().traceparent }

max_in_flight

The maximum number of messages to have in flight at a given time. For outputs that send messages in batches, this limit applies to message batches. Increase this value to improve throughput.

Type: int

Default: 64

oauth2

Configures authentication with OAuth version 2 using the client credentials token flow. To exchange a refresh token instead, add a grant_type parameter with the value refresh_token and a refresh_token parameter with the token to endpoint_params.

Type: object

oauth2.client_key

A value used to identify the client to the token provider.

Type: string

Default: ""

oauth2.client_secret

The secret used to establish ownership of the client key.

This field contains sensitive information that usually shouldn’t be added to a configuration directly. For more information, see Manage Secrets before adding it to your configuration.

Type: string

Default: ""

oauth2.enabled

Whether to use OAuth version 2 in requests.

Type: bool

Default: false

oauth2.endpoint_params

A map of optional parameters to send to the token provider with client credentials token requests. Each value must be an array of strings.

Type: object

Default: {}

# Examples:
endpoint_params:
  audience:
    - https://example.com
  resource:
    - https://api.example.com

oauth2.scopes[]

A list of requested permissions (optional).

Type: array<string>

Default: []

oauth2.token_url

The URL of the token provider.

Type: string

Default: ""

tcp

Configure TCP socket-level settings to optimize network performance and reliability. These low-level controls are useful for:

  • Unresponsive hosts: Set connect_timeout to limit how long a connection attempt can take (the default 0s sets no limit)

  • Long-lived connections: Configure keep_alive settings to detect and recover from stale connections

  • Unstable networks: Tune keep-alive probes to balance between quick failure detection and avoiding false positives

  • Linux systems with specific requirements: Use tcp_user_timeout (Linux 2.6.37+) to control data acknowledgment timeouts

Most users should keep the default values. Only modify these settings if you’re experiencing connection stability issues or have specific network requirements.

Type: object

tcp.connect_timeout

Maximum amount of time a dial will wait for a connect to complete. Zero disables.

Type: string

Default: 0s

tcp.keep_alive

TCP keep-alive probe configuration.

Type: object

tcp.keep_alive.count

Maximum unanswered keep-alive probes before dropping the connection. Zero defaults to 9.

Type: int

Default: 9

tcp.keep_alive.idle

Duration the connection must be idle before sending the first keep-alive probe. Zero defaults to 15s. Negative values disable keep-alive probes.

Type: string

Default: 15s

tcp.keep_alive.interval

Duration between keep-alive probes. Zero defaults to 15s.

Type: string

Default: 15s

tcp.tcp_user_timeout

Maximum time to wait for acknowledgment of transmitted data before killing the connection. Linux-only (kernel 2.6.37+), ignored on other platforms. When enabled, keep_alive.idle must be greater than this value per RFC 5482. Zero disables.

Type: string

Default: 0s

timeout

Timeout for gRPC requests.

Type: string

Default: 30s

tls

TLS configuration for gRPC client.

Type: object

tls.cert_file

Path to the TLS certificate file for client authentication.

Type: string

Default: ""

tls.enabled

Enable TLS connections.

Type: bool

Default: false

tls.key_file

Path to the TLS key file for client authentication.

Type: string

Default: ""

tls.skip_cert_verify

Skip certificate verification (insecure).

Type: bool

Default: false