> For the complete documentation index, see [llms.txt](https://docs.bindplane.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bindplane.com/integrations/destinations/openobserve-otlp.md).

# OpenObserve (OTLP)

The OpenObserve destination sends logs, metrics, and traces to [OpenObserve](https://openobserve.ai/) using the OpenTelemetry Protocol (OTLP). Telemetry is delivered over OTLP/HTTP or OTLP/gRPC and authenticated with Basic credentials issued by OpenObserve.

### Supported Telemetry Types

| Platform | Metrics | Logs | Traces |
| -------- | ------- | ---- | ------ |
| Linux    | ✓       | ✓    | ✓      |
| Windows  | ✓       | ✓    | ✓      |
| macOS    | ✓       | ✓    | ✓      |

### Prerequisites

* A running OpenObserve instance (self-hosted or cloud) reachable from the collector.
* The OTLP endpoint for your deployment:
  * **HTTP**: `https://<server>/api/<organization>` (no trailing slash, no signal path).
  * **gRPC**: `<hostname>:<port>` (default gRPC port `5081`), plus the organization name.
* The base64-encoded Basic authentication credentials from OpenObserve's **Data Sources** page.
* The target stream name (defaults to `default`).

### Configuration

<figure><img src="/files/MR9sg45ePhsu7joq6Qpg" alt="Bindplane docs - OpenObserve (OTLP) - image 1"><figcaption></figcaption></figure>

#### General

| Parameter             | Type               | Default                       | Description                                                                                                                                                 |
| --------------------- | ------------------ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Choose Telemetry Type | Telemetry Selector | `["Logs","Metrics","Traces"]` | Select which types of telemetry to export. Valid values: `Logs`, `Metrics`, `Traces`.                                                                       |
| Protocol              | Enum               | `http`                        | The OTLP protocol to use when sending telemetry to OpenObserve. Valid values: `http`, `grpc`.                                                               |
| Authorization         | String             |                               | Required. Sensitive. Base64-encoded credentials for Basic authentication. Copy the value from OpenObserve's Data Sources page (without the `Basic` prefix). |
| Stream Name           | String             | `default`                     | Required. The stream name to send telemetry data to.                                                                                                        |

#### HTTP

Applies when `protocol` is `http`.

| Parameter     | Type   | Default | Description                                                                                                                                                                                    |
| ------------- | ------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| HTTP Endpoint | String |         | Required. The OpenObserve OTLP HTTP endpoint URL. Format: `https://<server>/api/<organization>`. Do not include a trailing slash or the signal path (`/v1/logs`, `/v1/metrics`, `/v1/traces`). |

#### gRPC

Applies when `protocol` is `grpc`.

| Parameter     | Type   | Default | Description                                                                                        |
| ------------- | ------ | ------- | -------------------------------------------------------------------------------------------------- |
| GRPC Endpoint | String |         | Required. The OpenObserve gRPC endpoint. Format: `<hostname>:<port>`. Default gRPC port is `5081`. |
| Organization  | String |         | Required. The OpenObserve organization name for gRPC connections.                                  |

#### Advanced

| Parameter                         | Type    | Default | Description                                                                                                                         |
| --------------------------------- | ------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Enable TLS                        | Boolean | `true`  | Whether or not to use TLS.                                                                                                          |
| Skip TLS Certificate Verification | Boolean | `false` | Skip TLS certificate verification. Applies when `enable_tls` is `true`.                                                             |
| TLS Certificate Authority File    | String  |         | Certificate authority used to validate TLS certificates. Applies when `enable_tls` is `true` and `insecure_skip_verify` is `false`. |
| Compression                       | Enum    | `gzip`  | Compression algorithm to use when sending data to OpenObserve. Valid values: `none`, `gzip`.                                        |
| Drop Raw Copy                     | Boolean | `true`  | When enabled, the raw copy of the log stored in `log.record.original` is dropped.                                                   |

#### Retry on Failure

| Parameter               | Type    | Default | Description                                                                                                                                   |
| ----------------------- | ------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Enable Retry on Failure | Boolean | `true`  | Attempt to resend telemetry data that has failed to be transmitted to the destination.                                                        |
| Initial interval        | Integer | `5`     | Time (in seconds) to wait after the first failure before retrying. Applies when retry is enabled.                                             |
| Max interval            | Integer | `30`    | The upper bound (in seconds) on backoff. Applies when retry is enabled.                                                                       |
| Max elapsed time        | Integer | `300`   | The maximum amount of time (in seconds) spent trying to send a batch, used to avoid a never-ending retry loop. Applies when retry is enabled. |

#### Sending Queue

| Parameter                 | Type      | Default                         | Description                                                                                                                                                                         |
| ------------------------- | --------- | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Enable Sending Queue      | Boolean   | `true`                          | Buffer telemetry data temporarily before sending to help ensure telemetry data is not lost in case of a temporary network outage.                                                   |
| Number of Consumers       | Integer   | `10`                            | Number of consumers that dequeue batches. Applies when the sending queue is enabled.                                                                                                |
| Queue Size                | Integer   | `5000`                          | Maximum number of batches kept in memory before dropping. Applies when the sending queue is enabled.                                                                                |
| Enable Persistent Queuing | Boolean   | `true`                          | Buffer telemetry data to disk before sending to help ensure telemetry data is not lost in case of network outages or collector restarts. Applies when the sending queue is enabled. |
| Persistent Queue Storage  | Extension | `file_storage_persistent_queue` | The storage to use for the persistent queue. Applies when the sending queue and persistent queuing are enabled.                                                                     |

### Example Configuration

#### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  id: openobserve_otlp
  name: openobserve_otlp
spec:
  type: openobserve_otlp
  parameters:
    - name: telemetry_types
      value: ['Logs', 'Metrics', 'Traces']
    - name: protocol
      value: 'http'
    - name: http_endpoint
      value: 'https://openobserve.example.com/api/my-org'
    - name: authorization
      value: 'cm9vdEBleGFtcGxlLmNvbTpteVRva2Vu'
    - name: stream_name
      value: 'default'
    - name: compression
      value: 'gzip'
```

### Configuration Tips

#### Choosing a protocol and endpoint

* For HTTP, set `http_endpoint` to `https://<server>/api/<organization>` and leave off any trailing slash or signal path. Bindplane appends the OTLP signal paths automatically.
* For gRPC, set `grpc_endpoint` to `<hostname>:<port>` (default port `5081`) and supply `grpc_organization`. The organization is sent as a request header rather than embedded in the endpoint.

#### Authentication

* `authorization` is the base64-encoded Basic credential copied from OpenObserve's **Data Sources** page. Paste only the encoded token, without the `Basic` prefix. Bindplane adds the `Basic` prefix when sending the `Authorization` header.
* Treat this value as a secret. It is stored as a sensitive parameter.

#### Stream routing and raw log copies

* `stream_name` controls which OpenObserve stream receives the data. Use distinct streams to separate environments or signal types.
* `drop_raw_copy` removes the `log.record.original` attribute before export. Leave it enabled to reduce payload size, or disable it if you need the unparsed original log retained in OpenObserve.

### Troubleshooting

**Symptom:** Telemetry is rejected with an authentication or 401 error. **Solution:** Confirm `authorization` holds the base64 token from OpenObserve's Data Sources page with no `Basic` prefix and no surrounding whitespace. Bindplane adds the `Basic` prefix automatically.

**Symptom:** Data is sent but does not appear in OpenObserve, or requests return a 404. **Solution:** Verify the endpoint format. For HTTP it must be `https://<server>/api/<organization>` with no trailing slash and no signal path. Confirm the organization in the URL (HTTP) or `grpc_organization` (gRPC) matches your OpenObserve organization.

**Symptom:** TLS handshake failures when connecting to OpenObserve. **Solution:** If the server uses a private or self-signed certificate, set `ca_file` to the certificate authority, or temporarily set `insecure_skip_verify` to `true` to confirm the connection. Disabling `enable_tls` is only appropriate for plaintext endpoints.

### Related Resources

* [OpenObserve documentation](https://openobserve.ai/docs/)
* [OpenObserve OpenTelemetry ingestion](https://openobserve.ai/docs/ingestion/traces/opentelemetry/)
* [OpenObserve Data Sources and credentials](https://openobserve.ai/docs/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bindplane.com/integrations/destinations/openobserve-otlp.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
