> 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/suse-observability.md).

# SUSE Observability

The SUSE Observability destination exports metrics, logs, and traces from a Bindplane pipeline to SUSE Cloud Observability (SaaS) or a self-hosted SUSE Observability instance, the observability platform built on StackState. Telemetry is sent using the OpenTelemetry Protocol (OTLP) over gRPC or HTTP.

### Supported Telemetry

| Metrics | Logs | Traces |
| ------- | ---- | ------ |
| ✓       | ✓    | ✓      |

### Prerequisites

* A SUSE Cloud Observability instance (SaaS) or a deployed self-hosted SUSE Observability instance.
* A reachable OTLP endpoint:
  * For SUSE Cloud Observability, the endpoint is derived from your instance name (for example, `otlp-myinstance.app.stackstate.io:443` for gRPC, or `https://otlp-http-myinstance.app.stackstate.io` for HTTP).
  * For self-hosted, an OTLP ingress, or in-cluster access to `suse-observability-otel-collector.<namespace>.svc.cluster.local` on port `4317` (gRPC) or `4318` (HTTP).
* An API key (bearer token) for authentication. SUSE Observability uses the `SUSEObservability` bearer token scheme.
* Network connectivity from the Bindplane agent to the SUSE Observability endpoint.

For endpoint, port, and authentication details, see the SUSE [OTLP APIs documentation](https://documentation.suse.com/cloudnative/suse-observability/latest/en/setup/otel/otlp-apis.html).

### Configuration

<figure><img src="/files/xLmqAefV534ZcdfaK6yg" alt="Bindplane docs - SUSE Observability - image 1"><figcaption></figcaption></figure>

**Telemetry and Connection**

| Parameter             | Type                    | Required | Default                                                       | Description                                                                                                                                                                                   |
| --------------------- | ----------------------- | -------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Choose Telemetry Type | Telemetry Selector      | No       | Logs, Metrics, Traces                                         | The signals to export.                                                                                                                                                                        |
| Environment           | Enum: cloud, selfhosted | No       | cloud                                                         | Whether data is sent to SUSE Cloud Observability (SaaS) or a self-hosted instance.                                                                                                            |
| Instance Name         | String                  | Yes      | *(empty)*                                                     | The SUSE Cloud Observability instance name. For `otlp-myinstance.app.stackstate.io`, enter `myinstance`. Shown when Environment is `cloud`.                                                   |
| Endpoint              | String                  | Yes      | `suse-observability-otel-collector.default.svc.cluster.local` | The endpoint where self-hosted SUSE Observability is deployed. For in-cluster, use `suse-observability-otel-collector.<namespace>.svc.cluster.local`. Shown when Environment is `selfhosted`. |
| Protocol              | Enum: grpc, http        | No       | grpc                                                          | The OTLP protocol. gRPC is preferred for better performance and larger payloads. For self-hosted, HTTP is available for in-cluster deployments.                                               |

**Authentication**

| Parameter | Type               | Required | Default   | Description                                                                                             |
| --------- | ------------------ | -------- | --------- | ------------------------------------------------------------------------------------------------------- |
| API Key   | String (sensitive) | Yes      | *(empty)* | The API key or bearer token for authentication. Sent using the `SUSEObservability` bearer token scheme. |

**Advanced — TLS**

| Parameter                         | Type    | Required | Default   | Description                                                                                                              |
| --------------------------------- | ------- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------ |
| Enable TLS                        | Boolean | No       | `true`    | Use TLS for the connection. Enabled by default for cloud deployments. For self-hosted with HTTP, disable for plain HTTP. |
| Skip TLS Certificate Verification | Boolean | No       | `false`   | Skip verification of the server's certificate. Not recommended for production. Shown when Enable TLS is on.              |
| TLS Certificate Authority File    | String  | No       | *(empty)* | Optional CA file used to validate the server's certificate. Shown when Enable TLS is on.                                 |
| Server Name Override              | String  | No       | *(empty)* | Optional virtual hostname indicating the name of the server requested by the client. Shown when Enable TLS is on.        |
| Mutual TLS                        | Boolean | No       | `false`   | Use client TLS authentication (mTLS). Shown when Enable TLS is on.                                                       |
| TLS Client Certificate File       | String  | Yes      | *(empty)* | Path to the client certificate for mTLS. Required and shown when Enable TLS and Mutual TLS are on.                       |
| TLS Client Private Key            | String  | Yes      | *(empty)* | Path to the client private key for mTLS. Required and shown when Enable TLS and Mutual TLS are on.                       |

**Advanced — Compression and Headers**

| Parameter          | Type                                          | Required | Default   | Description                                                                                                                                                  |
| ------------------ | --------------------------------------------- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Additional Headers | Map                                           | No       | *(empty)* | Additional headers to attach to each request.                                                                                                                |
| gRPC Compression   | Enum: none, gzip, snappy, zstd                | No       | gzip      | Compression algorithm used on the OTLP gRPC endpoint. Shown when Protocol is `grpc`.                                                                         |
| HTTP Compression   | Enum: none, gzip, deflate, snappy, zlib, zstd | No       | gzip      | Compression algorithm used on the OTLP HTTP endpoint. Shown when Protocol is `http`.                                                                         |
| Path Prefix        | String                                        | No       | *(empty)* | Optional path prefix added to the HTTP endpoint. Telemetry is sent to `/v1/metrics`, `/v1/logs`, and `/v1/traces` by default. Shown when Protocol is `http`. |
| Timeout            | Integer                                       | Yes      | `30`      | Timeout, in seconds, for sending batches to the destination.                                                                                                 |
| Drop Raw Copy      | Boolean                                       | No       | `true`    | When enabled, the raw copy of the log stored in `log.record.original` is dropped. Applies to logs.                                                           |

**Advanced — Batching**

| Parameter           | Type     | Required | Default | Description                                                                                                                       |
| ------------------- | -------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Enable Batching     | Boolean  | No       | `true`  | Batch telemetry data before sending to the destination.                                                                           |
| Send Batch Size     | Integer  | Yes      | `8192`  | Number of spans, metric data points, or log records after which a batch is sent regardless of timeout. Shown when batching is on. |
| Send Batch Max Size | Integer  | Yes      | `0`     | Upper limit on batch size. `0` means no upper limit. Shown when batching is on.                                                   |
| Timeout             | Duration | Yes      | `200ms` | Time after which a batch is sent regardless of size, for example `2s`. Shown when batching is on.                                 |

**Advanced — Retry on Failure**

| Parameter               | Type    | Required | Default | Description                                                                                          |
| ----------------------- | ------- | -------- | ------- | ---------------------------------------------------------------------------------------------------- |
| Enable Retry on Failure | Boolean | No       | `true`  | Attempt to resend telemetry that failed to transmit.                                                 |
| Initial interval        | Integer | No       | `5`     | Time, in seconds, to wait after the first failure before retrying. Shown when retry is on.           |
| Max interval            | Integer | No       | `30`    | Upper bound, in seconds, on backoff between retries. Shown when retry is on.                         |
| Max elapsed time        | Integer | No       | `300`   | Maximum time, in seconds, spent trying to send a batch before it is dropped. Shown when retry is on. |

**Advanced — Sending Queue**

| Parameter                 | Type      | Required | Default                                              | Description                                                                                                                   |
| ------------------------- | --------- | -------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Enable Sending Queue      | Boolean   | No       | `true`                                               | Buffer telemetry before sending to help avoid loss during a temporary network outage.                                         |
| Number of Consumers       | Integer   | No       | `10`                                                 | Number of consumers that dequeue batches. Shown when the sending queue is on.                                                 |
| Queue Size                | Integer   | No       | `5000`                                               | Maximum number of batches kept in memory before dropping. Shown when the sending queue is on.                                 |
| Enable Persistent Queuing | Boolean   | No       | `true`                                               | Buffer telemetry to disk to help avoid loss during network outages or collector restarts. Shown when the sending queue is on. |
| Persistent Queue Storage  | Extension | Yes      | File storage at `${OIQ_OTEL_COLLECTOR_HOME}/storage` | The storage extension used for the persistent queue. Shown when the sending queue and persistent queuing are on.              |

### Examples

#### Export all signals to SUSE Cloud Observability over gRPC

Send metrics, logs, and traces to a SUSE Cloud Observability instance named `myinstance` over OTLP/gRPC with TLS enabled.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: suse-observability
spec:
  type: suse_observability_otlp
  parameters:
    - name: telemetry_types
      value:
        - Logs
        - Metrics
        - Traces
    - name: environment
      value: cloud
    - name: suse_observability_instance
      value: myinstance
    - name: protocol
      value: grpc
    - name: api_key
      value: ${SUSE_OBSERVABILITY_API_KEY}
    - name: enable_tls
      value: true
```

### Configuration Tips

* Use `cloud` for SUSE Cloud Observability SaaS and `selfhosted` for an on-premises instance. For an in-cluster self-hosted target, select `http`, disable TLS, and point the Endpoint at the in-cluster collector service.
* gRPC is preferred for higher throughput and larger payloads. Pair it with `gzip` or `snappy` compression to reduce bandwidth. Use HTTP when gRPC is blocked by a proxy or firewall.
* For mission-critical telemetry, leave the sending queue and persistent queuing enabled so data survives collector restarts. Increase Queue Size above the `5000` default if queues fill during traffic spikes, and raise Max elapsed time so the retry window is long enough to ride out longer outages.

### Troubleshooting

#### Authentication failures

Symptoms: `401 Unauthorized` or `unauthenticated` errors.

Solutions:

1. Confirm the API Key is correct, not expired or revoked, and free of stray whitespace.
2. Confirm the instance name (cloud) or endpoint (self-hosted) matches your SUSE Observability instance, so the bearer token is sent to the right target.

#### Connection or endpoint errors

Symptoms: connection timeout or `connection refused`.

Solutions:

1. Verify the instance name or endpoint is reachable from the agent. For gRPC use port `4317`, and for HTTP use port `4318` (self-hosted); SUSE Cloud Observability gRPC uses port `443`.
2. For self-hosted, confirm OTLP ingress is configured or the in-cluster service is reachable.

#### TLS certificate errors

Symptoms: `x509: certificate signed by unknown authority` or `certificate verify failed`.

Solutions:

1. Provide a CA file via TLS Certificate Authority File when the server uses a private or self-signed CA, and confirm it is readable by the agent process.
2. Use Server Name Override if the certificate hostname differs from the endpoint. Skip TLS Certificate Verification should be used only for short-term testing.

#### Dropped telemetry under load

Symptoms: gaps in data or queue-full messages in agent logs during traffic spikes.

Solutions:

1. Enable the sending queue and persistent queuing so batches buffer instead of dropping.
2. Increase Queue Size and Number of Consumers, and raise Max elapsed time so retries persist through longer backend outages.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: suse-observability
spec:
  type: suse_observability_otlp
  parameters:
    - name: telemetry_types
      value:
        - Logs
        - Metrics
        - Traces
    - name: environment
      value: cloud
    - name: suse_observability_instance
      value: myinstance
    - name: protocol
      value: grpc
    - name: api_key
      value: ${SUSE_OBSERVABILITY_API_KEY}
    - name: timeout
      value: 30
```

### Related Resources

* [OTLP gRPC Exporter (otlpexporter)](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter)
* [OTLP HTTP Exporter (otlphttpexporter)](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter)
* [SUSE Observability OTLP APIs](https://documentation.suse.com/cloudnative/suse-observability/latest/en/setup/otel/otlp-apis.html)


---

# 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/suse-observability.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.
