You can use Cost Allocation to allocate your Dynatrace Platform Subscription (DPS) usage to the cost centers and products that you define.
Allocating costs provides a transparent and detailed account of the Dynatrace expenditures that originate from each cost center or product, which in turn helps your organization optimize its budgets. Cost Allocation works with span data regardless of your ingestion method.
On this page, you'll learn how to set up Cost Allocation for span data.
For ingested traces, you can allocate costs related to ingest and query consumption.
We recommend setting up Cost Allocation along organizational lines and deployment scopes.
Suitable concepts include service.name, k8s.namespace.name, dt.host_group.id, and deployment.environment.
These attributes are typically available on all span data, regardless of ingest method.
To add Cost Allocation information to your span data, enrich your records with the dt.cost.costcenter and dt.cost.product Grail attributes.
Dynatrace automatically propagates these attributes from spans to the service entity and any resulting service metrics.
Cost Allocation works regardless of how the traces were ingested, whether via OneAgent extended trace ingestion or OpenTelemetry.
Depending on how you ingest your traces, there are different ways to allocate your costs. Our recommendations are:
With ingest enrichment, you can create rules to automatically enrich all ingested span signals with dt.cost.costcenter and dt.cost.product.
The data is stored in Grail:
Dashboards,
Notebooks, Account Management, and the Dynatrace API.For more information about enriching on ingest, see Configure ingest enrichment rules.
You can define Cost Allocation at the source via OneAgent, Kubernetes labels or annotations, or OpenTelemetry.
This lets you use your existing labels and tags, so that dt.cost.costcenter and dt.cost.product are already present when your data arrives.
If you only need to allocate costs at the deployment level of granularity, you can use OpenPipeline to
Do this in the Cost allocation and Product allocation stages in OpenPipeline.
Identify the primary Grail field that you want to base your allocation on, such as k8s.namespace.name or deployment.environment.
Go to OpenPipeline > Traces.
Go to the Pipelines tab, select an existing pipeline or create a new one, and go to the Cost allocation stage (to set dt.cost.costcenter) or the Product allocation stage (to set dt.cost.product).
Add a DPS Cost Allocation - Cost Center or DPS Cost Allocation - Product processor. Define a matching condition, such as:
matchesPhrase(deployment.release_stage, "prod-")
Set the value either as a static string, or copied from a field on the record.
For the full list of parameters and processor examples, see Cost allocation via OpenPipeline.
If you have a more sophisticated strategy for cost center tags, it might not be enough to map a single field directly to dt.cost.costcenter or dt.cost.product.
In this case, we recommend that you use a DQL processor in OpenPipeline to derive cost centers or products from a combination of fields, and then set dt.cost.costcenter or dt.cost.product from the resulting field with the Cost allocation stage. For examples, see OpenPipeline processing examples.
Traces often span multiple services, hosts, or clusters. Consider these recommendations when you allocate costs for Distributed Tracing:
dt.cost.costcenter/dt.cost.product values. Splitting a single trace's spans across multiple cost centers can make it harder to reconcile a trace's total DPS usage with a single cost center or product.Before you change the values of dt.cost.costcenter or dt.cost.product, make sure they're defined in the Cost Allocation allow lists.