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

# Dynatrace

The Dynatrace destination exports metrics, logs, and traces from a Bindplane pipeline to Dynatrace using the OpenTelemetry Protocol (OTLP) over HTTP. It supports SaaS, ActiveGate, and custom-endpoint deployments, authenticates with a Dynatrace API token, and gzip-compresses every request.

### Supported Telemetry

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

Use Choose Telemetry Type to pick which signals this destination exports. Note that monotonic cumulative sums are not currently supported for metrics.

### Prerequisites

You need a Dynatrace environment and an API token authorized for the signals you intend to send.

* A Dynatrace environment and its Environment ID. The SaaS OTLP endpoint is `https://{your-environment-id}.live.dynatrace.com/api/v2/otlp`. For ActiveGate, you need the ActiveGate hostname or IP and port; for a custom deployment, the full OTLP endpoint URL.
* A reachable OTLP/HTTP endpoint. gRPC is not supported; Dynatrace accepts OTLP only over HTTP. See [Export with OTLP](https://docs.dynatrace.com/docs/ingest-from/opentelemetry/getting-started/otlp-export).
* A Dynatrace API token with scopes for the signals you export. Combine the scopes you need on a single token:

  * Metrics: `metrics.ingest`
  * Logs: `logs.ingest`
  * Traces: `openTelemetryTrace.ingest`

  Token scopes are documented on the [Export with OTLP](https://docs.dynatrace.com/docs/ingest-from/opentelemetry/getting-started/otlp-export) page. The token is sent as `Authorization: Api-Token <token>`.

### Configuration

<figure><img src="/files/KkOHmwZj4f21wxd1VsqL" alt="Bindplane docs - Dynatrace - 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.                                                                                                                               |
| Deployment Type           | Enum: SaaS, ActiveGate, Custom | No       | `SaaS`                  | The Dynatrace deployment to target. The endpoint URL is derived from this choice.                                                                                     |
| Custom URL                | String                         | Yes      | *(empty)*               | The complete OTLP endpoint URL for your Dynatrace instance, for example `https://example.apps.dynatracelabs.com/api/v2/otlp`. Shown when Deployment Type is `Custom`. |
| ActiveGate Hostname or IP | String                         | Yes      | *(empty)*               | The hostname or IP address of your ActiveGate. Shown when Deployment Type is `ActiveGate`.                                                                            |
| Port                      | Integer                        | Yes      | `9999`                  | The port to connect to. Default is 9999 for ActiveGate. Shown when Deployment Type is `ActiveGate`.                                                                   |
| Your Environment ID       | String                         | Yes      | *(empty)*               | The Environment ID for your Dynatrace instance. Used to build the SaaS and ActiveGate endpoint URLs.                                                                  |
| Dynatrace API Token       | String (sensitive)             | Yes      | *(empty)*               | The API token used to authenticate with the Dynatrace API. Sent as `Authorization: Api-Token <token>`.                                                                |

**TLS**

| Parameter                         | Type    | Required | Default   | Description                                                                                                                                          |
| --------------------------------- | ------- | -------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Skip TLS Certificate Verification | Boolean | No       | `false`   | Skip TLS certificate verification. Shown when Deployment Type is `ActiveGate` or `Custom`.                                                           |
| TLS Certificate Authority File    | String  | No       | *(empty)* | Certificate authority used to validate TLS certificates. Shown when Deployment Type is `ActiveGate` or `Custom` and TLS verification is not skipped. |

**Advanced**

| Parameter          | Type    | Required | Default   | Description                                                                             |
| ------------------ | ------- | -------- | --------- | --------------------------------------------------------------------------------------- |
| Additional Headers | Map     | No       | *(empty)* | Additional headers to attach to each request.                                           |
| Drop Raw Copy      | Boolean | No       | `true`    | When enabled, drops the raw copy of the log stored in `log.record.original`. Logs only. |

**Retry on Failure (Advanced)**

| 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`     | Seconds to wait after the first failure before retrying. Shown when retry is enabled.                                           |
| Max interval            | Integer | No       | `30`    | Upper bound in seconds on backoff. Shown when retry is enabled.                                                                 |
| Max elapsed time        | Integer | No       | `300`   | Maximum seconds spent trying to send a batch before giving up, to avoid a never-ending retry loop. Shown when retry is enabled. |

**Sending Queue (Advanced)**

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

### Examples

#### SaaS deployment exporting all signals

Send metrics, logs, and traces to a Dynatrace SaaS environment. Supply your Environment ID and an API token scoped for all three signals.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: dynatrace
spec:
  type: dynatrace_otlp
  parameters:
    - name: telemetry_types
      value:
        - Logs
        - Metrics
        - Traces
    - name: deployment_type
      value: SaaS
    - name: your_environment_id
      value: abc12345
    - name: dynatrace_api_token
      value: dt0c01.REPLACE_WITH_TOKEN
```

#### ActiveGate deployment

Route telemetry through an ActiveGate. Provide the ActiveGate hostname and port along with your Environment ID.

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: dynatrace-activegate
spec:
  type: dynatrace_otlp
  parameters:
    - name: telemetry_types
      value:
        - Metrics
        - Traces
    - name: deployment_type
      value: ActiveGate
    - name: activegate_hostname
      value: activegate.internal.example.com
    - name: port
      value: 9999
    - name: your_environment_id
      value: abc12345
    - name: dynatrace_api_token
      value: dt0c01.REPLACE_WITH_TOKEN
```

### Configuration Tips

* Match your API token scopes to the signals you select. A token missing `metrics.ingest`, `logs.ingest`, or `openTelemetryTrace.ingest` causes the corresponding signal to be rejected even though the other signals succeed.
* Keep the sending queue and persistent queuing enabled (the defaults) so telemetry survives a temporary Dynatrace outage or a collector restart instead of being dropped.
* For ActiveGate or custom deployments using a private certificate authority, set the TLS Certificate Authority File rather than skipping verification, so connections stay validated.

### Troubleshooting

#### 401 or 403 from Dynatrace

Symptoms: requests are rejected with an authentication or authorization error and no data appears in Dynatrace.

Solutions:

1. Confirm the API token is valid and unexpired, and that it carries the scope for each signal you export (`metrics.ingest`, `logs.ingest`, `openTelemetryTrace.ingest`).
2. Verify the Environment ID is correct so the request reaches the intended environment.

#### Connection or TLS failures

Symptoms: the exporter cannot reach the endpoint, or reports a certificate verification error.

Solutions:

1. For SaaS, confirm `https://{your-environment-id}.live.dynatrace.com/api/v2/otlp` is reachable. For ActiveGate, confirm the hostname and port (default 9999) are correct and reachable.
2. For a private CA, set the TLS Certificate Authority File. Use Skip TLS Certificate Verification only for short-lived testing.

#### Telemetry is dropped

Symptoms: gaps in Dynatrace during network instability or collector restarts.

Solutions:

1. Keep the sending queue enabled and increase Queue Size if bursts exceed the default 5000 batches.
2. Keep persistent queuing enabled so buffered telemetry is written to disk and survives a restart.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: dynatrace
spec:
  type: dynatrace_otlp
  parameters:
    - name: telemetry_types
      value:
        - Logs
        - Metrics
        - Traces
    - name: deployment_type
      value: SaaS
    - name: your_environment_id
      value: abc12345
    - name: dynatrace_api_token
      value: dt0c01.REPLACE_WITH_TOKEN
```

### Related Resources

* [OTLP/HTTP Exporter (otlphttpexporter) reference](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/otlphttpexporter/README.md)
* [Dynatrace: Export with OTLP](https://docs.dynatrace.com/docs/ingest-from/opentelemetry/getting-started/otlp-export)


---

# 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/dynatrace.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.
