> 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 Types

| 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

#### Basic Configuration

A SaaS deployment exporting every telemetry type. Supply your Environment ID and an API token scoped for the signals you select.

<figure><img src="/files/KkOHmwZj4f21wxd1VsqL" alt="Bindplane docs - Dynatrace - image 1"><figcaption></figcaption></figure>

| 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.live.dynatrace.com/api/v2/otlp`.<sup>1</sup> 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, for example `abc12345`.<sup>1</sup> 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>`.                                                                        |

1. *A Dynatrace OTLP endpoint never contains `.apps`. Your browser's address bar shows the UI hostname, so if you copy either the endpoint or the environment ID from there, remove the `.apps` portion. Requests to an `.apps` host return HTTP 404. See* [*OTLP API base URL*](https://docs.dynatrace.com/docs/ingest-from/opentelemetry/otlp-api#base-url)*.*

#### TLS

Shown for ActiveGate and Custom deployments, which may terminate TLS with a certificate Bindplane does not trust by default.

| 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

Everything in this section, including retry and queuing, sits behind the Advanced expander on the configuration form.

| 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. |

**Supported Retry and Queuing Settings**

Retry controls how a failed batch is re-sent. The sending queue controls how much telemetry is held while that happens.

| 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. |
| 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

#### Custom endpoint deployment

Point the destination at a specific OTLP endpoint rather than deriving it from the deployment type. The URL must be the OTLP endpoint, not the address your browser shows when you are signed in to Dynatrace.

<figure><img src="/files/ziWxHoa9n9M4TEyMEywj" alt="Bindplane docs - Dynatrace - image 2"><figcaption></figcaption></figure>

#### ActiveGate deployment with a private certificate authority

Route telemetry through an ActiveGate that presents a certificate signed by an internal authority. Setting the TLS Certificate Authority File keeps verification on, which skipping verification would disable.

<figure><img src="/files/BcWf7TJoe4upMglaIu73" alt="Bindplane docs - Dynatrace - image 3"><figcaption></figcaption></figure>

#### Tuned retry and queuing for high volume

Widen the backoff window and enlarge the queue for a high-throughput pipeline, and tag every request with a team header. These controls live behind the Advanced expander.

<figure><img src="/files/aEwSGNl4FLXcHbEGmooN" alt="Bindplane docs - Dynatrace - image 4"><figcaption></figcaption></figure>

### 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.
* ActiveGate deployments do not pick up Dynatrace host topology on their own. Set the mapping resource attributes Dynatrace expects, or traces arrive without being tied to a host. The attribute list is under Information enrichment on the [OTLP API](https://docs.dynatrace.com/docs/ingest-from/opentelemetry/otlp-api) page.

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

#### 404 from Dynatrace

Symptoms: every export fails with HTTP 404. Collector logs report `Permanent error` against a hostname containing `.apps`.

Solutions:

1. Remove the `.apps` portion of the hostname. `https://abc12345.apps.dynatrace.com/api/v2/otlp` is the UI address and returns 404; `https://abc12345.live.dynatrace.com/api/v2/otlp` is the OTLP endpoint.
2. Check the Environment ID for the same problem. Copying it from the address bar captures `abc12345.apps` rather than `abc12345`, which produces the same 404 on a SaaS deployment.

#### 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

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

### Bindplane Resources

* [Persistent Queue](/configuration/bindplane-otel-collector/persistent-queue.md)


---

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