Cost allocation

  • 16min
  • Published Mar 31, 2025

Cost Allocation is exclusively available for Dynatrace SaaS environments with a Dynatrace Platform Subscription (DPS) licensing agreement that was signed after April 2023.

Dynatrace Cost Allocation lets you allocate Dynatrace DPS usage to customer-defined cost centers, products, or both. This gives you a transparent and detailed account of each cost center’s Dynatrace expenditures, helping your organization optimize its budgets.

You can customize the use of these fields to fit your company's organizational framework:

  • Costs can be allocated to customer-defined cost centers, products, or both.

  • Data is collected from all OneAgent deployments and Kubernetes pods (whether Full-Stack Monitoring or application-only monitoring) where Cost Allocation has been configured.

  • Data can be

    • Analyzed in Dynatrace via DQL, Dashboards Dashboards, or Notebooks Notebooks.
    • Exported for viewing and editing in separate tools such as Excel and Power BI.

The figure below shows how different components in a given Dynatrace environment can be assigned to different cost centers and products.

Cost Allocation overview

Concepts

Host tag

The parameter that assigns a host to a specific cost center or product.

Host property

Sometimes used as a synonym for "host tag."

Cost center

A specific cost center within your organization. This is defined according to your organizational structure. Costs in Dynatrace can be allocated to specific cost centers.

Product

A single product, or group of products, offered by your organization. Costs in Dynatrace can be allocated to specific products.

Required permissions

In order to access Cost Allocation data, a user needs certain permissions as described in the table below.

Capability
View account
View and manage account and billing information
View and manage users and groups
View Cost Allocation Allow List
required
required
Edit Cost Allocation Allow List
required
required
View Cost Allocation Usage/Costs
required
required

Supported capabilities

Cost Allocation is supported where OneAgent is deployed, whether on a physical host, Kubernetes node, Kubernets pod, or cloud server.

You can use Cost Allocation with the following Dynatrace capabilities:

  • Host Monitoring:

    • Full-Stack Monitoring
    • Infrastructure Monitoring
    • Foundation & Discovery
  • Application Security:

    • Runtime Vunerability Analytics
    • Runtime Application Protection

We're continuously extending Cost Allocation support to cover additional Dynatrace capabilities. For complete details regarding your licensing agreement, please contact your Dynatrace account manager. For more details about specific capabilities, see Monitoring consumption per capability.

Set up Cost Allocation

Steps

This section describes how to set up Cost Allocation in your Dynatrace environment.

required

Cost Allocation is configured at the host level. One host can be allocated to a maximum of one cost center and one product. For tips on how to allocate shared costs, where a single host is used by multiple cost centers or products, see Handling shared costs.

Cost Allocation is "opt-in"; you need to explicitly define the cost centers and products to which costs are allocated. Up to 250 cost centers and 250 products can be defined.

The definitions are managed in two separate allow lists, which you can configure either via Account Management or via the Dynatrace API:

  • Cost center allow list
  • Product allow list

Changes to the allow lists are not applied retroactively. If you remove a cost center or product from its allow list, historical reports will still show the usage and costs associated with the value before it was removed.

To find the two allow lists, go to Account Management > Subscription > Cost management. The allow lists are visible in the Cost center allow list and Product allow list sections.

To add a new cost center or product, select Cost center and follow the steps.

Account management cost center allow list for Cost Allocation host tags

required

Use host tags to configure Cost Allocation on the host. You can add, modify, or remove host tags. This section describes each of the different ways that you can configure Cost Allocation.

Add host tags

OneAgent version 1.291+

When you install OneAgent on a new host, you can use tags to add this host to an existing host group.

  1. In the Install OneAgent page, go to Optional parameters > Tags.

  2. Select Add tag.

    1. Enter the Key and Value as appropriate:

    2. Select Add.

  3. Continue to install OneAgent.

Modify host tags

Past tracked consumption cannot be changed or reassigned. If you modify host tags, all existing data about already-recorded costs (related to that host tag and that host) will be lost.

Before you reassign existing host tags, you might want to export the existing data via the Dynatrace Platform Subscription API - GET cost allocation.

Before changing the values for dt.cost.costcenter or dt.cost.product, add or remove the target values in the Cost Allocation allow lists. This will ensure that no usage values are unassigned during the transition.

Note that updates to the allow list will take a couple of minutes to go into effect.

To modify existing tags, follow the steps in Add host tags. The new values will overwrite the existing values.

Remove host tags

Removing host tags is irreversible. If you modify host tags, all existing data about already-recorded costs (related to that host tag and that host) will be lost.

The dt.cost.costcenter and dt.cost.product values can be removed from the OneAgent configuration whenever necessary. Run the following command to remove Cost Allocation host tags.

  1. First, identify the cost center or product from which the host should be removed. You've already defined cost centers and hosts in Identify allowed cost centers and products.

  2. Execute oneagentctl with the --remove-host-tag option. This option has two forms:

    • To remove the cost center: --remove-host-tag=dt.cost.costcenter=<cost-center>
    • To remove the product: --remove-host-tag=dt.cost.product=<product>
  3. Verify that host tags are removed. Use the --get-host-tags and --get-host-properties commands and review the output.

  4. Restart OneAgent with the --restart-service command.

optional

This section describes how to set cost center and product attributes for Kubernetes deployments in host-based and container-based deployments.

The Kubernetes-specific usage of dt.cost.costcenter and dt.cost.product is described in Security context and Cost Allocation.

Host-based Full-Stack Monitoring Kubernetes deployments

Pass the configuration via the args parameter in the DynaKube parameters for Dynatrace Operator. The code block provides a snippet from the configuration file to show the usage of --set-host-tag=dt.cost.costcenter=<cost-center> and --set-host-tag=dt.cost.product=<product>.

spec:
apiUrl: https://<environment-id>.live.dynatrace.com/api
oneAgent:
cloudNativeFullStack:
args:
- --set-host-tag=dt.cost.costcenter=it_services
- --set-host-tag=dt.cost.product=fin_app

Container-based application-only monitoring Kubernetes deployments

Use Kubernetes Metadata Enrichment to configure Cost Allocation for Kubernetes application-only monitoring environments.

Kubernetes Metadata Enrichment settings do not apply to Kubernetes clusters that have a cluster-specific rule set.

To configure the data enrichment on the Kubernetes cluster level, go to Kubernetes > [Kubernetes Cluster] > Settings > Enrichment rules.

To add or modify global enrichment settings:

  1. Go to Settings > Cloud and virtualization > Kubernetes enrichment rules.

  2. Select Add rule.

  3. In the Metadata type dropdown, select Annotation or Label.

  4. In the Source field, enter the appropriate annotation or label key. Follow Kubernetes conventions as described below.

    • source must follow the pattern (prefix/)?name and be 75 characters or fewer.
    • prefix must follow the pattern [a-z0-9]([-a-z0-9]*[a-z0-9])?(.[a-z0-9]([-a-z0-9]*[a-z0-9])?).
    • name must follow the pattern (\[A-Za-z0-9]\[-A-Za-z0-9\_.]\*)?\[A-Za-z0-9] and be 63 characters or fewer.
  5. Select the Target, whether dt.cost.costcenter or dt.cost.product.

  6. Select Save changes.

  7. Wait for up to 45 minutes and restart your pod(s).

To remove global enrichment settings:

  1. Go to Settings > Cloud and virtualization > Kubernetes enrichment rules.
  2. Delete the rule that you want to remove.
  3. Wait for up to 45 minutes and restart your pod(s).

Best practices

This section provides best practices for setting up Cost Allocation.

Cost center and product names

How you name your cost centers and products is up to you. We recommend

  • For cost centers: Use the organizational level to which the costs belong.
  • For products: Use the application or product group to which the costs belong.

Values can be provided as text or numerical strings. If you have both, we recommend to use both the text-based name and the ID, separated by a comma (,) or slash (/). This lets you separate the name and ID after a data export.

Examples:

Host
Cost center
Product
Host 1
dt.cost.costcenter=BusinessUnit1/Bu1
dt.cost.product=AppName/AppID
Host 2
dt.cost.costcenter=BusinessUnit2/Bu2
dt.cost.product=AppName/AppID
Host 3
dt.cost.costcenter=BusinessUnit2/Bu2
dt.cost.product=AppName/AppID

Handling shared costs

If your host shares services, Cost Allocation doesn't support costs billed to separate cost centers or products. However, you can create a cost center or product for that host and then allocate its costs outside of Dynatrace.

  1. Create a cost center or product for both entities, such as dt.cost.product="Webpage_MobileApp" for a host that should be allocated to both the webpage product and the mobile app product.
  2. When you want to analyze past data, retrieve the data from Account Management and import them into an Excel or Power BI board.
  3. You can take the host's total costs and split them according to your requirements.

DPS licensing consumption and related costs are based on 15-minute increments. Reports are generated daily, so you won't be able to see usage accrued in the previous <24 hours.

Analyze Cost Allocation data

To analyze Cost Allocation data, you can

Analyze in Dynatrace

Cost Allocation data is stored in Dynatrace Grail as billing usage events. These events can be analyzed

  • In Dashboards Dashboards and Notebooks Notebooks. Dynatrace provides a built-in Dashboard, DPS Cost Allocation usage & costs. Examples from this dashboard are provided below.
  • Via DQL queries. Example DQL queries are provided below.

Visit the Dynatrace DPS Cost Allocation community to see how other Dynatracers analyze their Cost Allocation data.

Analyze in Dashboards and Notebooks

To analyze Cost Allocation data, you can use the pre-made dashboard. The dashboard is available

  • By default in the built-in environment.

  • As a JSON file, which you can upload to any other Dynatrace environment.

    1. Copy the JSON contents from the code block below and save them to a file on your computer.

      {
      "version": 16,
      "variables": [
      {
      "key": "Capability",
      "type": "csv",
      "visible": true,
      "input": "Full-Stack Monitoring,Infrastructure Monitoring,Foundation & Discovery,Runtime Vulnerability Analytics,Runtime Application Protection",
      "multiple": false,
      "defaultValue": "Full-Stack Monitoring"
      },
      {
      "key": "Ratecard",
      "type": "query",
      "visible": false,
      "input": "data record(Ratecard = 0.01) // default is \"Full-Stack Monitoring\", 0.01 \n| fieldsAdd Ratecard = if($Capability == \"Full-Stack Monitoring\", toDouble($Price_Fullstack_Monitoring))\n| fieldsAdd Ratecard = if($Capability == \"Infrastructure Monitoring\", toDouble($Price_Infrastructure_Monitoring), else:Ratecard)\n| fieldsAdd Ratecard = if($Capability == \"Foundation & Discovery\", toDouble($Price_Foundation_Discovery), else:Ratecard)\n| fieldsAdd Ratecard = if($Capability == \"Runtime Vulnerability Analytics\", toDouble($Price_Runtime_Vulnerability_Analytics)/1024/1024, else:Ratecard)\n| fieldsAdd Ratecard = if($Capability == \"Runtime Application Protection\", toDouble($Price_Application_Protection)/1024/1024, else:Ratecard)\n| fields Ratecard",
      "multiple": false
      },
      {
      "key": "Price_Fullstack_Monitoring",
      "type": "text",
      "visible": true,
      "defaultValue": "0.01"
      },
      {
      "key": "Price_Infrastructure_Monitoring",
      "type": "text",
      "visible": true,
      "defaultValue": "1"
      },
      {
      "key": "Price_Foundation_Discovery",
      "type": "text",
      "visible": true,
      "defaultValue": "0.00225"
      },
      {
      "key": "Price_Runtime_Vulnerability_Analytics",
      "type": "text",
      "visible": true,
      "defaultValue": "0.00225"
      },
      {
      "key": "Price_Application_Protection",
      "type": "text",
      "visible": true,
      "defaultValue": "0.00225"
      }
      ],
      "tiles": {
      "0": {
      "type": "data",
      "title": "Overview per product",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| summarize sum(usage), alias: `usage`, by: { dt.cost.product}\n|fieldsAdd `cost USD` = `usage` * toDouble($Ratecard)\n| sort `cost USD` desc\n| fieldsAdd dt.cost.product = if(isNull(dt.cost.product), \"unallocated\", else:dt.cost.product)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "table",
      "visualizationSettings": {
      "thresholds": [
      {
      "id": 1,
      "field": "costs",
      "title": "",
      "isEnabled": true,
      "rules": [
      {
      "id": 0,
      "color": {
      "Default": "var(--dt-colors-charts-categorical-color-09-default, #649438)"
      },
      "comparator": "≤",
      "label": "",
      "value": 220
      },
      {
      "id": 1,
      "color": {
      "Default": "var(--dt-colors-charts-categorical-color-14-default, #d56b1a)"
      },
      "comparator": ">",
      "label": "",
      "value": 220
      },
      {
      "id": 2,
      "color": {
      "Default": "var(--dt-colors-charts-categorical-color-12-default, #cd3741)"
      },
      "comparator": "≥",
      "label": "",
      "value": 255
      }
      ]
      }
      ],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.product"],
      "categoryAxisLabel": "dt.cost.product",
      "valueAxis": ["usage", "cost USD"],
      "valueAxisLabel": "usage,cost USD",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.cost.product",
      "prefixIcon": "",
      "recordField": "dt.cost.product",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [["gibibyte"]],
      "lineWrapIds": [["count"]],
      "columnWidths": {
      "[\"dt.cost.product\"]": 196.96875,
      "[\"usage\"]": 91.11250305175781
      },
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "usage" },
      "legend": "auto",
      "displayedFields": ["dt.cost.product"],
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [
      { "valueAxis": "usage", "rangeAxis": "" },
      { "valueAxis": "cost USD", "rangeAxis": "" }
      ],
      "variant": "single",
      "displayedFields": ["dt.cost.product"]
      },
      "unitsOverrides": [
      {
      "identifier": "costs",
      "unitCategory": "currency",
      "baseUnit": "usd",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "USD",
      "delimiter": true,
      "added": 1712838776597
      },
      {
      "identifier": null,
      "unitCategory": "currency",
      "baseUnit": "usd",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "USD",
      "delimiter": false,
      "added": 1720435664184
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "1": {
      "type": "data",
      "title": "Overview per costcenter",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| summarize sum(usage), alias: `usage`, by: { dt.cost.costcenter}\n| sort dt.cost.costcenter\n| fieldsAdd `cost USD` = `usage` * toDouble($Ratecard)\n| sort `cost USD` desc\n| fieldsAdd dt.cost.costcenter = if(isNull(dt.cost.costcenter), \"unallocated\", else:dt.cost.costcenter)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "table",
      "visualizationSettings": {
      "thresholds": [
      {
      "id": 1,
      "field": "costs",
      "title": "",
      "isEnabled": true,
      "rules": [
      {
      "id": 0,
      "color": {
      "Default": "var(--dt-colors-charts-categorical-color-09-default, #649438)"
      },
      "comparator": "≤",
      "label": "",
      "value": 5
      },
      {
      "id": 1,
      "color": {
      "Default": "var(--dt-colors-charts-categorical-color-14-default, #d56b1a)"
      },
      "comparator": ">",
      "label": "",
      "value": 5
      },
      {
      "id": 2,
      "color": {
      "Default": "var(--dt-colors-charts-categorical-color-12-default, #cd3741)"
      },
      "comparator": ">",
      "label": "",
      "value": 9
      }
      ]
      }
      ],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.costcenter"],
      "categoryAxisLabel": "dt.cost.costcenter",
      "valueAxis": ["usage", "cost USD"],
      "valueAxisLabel": "usage,cost USD",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.cost.product",
      "prefixIcon": "",
      "recordField": "dt.cost.product",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [["gibibyte"]],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "usage" },
      "legend": "auto",
      "displayedFields": ["dt.cost.costcenter"],
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [
      { "valueAxis": "usage", "rangeAxis": "" },
      { "valueAxis": "cost USD", "rangeAxis": "" }
      ],
      "variant": "single",
      "displayedFields": ["dt.cost.costcenter"]
      },
      "unitsOverrides": [
      {
      "identifier": "costs",
      "unitCategory": "currency",
      "baseUnit": "usd",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "$",
      "delimiter": true,
      "added": 1712838812292
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "2": {
      "type": "data",
      "title": "Top Costcenter",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| summarize sum(usage), alias: `usage`, by: { dt.cost.costcenter=if(isNull(dt.cost.costcenter), \"unallocated\", else:dt.cost.costcenter)}\n| sort `usage` desc\n| limit 1\n| fieldsKeep dt.cost.costcenter\n| fieldsRename `top costcenter`= dt.cost.costcenter",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "singleValue",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxisLabel": "top costcenter",
      "valueAxisLabel": "",
      "categoryAxis": ["top costcenter"],
      "valueAxis": [],
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "top costcenter",
      "prefixIcon": "",
      "recordField": "top costcenter",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": {},
      "legend": "auto",
      "displayedFields": [],
      "colorMode": "color-palette",
      "colorPalette": "categorical"
      },
      "histogram": {
      "dataMappings": [],
      "variant": "single",
      "displayedFields": ["top costcenter"]
      }
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "5": {
      "type": "data",
      "title": "Top Product",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| summarize sum(usage), alias: `usage`, by: { dt.cost.product=if(isNull(dt.cost.product), \"unallocated\", else:dt.cost.product)}\n| sort `usage` desc\n| limit 1\n| fieldsKeep dt.cost.product\n| fieldsRename `top product`= dt.cost.product",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "singleValue",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxisLabel": "top product",
      "valueAxisLabel": "",
      "categoryAxis": ["top product"],
      "valueAxis": [],
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "top product",
      "prefixIcon": "",
      "recordField": "top product",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": {},
      "displayedFields": [],
      "legend": { "hidden": false, "position": "auto" },
      "colorMode": "color-palette",
      "colorPalette": "categorical"
      },
      "histogram": {
      "dataMappings": [],
      "variant": "single",
      "displayedFields": ["top product"]
      }
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "6": {
      "type": "data",
      "title": "Top Costcenter",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| summarize sum(usage), alias: `usage`, by: { dt.cost.costcenter}\n| sort `usage` desc\n| limit 1\n| fieldsAdd `top costcenter`= `usage` * toDouble($Ratecard)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "singleValue",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.costcenter"],
      "categoryAxisLabel": "dt.cost.costcenter",
      "valueAxis": ["usage", "top costcenter"],
      "valueAxisLabel": "usage,top costcenter",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "top costcenter",
      "prefixIcon": "",
      "recordField": "top costcenter",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "usage" },
      "displayedFields": ["dt.cost.costcenter"],
      "legend": { "hidden": false, "position": "auto" },
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [
      { "valueAxis": "usage", "rangeAxis": "" },
      { "valueAxis": "top costcenter", "rangeAxis": "" }
      ],
      "variant": "single",
      "displayedFields": ["dt.cost.costcenter"]
      },
      "unitsOverrides": [
      {
      "identifier": "top costcenter",
      "unitCategory": "currency",
      "baseUnit": "usd",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "$",
      "delimiter": true,
      "added": 1712838491820
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "7": {
      "type": "data",
      "title": "Top Product",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| summarize sum(usage), alias: `usage`, by: { dt.cost.product}\n| sort `usage` desc\n| limit 1\n| fieldsAdd `top product`= `usage` * toDouble($Ratecard)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "singleValue",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.product"],
      "categoryAxisLabel": "dt.cost.product",
      "valueAxis": ["usage", "top product"],
      "valueAxisLabel": "usage,top product",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "top product",
      "prefixIcon": "",
      "recordField": "top product",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "usage" },
      "displayedFields": ["dt.cost.product"],
      "legend": { "hidden": false, "position": "auto" },
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [
      { "valueAxis": "usage", "rangeAxis": "" },
      { "valueAxis": "top product", "rangeAxis": "" }
      ],
      "variant": "single",
      "displayedFields": ["dt.cost.product"]
      },
      "unitsOverrides": [
      {
      "identifier": "top product",
      "unitCategory": "currency",
      "baseUnit": "usd",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "$",
      "delimiter": true,
      "added": 1712838641069
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "11": {
      "type": "data",
      "title": "",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours) \n| fieldsAdd costs = usage * toDouble($Ratecard)\n| makeTimeseries sum(costs), by:{event.type}",
      "visualization": "lineChart",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "hiddenLegendFields": ["interval"],
      "fieldMapping": {
      "timestamp": "timeframe",
      "leftAxisValues": ["sum(costs)"]
      },
      "categoricalBarChartSettings": {
      "categoryAxis": ["event.type"],
      "valueAxis": ["interval"],
      "categoryAxisLabel": "event.type",
      "valueAxisLabel": "interval",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle",
      "valueRepresentation": "absolute",
      "xAxisLabel": "timeframe",
      "xAxisIsLabelVisible": false,
      "leftYAxisSettings": {}
      },
      "singleValue": {
      "showLabel": true,
      "label": "billed_gibibyte_hours",
      "prefixIcon": "",
      "recordField": "billed_gibibyte_hours",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": true }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": [
      {
      "fields": ["sum(costs)"],
      "value": "sparkline",
      "id": 1734615873508
      }
      ]
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "event.type" },
      "displayedFields": ["event.type"],
      "legend": { "hidden": false, "position": "auto" },
      "colorMode": "color-palette",
      "colorPalette": "categorical"
      },
      "histogram": {
      "dataMappings": [{ "valueAxis": "interval", "rangeAxis": "" }],
      "variant": "single",
      "displayedFields": ["event.type"]
      },
      "unitsOverrides": [
      {
      "identifier": "sum(costs)",
      "unitCategory": "currency",
      "baseUnit": "usd",
      "displayUnit": null,
      "decimals": 0,
      "suffix": "USD",
      "delimiter": false,
      "added": 1713254980105
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      },
      "davis": {},
      "segments": { "tileSegmentsEnabled": false, "tileSegments": [] }
      },
      "15": {
      "type": "data",
      "title": "Usage",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| makeTimeseries sum(usage), by:{event.type}\n",
      "visualization": "areaChart",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "hiddenLegendFields": ["interval"],
      "fieldMapping": {
      "timestamp": "timeframe",
      "leftAxisValues": ["sum(usage)"]
      },
      "categoricalBarChartSettings": {
      "categoryAxis": ["event.type"],
      "valueAxis": ["interval"],
      "categoryAxisLabel": "event.type",
      "valueAxisLabel": "interval",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle",
      "valueRepresentation": "absolute",
      "xAxisLabel": "timeframe",
      "xAxisIsLabelVisible": false,
      "leftYAxisSettings": {}
      },
      "singleValue": {
      "showLabel": true,
      "label": "billed_gibibyte_hours",
      "prefixIcon": "",
      "recordField": "billed_gibibyte_hours",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": true }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": [
      {
      "fields": ["sum(usage)"],
      "value": "sparkline",
      "id": 1734617546639
      }
      ]
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "event.type" },
      "legend": "auto",
      "displayedFields": ["event.type"],
      "colorMode": "color-palette",
      "colorPalette": "categorical"
      },
      "histogram": {
      "dataMappings": [{ "valueAxis": "interval", "rangeAxis": "" }],
      "variant": "single",
      "displayedFields": ["event.type"]
      },
      "unitsOverrides": [
      {
      "identifier": "interval",
      "unitCategory": "time",
      "baseUnit": "nanosecond",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "$",
      "delimiter": false,
      "added": 1713254980105
      },
      {
      "identifier": "sum(billed_gibibyte_hours)",
      "unitCategory": "data",
      "baseUnit": "gibibyte",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "",
      "delimiter": false,
      "added": 1720169506924
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 10000,
      "defaultScanLimitGbytes": 5000,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      },
      "davis": {}
      },
      "16": {
      "type": "data",
      "title": "Usage per Product",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| makeTimeseries sum(usage), alias: `unallocated`, by:{dt.cost.product}\n| fieldsAdd dt.cost.product = if(isNull(dt.cost.product), \"unallocated\", else:dt.cost.product)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "lineChart",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.product"],
      "categoryAxisLabel": "dt.cost.product",
      "valueAxis": ["interval"],
      "valueAxisLabel": "interval",
      "tooltipVariant": "single"
      },
      "hiddenLegendFields": ["interval"],
      "fieldMapping": {
      "timestamp": "timeframe",
      "leftAxisValues": ["unallocated"]
      },
      "truncationMode": "middle",
      "valueRepresentation": "absolute",
      "xAxisLabel": "timeframe",
      "xAxisIsLabelVisible": false,
      "leftYAxisSettings": {}
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.cost.costcenter",
      "prefixIcon": "",
      "recordField": "dt.cost.costcenter",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": true }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": [
      {
      "fields": ["unallocated"],
      "value": "sparkline",
      "id": 1734617227642
      }
      ]
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "dt.cost.product" },
      "legend": "auto",
      "displayedFields": ["dt.cost.product"],
      "colorMode": "color-palette",
      "colorPalette": "categorical"
      },
      "histogram": {
      "dataMappings": [{ "valueAxis": "interval", "rangeAxis": "" }],
      "variant": "single",
      "displayedFields": ["dt.cost.product"]
      },
      "unitsOverrides": [
      {
      "identifier": "interval",
      "unitCategory": "time",
      "baseUnit": "nanosecond",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "",
      "delimiter": false,
      "added": 1720169570984
      },
      {
      "identifier": "unassigned",
      "unitCategory": "data",
      "baseUnit": "gibibyte",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "",
      "delimiter": false,
      "added": 1720169591630
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "17": {
      "type": "markdown",
      "title": "",
      "content": "# Showback Usage Details for $Capability and configured hosts\nThis value shows the sum of all cost allocation configured hosts"
      },
      "19": {
      "type": "data",
      "title": "Usage per Product Top 15",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| summarize total= sum(coalesce(billed_host_hours, billed_gibibyte_hours)), by:{dt.cost.product}\n| sort `dt.cost.product` desc\n| limit 15\n| fieldsAdd dt.cost.product = if(isNull(dt.cost.product), \"unallocation\", else:dt.cost.product)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "donutChart",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.product"],
      "categoryAxisLabel": "dt.cost.product",
      "valueAxis": ["total"],
      "valueAxisLabel": "total",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.cost.product",
      "prefixIcon": "",
      "recordField": "dt.cost.product",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "legend": "auto",
      "dataMappings": { "value": "total" },
      "displayedFields": ["dt.cost.product"],
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [{ "valueAxis": "total", "rangeAxis": "" }],
      "variant": "single",
      "displayedFields": ["dt.cost.product"]
      }
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "20": {
      "type": "data",
      "title": "Usage per Cost-Center Top 15",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| summarize total= sum (coalesce (billed_host_hours, billed_gibibyte_hours)), by:{dt.cost.costcenter}\n| sort `dt.cost.costcenter` desc\n| limit 15\n| fieldsAdd dt.cost.costcenter = if(isNull(dt.cost.costcenter), \"unallocated\", else:dt.cost.costcenter)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "donutChart",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.costcenter"],
      "categoryAxisLabel": "dt.cost.costcenter",
      "valueAxis": ["total"],
      "valueAxisLabel": "total",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.cost.costcenter",
      "prefixIcon": "",
      "recordField": "dt.cost.costcenter",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "legend": "auto",
      "dataMappings": { "value": "total" },
      "displayedFields": ["dt.cost.costcenter"],
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [{ "valueAxis": "total", "rangeAxis": "" }],
      "variant": "single",
      "displayedFields": ["dt.cost.costcenter"]
      }
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "23": {
      "type": "data",
      "title": "",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fields timestamp, usage=coalesce(billed_gibibyte_hours, billed_host_hours), dt.entity.host, dt.cost.costcenter, dt.cost.product, event.type\n| summarize hostname=takeLast(entityName(dt.entity.host)),dt.cost.costcenter=takeLast(dt.cost.costcenter), dt.cost.product=takeLast(dt.cost.product),`Usage (GiB/h)`= sum(usage), by:{dt.entity.host}\n| sort `Usage (GiB/h)` desc\n| fieldsAdd `cost USD`= `Usage (GiB/h)`* toDouble($Ratecard)\n| fieldsAdd dt.cost.costcenter = if(isNull(dt.cost.costcenter), \"unassigned\", else:dt.cost.costcenter)\n| fieldsAdd dt.cost.product = if(isNull(dt.cost.product), \"unassigned\", else:dt.cost.product)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "table",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxisLabel": "dt.entity.host,hostname,dt.cost.costcenter,dt.cost.product",
      "valueAxisLabel": "Usage (GiB/h),cost USD",
      "tooltipVariant": "single",
      "categoryAxis": ["dt.entity.host", "hostname", "dt.cost.costcenter", "dt.cost.product"],
      "valueAxis": ["Usage (GiB/h)", "cost USD"]
      },
      "hiddenLegendFields": [],
      "truncationMode": "middle"
      },
      "singleValue": {
      "showLabel": true,
      "label": "timestamp",
      "prefixIcon": "",
      "recordField": "timestamp",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": { "[\"hostname\"]": 392.078125 },
      "sortBy": {
      "columnId": "[\"billed_gibibyte_hours\"]",
      "direction": "descending"
      },
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "legend": "auto",
      "dataMappings": { "value": "Usage (GiB/h)" },
      "displayedFields": [
      "dt.entity.host",
      "hostname",
      "dt.cost.costcenter",
      "dt.cost.product"
      ],
      "colorMode": "color-palette",
      "colorPalette": "blue"
      },
      "histogram": {
      "dataMappings": [
      { "valueAxis": "Usage (GiB/h)", "rangeAxis": "" },
      { "valueAxis": "cost USD", "rangeAxis": "" }
      ],
      "variant": "single",
      "displayedFields": ["dt.entity.host", "hostname", "dt.cost.costcenter", "dt.cost.product"]
      }
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "24": {
      "type": "markdown",
      "title": "",
      "content": "# $Capability per host usage and cost summary"
      },
      "28": {
      "type": "data",
      "title": "Hosts without Cost Center or Product allocation",
      "query": "fetch dt.entity.host\n| join [\n fetch dt.system.events\n | filter event.kind == \"BILLING_USAGE_EVENT\"\n | filterOut isNull(dt.cost.costcenter) or isNull(dt.cost.product)\n | dedup dt.entity.host\n], kind:leftOuter, on:{left[id] == right[dt.entity.host]}\n| filter isNull(right.dt.entity.host)\n| fields {id, alias:hostname}, entity.name, {right.dt.cost.costcenter, alias:dt.cost.costcenter}, {right.dt.cost.product, alias:dt.cost.product}",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "table",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxisLabel": "hostname,entity.name",
      "valueAxisLabel": "",
      "tooltipVariant": "single",
      "categoryAxis": ["hostname", "entity.name"],
      "valueAxis": []
      },
      "truncationMode": "middle",
      "hiddenLegendFields": []
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.entity.host",
      "prefixIcon": "",
      "recordField": "dt.entity.host",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "sortBy": {
      "columnId": "[\"Usage (GiB/h)\"]",
      "direction": "descending"
      },
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "legend": { "hidden": false, "position": "auto" },
      "colorMode": "color-palette",
      "colorPalette": "categorical",
      "dataMappings": { "value": "hostname" },
      "displayedFields": ["hostname", "entity.name"]
      },
      "histogram": {
      "dataMappings": [],
      "variant": "single",
      "displayedFields": ["entity.name"]
      },
      "autoSelectVisualization": false
      },
      "querySettings": {
      "maxResultRecords": 10000,
      "defaultScanLimitGbytes": 5000,
      "maxResultMegaBytes": 1,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "29": {
      "type": "markdown",
      "title": "",
      "content": "# Total $Capability costs of configured hosts \nThis value shows the sum of all cost allocation configured hosts per time frame.\n"
      },
      "30": {
      "type": "data",
      "title": "$Capability Hosts with not-allowlisted fields",
      "query": "\nfetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| dedup dt.entity.host, sort: {timestamp desc}\n| filter dt.cost.costcenter == \"not-allowlisted\" or dt.cost.product == \"not-allowlisted\"\n| summarize count = count(), by:{dt.entity.host, dt.cost.costcenter, dt.cost.product}\n| fields hostname=entityName(dt.entity.host),dt.entity.host, dt.cost.costcenter, dt.cost.product",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "table",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["hostname", "dt.entity.host", "dt.cost.costcenter", "dt.cost.product"],
      "categoryAxisLabel": "hostname,dt.entity.host,dt.cost.costcenter,dt.cost.product",
      "valueAxis": [],
      "valueAxisLabel": "",
      "tooltipVariant": "single"
      },
      "truncationMode": "middle",
      "xAxisLabel": "timestamp",
      "xAxisIsLabelVisible": false,
      "valueRepresentation": "absolute",
      "hiddenLegendFields": [],
      "leftYAxisSettings": {}
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.entity.host",
      "prefixIcon": "",
      "recordField": "dt.entity.host",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": false }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": []
      },
      "honeycomb": {
      "shape": "hexagon",
      "legend": { "hidden": false, "position": "auto" },
      "colorMode": "color-palette",
      "colorPalette": "categorical",
      "dataMappings": { "value": "hostname" },
      "displayedFields": ["hostname", "dt.entity.host", "dt.cost.costcenter", "dt.cost.product"]
      },
      "histogram": {
      "dataMappings": [],
      "variant": "single",
      "displayedFields": ["hostname", "dt.entity.host", "dt.cost.costcenter", "dt.cost.product"]
      },
      "autoSelectVisualization": false
      },
      "querySettings": {
      "maxResultRecords": 10000,
      "defaultScanLimitGbytes": 5000,
      "maxResultMegaBytes": 1,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "31": {
      "type": "markdown",
      "title": "",
      "content": "# Cost Details for $Capability and configured hosts\nThis value shows the cost sum of all cost allocation configured hosts"
      },
      "32": {
      "type": "data",
      "title": "Usage per Cost Center",
      "query": "fetch dt.system.events\n| filter event.kind == \"BILLING_USAGE_EVENT\"\n| filter event.type == $Capability\n| fieldsAdd usage = coalesce(billed_host_hours, billed_gibibyte_hours)\n| makeTimeseries sum(usage), alias: `unallocated`, by:{dt.cost.costcenter}\n| fieldsAdd dt.cost.costcenter = if(isNull(dt.cost.costcenter), \"unallocated\", else:dt.cost.costcenter)",
      "davis": {
      "enabled": false,
      "davisVisualization": { "isAvailable": true }
      },
      "visualization": "lineChart",
      "visualizationSettings": {
      "thresholds": [],
      "chartSettings": {
      "xAxisScaling": "analyzedTimeframe",
      "gapPolicy": "connect",
      "circleChartSettings": {
      "groupingThresholdType": "relative",
      "groupingThresholdValue": 0,
      "valueType": "relative"
      },
      "categoryOverrides": {},
      "categoricalBarChartSettings": {
      "categoryAxis": ["dt.cost.costcenter"],
      "categoryAxisLabel": "dt.cost.costcenter",
      "valueAxis": ["interval"],
      "valueAxisLabel": "interval",
      "tooltipVariant": "single"
      },
      "hiddenLegendFields": ["interval"],
      "fieldMapping": {
      "timestamp": "timeframe",
      "leftAxisValues": ["unallocated"]
      },
      "truncationMode": "middle",
      "valueRepresentation": "absolute",
      "xAxisLabel": "timeframe",
      "xAxisIsLabelVisible": false,
      "leftYAxisSettings": {}
      },
      "singleValue": {
      "showLabel": true,
      "label": "dt.cost.costcenter",
      "prefixIcon": "",
      "recordField": "dt.cost.costcenter",
      "autoscale": true,
      "alignment": "center",
      "colorThresholdTarget": "value",
      "trend": { "trendType": "auto", "isVisible": true }
      },
      "table": {
      "rowDensity": "condensed",
      "enableSparklines": false,
      "hiddenColumns": [],
      "lineWrapIds": [],
      "columnWidths": {},
      "columnTypeOverrides": [
      {
      "fields": ["unallocated"],
      "value": "sparkline",
      "id": 1734617227551
      }
      ]
      },
      "honeycomb": {
      "shape": "hexagon",
      "dataMappings": { "value": "dt.cost.costcenter" },
      "legend": "auto",
      "displayedFields": ["dt.cost.costcenter"],
      "colorMode": "color-palette",
      "colorPalette": "categorical"
      },
      "histogram": {
      "dataMappings": [{ "valueAxis": "interval", "rangeAxis": "" }],
      "variant": "single",
      "displayedFields": ["dt.cost.costcenter"]
      },
      "unitsOverrides": [
      {
      "identifier": "interval",
      "unitCategory": "time",
      "baseUnit": "nanosecond",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "",
      "delimiter": false,
      "added": 1720169570984
      },
      {
      "identifier": "unassigned",
      "unitCategory": "data",
      "baseUnit": "gibibyte",
      "displayUnit": null,
      "decimals": 2,
      "suffix": "",
      "delimiter": false,
      "added": 1720169591630
      }
      ]
      },
      "querySettings": {
      "maxResultRecords": 1000,
      "defaultScanLimitGbytes": 500,
      "maxResultMegaBytes": 100,
      "defaultSamplingRatio": 10,
      "enableSampling": false
      }
      },
      "33": {
      "type": "markdown",
      "title": "",
      "content": "Dashboard version: 1.3\n\nDisclaimer: \nThis is an example dashboard to show what can be done with our DPS Cost Allocation feature\n[DPS Cost Allocation Feature](https://docs.dynatrace.com/docs/manage/dynatrace-platform-subscription/cost-allocation)\nPlease ensure the above listed pricing variables match with your rate card pricing."
      },
      "34": {
      "type": "markdown",
      "title": "",
      "content": "# General hosts with missing Cost Allocation information\nAll hosts in the following list have not been configured for cost allocation"
      }
      },
      "layouts": {
      "0": { "x": 12, "y": 37, "w": 12, "h": 6 },
      "1": { "x": 0, "y": 37, "w": 12, "h": 6 },
      "2": { "x": 0, "y": 31, "w": 12, "h": 3 },
      "5": { "x": 12, "y": 31, "w": 12, "h": 3 },
      "6": { "x": 0, "y": 34, "w": 12, "h": 3 },
      "7": { "x": 12, "y": 34, "w": 12, "h": 3 },
      "11": { "x": 0, "y": 45, "w": 24, "h": 6 },
      "15": { "x": 0, "y": 4, "w": 24, "h": 5 },
      "16": { "x": 0, "y": 24, "w": 24, "h": 5 },
      "17": { "x": 0, "y": 2, "w": 24, "h": 2 },
      "19": { "x": 11, "y": 9, "w": 13, "h": 6 },
      "20": { "x": 0, "y": 9, "w": 11, "h": 6 },
      "23": { "x": 0, "y": 52, "w": 24, "h": 6 },
      "24": { "x": 0, "y": 51, "w": 24, "h": 1 },
      "28": { "x": 0, "y": 60, "w": 24, "h": 5 },
      "29": { "x": 0, "y": 43, "w": 24, "h": 2 },
      "30": { "x": 0, "y": 15, "w": 24, "h": 4 },
      "31": { "x": 0, "y": 29, "w": 24, "h": 2 },
      "32": { "x": 0, "y": 19, "w": 24, "h": 5 },
      "33": { "x": 0, "y": 0, "w": 24, "h": 2 },
      "34": { "x": 0, "y": 58, "w": 24, "h": 2 }
      },
      "importedWithCode": false,
      "settings": {}
      }
    2. In Dynatrace, go to the target environment and open Dashboards Dashboards.

    3. Select Upload Upload and use the file browser to locate the JSON file that you just saved.

    4. The pre-made dashboard is now visible in Dashboards Dashboards.

The costs shown in the demo dashboard are based on manual cost assignments as provided in the DQL query. They are not automatically cross-checked with your rate card.

Use DQL queries

This section provides various DQL queries that you can use to achieve specific use cases.

fetch dt.system.events
| filter event.kind == "BILLING_USAGE_EVENT"
fetch dt.system.events
| filter event.kind == "BILLING_USAGE_EVENT"
| summarize count = count(), by:{event.type,dt.cost.costcenter}

Export Cost Allocation data

If you want to view Cost Allocation data in a separate tool, such as Excel or Power BI, you can export the data.

DPS licensing consumption and related costs are based on 15-minute increments. Reports are generated daily, so you won't be able to see usage accrued in the previous <24 hours.

You can export Cost Allocation data via

  • Account Management.
  • The Dynatrace Account Management API.

Export Cost Allocation data via Account Management

In Account Management, you can download some or all Cost Allocation data from your current DPS subscription.

  1. Go to Account Management.
  2. Select License > Cost Management > Cost Allocation > Download cost allocation report.
  3. Select the Commitment period for the relevant subscription.
  4. Select the timeframe from which data should be exported: enter the appropriate dates for From and To.
  5. Select Request download.
  6. An email will be sent to the email account of the logged-in user. The email is sent from noreply@dynatrace.com, so you might want to check your whitelist to make sure that you can receive emails from this account. It contains a download link for the CSV file, which is valid for 24 hours.

Export Cost Allocation data via API

All Cost Allocation data can be retrieved via the Account Management API.

Before using the API, you need to generate an Account Management API Token as described in Authentication for the Account Management API. Additionally, your user will need the permission View usage and consumption: account-uac-read.

Use the following API call to retrieve Cost Allocation data. Parameters are described in Dynatrace Platform Subscription API - GET cost allocation.

GET /v1/subscriptions/{subscription-uuid}/cost-allocation?field={field}\&environment-id={environment-id}

An example response is provided in the code block below.

{
"records": [
{ "date": "2024-04-01", "capability": "FULLSTACK_MONITORING","key": "department-A", "costs": 10, "usage": 2000 },
{ "date": "2024-04-01", "capability": "FULLSTACK_MONITORING","key": "department-B", "costs": 40, "usage": 8000 },
{ "date": "2024-04-01", "capability": "LOGS", "key": "department-A", "costs": 70, "usage": 700 },
{ "date": "2024-04-01", "capability": "LOGS", "key": "department-B", "costs": 20, "usage": 200 },
{ "date": "2024-04-01", "capability": "FULLSTACK_MONITORING", "key": "department-E", "costs": 10, "usage": 2000 },
{ "date": "2024-04-01", "capability": "FULLSTACK_MONITORING", "key": "department-F", "costs": 50, "usage": 10000 },
{ "date": "2024-04-01", "capability": "FULLSTACK_MONITORING", "key": null, "costs": 60, "usage": 12000 },
{ "date": "2024-04-01", "capability": "LOGS", "key": null, "costs": 10, "usage": 100 },
{ "date": "2024-04-02", "capability": "FULLSTACK_MONITORING", "key": "department-A", "costs": 10, "usage": 2000 },
{ "date": "2024-04-02", "capability": "FULLSTACK_MONITORING", "key": "department-B", "costs": 40, "usage": 8000 },
{ "date": "2024-04-02", "capability": "FULLSTACK_MONITORING", "key": "department-C", "costs": 70, "usage": 14000 },
{ "date": "2024-04-02", "capability": "LOGS", "key": null, "costs": 500, "usage": 5000 }
// more daily records
],
"nextPageKey": "...",
"environmentId": "tenant-A",
"field": "COSTCENTER"
}

Troubleshooting

If you can't find Cost Allocation data:

  • Make sure you have a Dynatrace Platform Service (DPS) SaaS license.

  • Check your OneAgent version. Cost Allocation is supported for versions 1.291+.

  • Confirm that host tags are in the allow list.

    • Are all tag names correct?
    • Are all tags in Infrastructure & Operations Infrastructure & Operations also in the allow list?
    • If any used tags are not in the allow list, add them as described in Add host tags. Make sure that they're set on the OneAgent directly (i.e., via the command line), and not in the browser.
  • Did you perform a restart? When in doubt, restart OneAgent or your Kubernetes pod(s). Then wait up to 30 minutes and try again.