Skip to content

docs: pipeline: outputs: opentelemetry: document gRPC support#2621

Merged
edsiper merged 1 commit into
masterfrom
docs/opentelemetry-grpc-10821
Jul 13, 2026
Merged

docs: pipeline: outputs: opentelemetry: document gRPC support#2621
edsiper merged 1 commit into
masterfrom
docs/opentelemetry-grpc-10821

Conversation

@edsiper

@edsiper edsiper commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • document OTLP/HTTP and OTLP/gRPC transport support
  • explain gRPC's automatic HTTP/2 and h2c configuration
  • add default signal URI mappings and gRPC configuration examples
  • correct the grpc, http2, compression, and logs_body_key parameter descriptions

Why

The OpenTelemetry output documentation said that only HTTP endpoints were supported even though the plugin implements OTLP/gRPC. It also described grpc as supporting an auto value, while the implementation defines it as a boolean setting.

This addresses the documentation portion of fluent/fluent-bit#10821. It doesn't attempt to resolve or close the separately reported high-rate delivery behavior.

User impact

Users can now configure OTLP/gRPC without also setting http2, distinguish OTLP/HTTP over HTTP/2 from gRPC, and select the correct signal-specific endpoint paths.

Validation

  • git diff --check
  • verified balanced GitBook tab and code-fence directives

Summary by CodeRabbit

  • Documentation
    • Clarified OpenTelemetry transport behavior, including OTLP/HTTP defaults and OTLP/gRPC configuration.
    • Documented default per-signal endpoints for logs, metrics, traces, and profiles.
    • Expanded configuration reference details for compression, headers, hosts, HTTP/2, logging options, and signal-specific URIs.
    • Updated parameter descriptions and introductory examples to accurately reflect supported exports and OTLP server behavior.

Signed-off-by: Eduardo Silva <edsiper@gmail.com>
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7d4c1a6a-f1cc-451a-8bb0-88b144419fb6

📥 Commits

Reviewing files that changed from the base of the PR and between a391227 and 4283642.

📒 Files selected for processing (1)
  • pipeline/outputs/opentelemetry.md

📝 Walkthrough

Walkthrough

The OpenTelemetry output documentation now explains OTLP transport modes, defaults, URI mappings, configuration parameters, log body selection, and an OTLP/HTTP-over-TLS example.

Changes

OpenTelemetry documentation

Layer / File(s) Summary
Transport and configuration semantics
pipeline/outputs/opentelemetry.md
Documents OTLP/HTTP and OTLP/gRPC behavior, HTTP/2 handling, per-signal URI defaults, compression, headers, host settings, logging controls, and log body selection.
OTLP endpoint and example updates
pipeline/outputs/opentelemetry.md
Updates the port description for OTLP servers and revises the example to cover logs, host metrics, and traces over OTLP/HTTP with TLS.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related PRs

Suggested labels: 5.0

Suggested reviewers: alexakreizinger, patrick-stephens

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/opentelemetry-grpc-10821

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The transport setting applies to every supported signal routed to this output. The plugin selects the corresponding URI for each signal:

| Signal | OTLP/HTTP default | OTLP/gRPC default |
|---|---|---|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe is missing space to the left for style "compact"]

The transport setting applies to every supported signal routed to this output. The plugin selects the corresponding URI for each signal:

| Signal | OTLP/HTTP default | OTLP/gRPC default |
|---|---|---|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe is missing space to the left for style "compact"]

The transport setting applies to every supported signal routed to this output. The plugin selects the corresponding URI for each signal:

| Signal | OTLP/HTTP default | OTLP/gRPC default |
|---|---|---|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe is missing space to the left for style "compact"]

The transport setting applies to every supported signal routed to this output. The plugin selects the corresponding URI for each signal:

| Signal | OTLP/HTTP default | OTLP/gRPC default |
|---|---|---|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe is missing space to the right for style "compact"]

The transport setting applies to every supported signal routed to this output. The plugin selects the corresponding URI for each signal:

| Signal | OTLP/HTTP default | OTLP/gRPC default |
|---|---|---|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe is missing space to the right for style "compact"]

| `log_suppress_interval` | Suppresses log messages from output plugin that appear similar within a specified time interval. `0` disables suppression. | `0` |
| `logs_attributes_metadata_key` | Specify an `Attributes` key. | `$Attributes` |
| `logs_body_key` | Specify an optional HTTP URI for the target OTel endpoint. | _none_ |
| `logs_body_key` | Set a record accessor that selects the value to use as the OTLP log body. | _none_ |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe has extra space to the left for style "compact"]

| `log_suppress_interval` | Suppresses log messages from output plugin that appear similar within a specified time interval. `0` disables suppression. | `0` |
| `logs_attributes_metadata_key` | Specify an `Attributes` key. | `$Attributes` |
| `logs_body_key` | Specify an optional HTTP URI for the target OTel endpoint. | _none_ |
| `logs_body_key` | Set a record accessor that selects the value to use as the OTLP log body. | _none_ |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe has extra space to the left for style "compact"]

| `oauth2.token_url` | `OAuth 2.0` token endpoint URL. | _none_ |
| `oauth2.user_agent` | Optional `User-Agent` header value to include in `OAuth 2.0` token requests. If omitted, no `User-Agent` header is sent. | _none_ |
| `port` | TCP port of the target HTTP server. | `80` |
| `port` | TCP port of the target OTLP server. | `80` |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe has extra space to the left for style "compact"]

| `oauth2.token_url` | `OAuth 2.0` token endpoint URL. | _none_ |
| `oauth2.user_agent` | Optional `User-Agent` header value to include in `OAuth 2.0` token requests. If omitted, no `User-Agent` header is sent. | _none_ |
| `port` | TCP port of the target HTTP server. | `80` |
| `port` | TCP port of the target OTLP server. | `80` |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe has extra space to the left for style "compact"]

| `oauth2.token_url` | `OAuth 2.0` token endpoint URL. | _none_ |
| `oauth2.user_agent` | Optional `User-Agent` header value to include in `OAuth 2.0` token requests. If omitted, no `User-Agent` header is sent. | _none_ |
| `port` | TCP port of the target HTTP server. | `80` |
| `port` | TCP port of the target OTLP server. | `80` |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint] reported by reviewdog 🐶
error MD060/table-column-style Table column style [Table pipe has extra space to the left for style "compact"]

The transport setting applies to every supported signal routed to this output. The plugin selects the corresponding URI for each signal:

| Signal | OTLP/HTTP default | OTLP/gRPC default |
|---|---|---|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint-fix] reported by reviewdog 🐶

Suggested change
|---|---|---|
| --- | --- | --- |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[markdownlint-fix] reported by reviewdog 🐶

| Key | Description | Default |
|---------|--------------|---------|
| `add_label` | Adds a custom label to the metrics use format: `add_label name value`. | _none_ |
| `alias` | Sets an alias, use for multiple instances of the same output plugin. | _none_ |
| `aws_auth` | Enable AWS SigV4 authentication. | `false`|
| `aws_external_id` | Specify an external ID for the STS API, can be used with the `aws_role_arn` parameter. | _none_ |
| `aws_profile` | AWS Profile name. AWS Profiles can be configured with AWS CLI. | _none_ |
| `aws_region` | AWS region of your service. | _none_ |
| `aws_role_arn` | ARN of an IAM role to assume (ex. for cross account access). | _none_ |
| `aws_service` | AWS destination service code, used by SigV4 authentication. | `logs` |
| `aws_sts_endpoint` | Custom endpoint for the AWS STS API, used with the `aws_role_arn` option. | _none_ |
| `batch_size` | Set the maximum number of log records to be flushed at a time. | `1000` |
| `compress` | Set the OTLP/HTTP payload compression mechanism. Available options are `gzip` and `zstd`. | _none_ |
| `grpc` | Use OTLP/gRPC over HTTP/2. Accepted values are `on` and `off`. Enabling this option also enables HTTP/2. | `off` |
| `grpc_logs_uri` | Set the gRPC method path for log exports. | `/opentelemetry.proto.collector.logs.v1.LogsService/Export` |
| `grpc_metrics_uri` | Set the gRPC method path for metric exports. | `/opentelemetry.proto.collector.metrics.v1.MetricsService/Export` |
| `grpc_profiles_uri` | Set the gRPC method path for profile exports. | `/opentelemetry.proto.collector.profiles.v1experimental.ProfilesService/Export` |
| `grpc_traces_uri` | Set the gRPC method path for trace exports. | `/opentelemetry.proto.collector.trace.v1.TraceService/Export` |
| `header` | Add a HTTP header key/value pair. Multiple headers can be set. | _none_ |
| `host` | IP address or hostname of the target OTLP server. | `127.0.0.1` |
| `http2` | Control HTTP/2 independently of `grpc`. Accepted values are `on`, `off`, and `force`. With TLS, `on` negotiates the protocol and `force` requires HTTP/2. You don't need to set this when `grpc` is `on`. | `off` |
| `http_passwd` | Set HTTP auth password. | _none_ |
| `http_user` | Set HTTP auth user. | _none_ |
| `log_level` | Specifies the log level for output plugin. If not set here, plugin uses global log level in `service` section. | `info` |
| `log_response_payload` | Specify if the response payload should be logged or not. | `true` |
| `log_suppress_interval` | Suppresses log messages from output plugin that appear similar within a specified time interval. `0` disables suppression. | `0` |
| `logs_attributes_metadata_key` | Specify an `Attributes` key. | `$Attributes` |
| `logs_body_key` | Set a record accessor that selects the value to use as the OTLP log body. | _none_ |
| `logs_body_key_attributes` | If set and it matched a pattern, it includes the remaining fields in the record as attributes. | `false`|
| `logs_instrumentation_scope_metadata_key` | Specify an `InstrumentationScope` key. | `InstrumentationScope` |
| `logs_max_resources` | Set the maximum number of OTLP log resources per export request (`0` disables the limit). | `0` |
| `logs_max_scopes` | Set the maximum number of OTLP log scopes per resource (`0` disables the limit). | `0` |
| `logs_metadata_key` | Set the key to look up in the metadata. | `otlp` |
| `logs_observed_timestamp_metadata_key` | Specify an `ObservedTimestamp` key. | `$ObservedTimestamp` |
| `logs_resource_metadata_key` | Specify a `Resource` key. | `Resource` |
| `logs_severity_number_message_key` | Specify a `SeverityNumber` key. | `$severityNumber` |
| `logs_severity_number_metadata_key` | Specify a `SeverityNumber` key. | `$SeverityNumber` |
| `logs_severity_text_message_key` | Specify a `SeverityText` key. | `$SeverityText` |
| `logs_severity_text_metadata_key` | Specify a `SeverityText` key. | `$SeverityText` |
| `logs_span_id_message_key` | Specify a `SpanId` key. | `$SpanId` |
| `logs_span_id_metadata_key` | Specify a `SpanId` key. | `$SpanId` |
| `logs_timestamp_metadata_key` | Specify a `Timestamp` key. | `$Timestamp` |
| `logs_trace_flags_metadata_key` | Specify a `TraceFlags` key. | `$TraceFlags` |
| `logs_trace_id_message_key` | Specify a `TraceId` key. | `$TraceId` |
| `logs_trace_id_metadata_key` | Specify a `TraceId` key. | `$TraceId` |
| `logs_uri` | Specify an optional HTTP URI for the target OTel endpoint. | `/v1/logs` |
| `match` | Set a tag pattern to match records that output should process. Exact matches or wildcards (for example `*`). | _none_ |
| `match_regex` | Set a regular expression to match tags for output routing. This allows more flexible matching compared to wildcards. | _none_ |
| `metrics_uri` | Specify an optional HTTP URI for the target OTel endpoint. | `/v1/metrics` |
| `net.connect_timeout` | Set maximum time allowed to establish a connection, this time includes the TLS handshake. | `10s` |
| `net.connect_timeout_log_error` | On connection timeout, specify if it should log an error. When disabled, the timeout is logged as a debug message. | `true` |
| `net.dns.mode` | Select the primary DNS connection type (TCP or UDP). | _none_ |
| `net.dns.prefer_ipv4` | Select the primary DNS resolver type (LEGACY or ASYNC). | _none_ |
| `net.dns.prefer_ipv6` | Prioritize IPv6 DNS results when trying to establish a connection. | _none_ |
| `net.io_timeout` | Set maximum time a connection can stay idle while assigned. | `0s` |
| `net.keepalive_max_recycle` | Set maximum number of times a keepalive connection can be used before it retries. | `2000` |
| `net.max_worker_connections` | Set the maximum number of active TCP connections that can be used per worker thread. | `0` |
| `net.proxy_env_ignore` | Ignore the environment variables `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` when set. | `false`|
| `net.source_address` | Specify network address to bind for data traffic. | _none_ |
| `net.tcp_keepalive` | Enable or disable Keepalive support. | `off` |
| `net.tcp_keepalive_interval` | Interval between TCP keepalive probes when no response is received on a `keepidle` probe. | `-1` |
| `net.tcp_keepalive_probes` | Number of unacknowledged probes to consider a connection dead. | `-1` |
| `net.tcp_keepalive_time` | Interval between the last data packet sent and the first TCP keepalive probe. | `-1` |
| `oauth2.audience` | Optional `OAuth 2.0` audience parameter. | _none_ |
| `oauth2.auth_method` | `OAuth 2.0` client authentication method. Supported values: `basic`, `post`, `private_key_jwt`. | `basic` |
| `oauth2.client_id` | `OAuth 2.0` client ID. | _none_ |
| `oauth2.client_secret` | `OAuth 2.0` client secret. | _none_ |
| `oauth2.connect_timeout` | Connect timeout for `OAuth 2.0` token requests. | `0s` |
| `oauth2.enable` | Enable `OAuth 2.0` client credentials for outgoing requests. | `false`|
| `oauth2.jwt_aud` | Audience for `private_key_jwt` JSON Web Token (JWT) assertion. Defaults to the value of `oauth2.token_url` when not set. | _none_ |
| `oauth2.jwt_cert_file` | Path to certificate file used by `private_key_jwt`. | _none_ |
| `oauth2.jwt_header` | JWT header claim name for `private_key_jwt` thumbprint. Accepted values: `kid`, `x5t`. | `kid` |
| `oauth2.jwt_key_file` | Path to PEM private key file used by `private_key_jwt`. | _none_ |
| `oauth2.jwt_ttl_seconds` | Lifetime in seconds for `private_key_jwt` JWT client assertions. | `300` |
| `oauth2.refresh_skew_seconds` | Seconds before expiry at which to refresh the access token. | `60` |
| `oauth2.resource` | Optional `OAuth 2.0` resource parameter. | _none_ |
| `oauth2.scope` | Optional `OAuth 2.0` scope. | _none_ |
| `oauth2.timeout` | Timeout for `OAuth 2.0` token requests. | `0s` |
| `oauth2.token_url` | `OAuth 2.0` token endpoint URL. | _none_ |
| `oauth2.user_agent` | Optional `User-Agent` header value to include in `OAuth 2.0` token requests. If omitted, no `User-Agent` header is sent. | _none_ |
| `port` | TCP port of the target OTLP server. | `80` |
| `profiles_uri` | Specify an optional HTTP URI for the profiles OTel endpoint. | `/v1development/profiles` |
| `proxy` | Specify an HTTP Proxy. The expected format of this value is `http://host:port`.| _none_ |
| `retry_limit` | Set retry limit for output plugin when delivery fails. Integer, `no_limits`, `false`, or `off` to disable, or `no_retries` to disable retries entirely. | `1` |
| `tls` | Enable or disable TLS/SSL support. | `off` |
| `tls.ca_file` | Absolute path to CA certificate file. | _none_ |
| `tls.ca_path` | Absolute path to scan for certificate files. | _none_ |
| `tls.ciphers` | Specify TLS ciphers up to TLSv1.2. | _none_ |
| `tls.crt_file` | Absolute path to Certificate file. | _none_ |
| `tls.debug` | Set TLS debug level. Accepts `0` (No debug), `1`(Error), `2` (State change), `3` (Informational) and `4` (Verbose). | `1` |
| `tls.key_file` | Absolute path to private Key file. | _none_ |
| `tls.key_passwd` | Optional password for tls.key_file. | _none_ |
| `tls.max_version` | Specify the maximum version of TLS. | _none_ |
| `tls.min_version` | Specify the minimum version of TLS. | _none_ |
| `tls.verify` | Force certificate validation. | `on` |
| `tls.verify_hostname` | Enable or disable to verify hostname. | `off` |
| `tls.vhost` | Hostname to be used for TLS SNI extension. | _none_ |
| `tls.windows.certstore_name` | Sets the `certstore` name on an output (Windows). | _none_ |
| `tls.windows.use_enterprise_store` | Sets whether using enterprise `certstore` or not on an output (Windows). | _none_ |
| `traces_uri` | Specify an optional HTTP URI for the target OTel endpoint. | `/v1/traces` |
| `workers` | The number of [workers](../../administration/multithreading.md#outputs) to perform flush operations for this output. | `0` |

@edsiper edsiper marked this pull request as ready for review July 13, 2026 03:20
@edsiper edsiper requested review from a team and eschabell as code owners July 13, 2026 03:20
@edsiper edsiper merged commit 9ac2dfa into master Jul 13, 2026
8 of 9 checks passed
@edsiper edsiper deleted the docs/opentelemetry-grpc-10821 branch July 13, 2026 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant