Configure data forwarding via OpenPipeline to send records to your cloud object storage. For limits, see Forwarding.
This article explains how to create forwarding configurations, choose to forward unprocessed or processed records, and apply additional filtering to control which data is forwarded.
This article is for application owners integrating Dynatrace OpenPipeline processing and storage with company compliance standards and an established cloud‑storage strategy.
Looking for the other direction? To query data that lives in your cloud object storage directly from Grail, see external datastores.
A valid AWS S3, Azure Blob Storage, or Google Cloud Project
Dynatrace SaaS environment powered by Grail and AppEngine
DPS license capabilities required for the configuration scope you want to forward (for example, Logs powered by Grail (DPS) for logs).
Environment-level settings:objects:read and settings:objects:write permissions for the connections.aws, connections.azure, or connections.gcp schema
Users with sufficient permissions can:
Depending on your cloud vendor, check the following prerequisites.
To write and connect the AWS storage you need the following permissions in the AWS Console.
GetBucketLocationPutObjectIf your S3 bucket is encrypted with a customer-managed KMS key (SSE-KMS), you also need KMS permissions. See Connect your cloud vendor.
You're familiar with the terms Dynatrace Connector and object storage.
You know that cost is associated with object storage, and costs will occur once you start sending data, depending on the retention time and the number of requests.
Access the Set up connection modal.
Go to
Settings > Connections > your cloud vendor (
AWS,
Microsoft Azure, or GCP ) > Connection.
Via OpenPipeline
When you define the forwarding configuration, select Create a new connection.
In Set up connection, enter a new connection name and select Save.
This action generates a connection ID.
Copy the connection ID.
Keep the modal open.
Depending on your cloud vendor, do the following.
In the AWS Console, add an IAM role using the AWS account as a trusted entity and the Settings ID as external ID.
This is the role that is assumed when using the AWS connection in Dynatrace.
The resulting trust policy looks as follows:
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": "arn:aws:iam::314146291599:root"},"Action": "sts:AssumeRole","Condition": {"StringEquals": {"sts:ExternalId": "<the Connection ID in Dynatrace>"}}}]}
Use identity or resource-based permissions for resource access.
KMS permissions Grant KMS access to the role.
This step is required if your S3 bucket is encrypted with a customer-managed KMS key (SSE-KMS). If your bucket doesn't use SSE-KMS, you don't need it.
The role needs the kms:Decrypt and kms:GenerateDataKey permissions for your KMS key, and the key policy must allow the role to use the key. Without them, uploads fail with an AccessDeniedException. You configure these permissions in AWS, not in Dynatrace.
Use one of these options:
Add a statement to your KMS key policy. This works in every case. Choose it if you're unsure which option applies to you.
In the AWS Console, go to KMS > Customer managed keys, select your key, and add the following statement to the key policy.
{"Sid": "Allow use of the key","Effect": "Allow","Principal": {"AWS": "<your-role-arn>"},"Action": ["kms:Decrypt","kms:GenerateDataKey"],"Resource": "*"}
Add KMS permissions to the IAM role policy. This only works if your key policy includes a root delegation statement ("Principal": {"AWS": "arn:aws:iam::<account-id>:root"}, "Action": "kms:*"). Without it, IAM policies have no effect on the key.
In the AWS Console, add the following statement to the IAM policy attached to your role.
{"Effect": "Allow","Action": ["kms:Decrypt","kms:GenerateDataKey"],"Resource": "<your-kms-key-arn>"}
Once your IAM role is created and its trust policy is configured, copy your AWS Role ARN.
Dynatrace immediately verifies that the correct role is being assumed when you save the connection.
Your forwarding configuration is active by default. Records passing through or entering an ingest source or a pipeline are forwarded to cloud object storage.
You learned how to set up a connection with your cloud vendor and how to create a new forwarding configuration in OpenPipeline. You can now start to forward unprocessed or processed records from Dynatrace to your cloud object storage.
Use the self-monitoring metrics to observe
dt.sfm.openpipeline.forwarding.successful_records)dt.sfm.openpipeline.forwarding.failed_records)You can query them via
Notebooks and
Dashboards.
// successtimeseries { sum=sum(dt.sfm.openpipeline.forwarding.successful_records) },by: { forwarding.destination, forwarding.name, forwarding.id }
// failuretimeseries { sum=sum(dt.sfm.openpipeline.forwarding.failed_records) },by: { forwarding.destination, forwarding.name, reason, forwarding.id }
For the full reference, including dimensions and values, see OpenPipeline self-monitoring metrics.
Use the OpenPipeline usage overview ready-made dashboard in
Dashboards to track forwarding metrics and usage events.