> 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/grafana-cloud.md).

# Grafana Cloud

The Grafana Cloud destination sends telemetry from a Bindplane pipeline to a Grafana Cloud stack over OTLP/HTTP. It exports metrics, logs, and traces, authenticating to the Grafana Cloud OTLP endpoint with your instance ID and an Access Policy token.

### Supported Telemetry

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

### Prerequisites

To export to Grafana Cloud the collector needs a reachable OTLP endpoint, your Grafana Cloud instance ID, and an Access Policy token with write permission for the signals being sent.

* **A Grafana Cloud stack.** Sign in to the [Grafana Cloud Portal](https://grafana.com/auth/sign-in/) and open (or create) a stack.
* **OTLP endpoint and instance ID.** From the stack Overview, open the **OpenTelemetry** tile and click **Configure**. The page lists the OTLP Endpoint (a URL such as `https://otlp-gateway-prod-us-central-0.grafana.net/otlp`) and the Instance ID for your stack. See [Send data to the Grafana Cloud OTLP endpoint](https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/).
* **An Access Policy token.** Create an Access Policy with **Write** scope for the telemetry you intend to export (metrics, logs, and/or traces), then add a token to it. The token value is shown only once, so copy it when it is created. See [Create access policies and tokens](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/create-access-policies/).

The instance ID is used as the basic-auth username and the Access Policy token as the password when the collector authenticates to the OTLP endpoint.

### Configuration

<figure><img src="/files/GvVIAcwm7tPQKRWpkP3u" alt="Bindplane docs - Grafana Cloud - image 1"><figcaption></figcaption></figure>

**Connection**

| Parameter                 | Type               | Required | Default               | Description                                                                                                                                                    |
| ------------------------- | ------------------ | -------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Choose Telemetry Type     | Telemetry Selector | No       | Logs, Metrics, Traces | Which signals this destination exports. By default all three are sent.                                                                                         |
| OTLP Endpoint             | String             | Yes      | *(empty)*             | The URL to send OTLP data to. Found in the Cloud Portal under the OpenTelemetry card.                                                                          |
| Grafana Cloud Instance ID | String             | Yes      | *(empty)*             | The ID for your Grafana Cloud instance. Found in the Cloud Portal under the OpenTelemetry card. Used as the basic-auth username.                               |
| Cloud Access Policy Token | String (sensitive) | Yes      | *(empty)*             | A token created for an Access Policy in Grafana Cloud. The Access Policy needs write permission for the telemetry being sent. Used as the basic-auth password. |

**Advanced**

| Parameter     | Type                                          | Required | Default | Description                                                                                                                |
| ------------- | --------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
| Compression   | Enum: none, gzip, deflate, snappy, zlib, zstd | No       | `gzip`  | Compression algorithm to use when sending data to Grafana Cloud. The Grafana Cloud OTLP endpoint accepts `none` or `gzip`. |
| Drop Raw Copy | Boolean                                       | No       | `true`  | When enabled, the raw copy of the log stored in `log.record.original` is dropped before export. Logs only.                 |

**Retry on Failure**

| Parameter               | Type    | Required | Default | Description                                                                                                                                              |
| ----------------------- | ------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Enable Retry on Failure | Boolean | No       | `true`  | Attempt to resend telemetry data that has failed to be transmitted to the destination.                                                                   |
| Initial interval        | Integer | No       | `5`     | Time (in seconds) to wait after the first failure before retrying. Applies when retry on failure is enabled.                                             |
| Max interval            | Integer | No       | `30`    | The upper bound (in seconds) on backoff. Applies when retry on failure is enabled.                                                                       |
| Max elapsed time        | Integer | No       | `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 on failure is enabled. |

**Sending Queue**

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

### Examples

This example exports only metrics to Grafana Cloud. The endpoint, instance ID, and token are set for the target stack, compression is `gzip`, and retry on failure, the sending queue, and the persistent queue are enabled with their default values.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: grafana-cloud
spec:
  type: grafana_cloud_otlphttp
  parameters:
    - name: telemetry_types
      value:
        - Metrics
    - name: endpoint
      value: https://otlp-gateway-prod-us-central-0.grafana.net/otlp
    - name: instance_id
      value: "123456"
    - name: token
      value: <access-policy-token>
    - name: compression
      value: gzip
    - name: retry_on_failure_enabled
      value: true
    - name: sending_queue_enabled
      value: true
    - name: persistent_queue_enabled
      value: true
```

### Configuration Tips

* The Grafana Cloud OTLP endpoint accepts only `none` or `gzip` compression. Keep the default `gzip` to reduce egress; do not select `deflate`, `snappy`, `zlib`, or `zstd` for this destination.
* Scope the Access Policy to exactly the signals you export. A token without write permission for a signal causes that signal to be rejected while others continue to flow.
* Leave the persistent queue enabled so buffered telemetry survives collector restarts. The default storage writes to `${OIQ_OTEL_COLLECTOR_HOME}/storage` with fsync enabled.

### Troubleshooting

#### Authentication fails after the token expires

Symptoms: exports that previously succeeded begin returning 401/403 errors and data stops arriving in Grafana Cloud.

Solutions:

1. Access Policy tokens can be created with an expiration date. When the token expires the collector can no longer authenticate, and Bindplane must be reconfigured with a new token. Create a new token on the same Access Policy in the Cloud Portal and update the **Cloud Access Policy Token** parameter on this destination.
2. To avoid recurring outages, track each token's expiration and rotate it ahead of time, or create the token without an expiration where your security policy allows.

#### Permission denied for one signal type

Symptoms: one signal (for example traces) is rejected while metrics and logs succeed.

Solutions:

1. Confirm the Access Policy has **Write** scope for the rejected signal. Update the policy scopes in the Cloud Portal, then retry.
2. Confirm **Choose Telemetry Type** includes only the signals the token is authorized to write.

#### Endpoint unreachable or wrong region

Symptoms: connection or DNS errors, or data does not appear in the expected stack.

Solutions:

1. Verify the **OTLP Endpoint** matches the value shown on your stack's OpenTelemetry card. The hostname is region-specific (for example `otlp-gateway-prod-us-central-0.grafana.net`).
2. Verify the **Grafana Cloud Instance ID** matches the same card. A mismatched instance ID authenticates against the wrong stack.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: grafana-cloud
spec:
  type: grafana_cloud_otlphttp
  parameters:
    - name: telemetry_types
      value:
        - Logs
        - Metrics
        - Traces
    - name: endpoint
      value: https://otlp-gateway-prod-us-central-0.grafana.net/otlp
    - name: instance_id
      value: "123456"
    - name: token
      value: <access-policy-token>
```

### Related Resources

* [OTLP/HTTP Exporter (otlphttpexporter)](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter)
* [Send data to the Grafana Cloud OTLP endpoint](https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/)
* [Create access policies and tokens](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/create-access-policies/)


---

# 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/grafana-cloud.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.
