![]() |
VOOZH | about |
To use Azure Cloud Cost Management in Datadog, you must configure the Datadog Azure integration and create amortized and actual exports in Azure. Additionally, Datadog must have permissions to read the exports from the container.
Datadog provides cost visibility on a Subscription, Resource Group, and Billing Account Level. Microsoft Customer Agreements (MCA) can be set up at all three scopes. To determine your account type, see the Azure documentation.
Datadog Cloud Cost Management requires Actual Cost and Amortized Cost exports from Azure. PAYG (Microsoft Online Services Program) subscriptions typically provide only Usage details (usage only) exports, so they can't be set up for CCM. For the export types available to each Azure account type, see Microsoft's Cost Management exports documentation.
If your subscription is PAYG, consider one of the following options:
For help with Datadog CCM setup or to discuss options, contact Datadog support.
You can set up using the API, Terraform, or directly in Datadog by following the instructions below.
Note: If you are using Datadog’s US3 site, you may have set up the Datadog Azure Native integration using the Datadog Resource method through the Azure Portal. To support Cloud Cost Management, you need to create an app registration.
Navigate to Setup & Configuration, add an Azure account and follow the steps to configure the Azure integration.
Use the dropdown to select the scope type for your account. CCM supports the billing account, subscription, and resource group scope type.
The Terraform configuration supports three setups depending on your existing Azure resources:
Enter the following details for your configuration:
East US 2./ (such as / or /cost), or ending with / (such as cost/). Prefixes containing / in the middle are supported (such as cost/hourly).After the fields in Step 2 are complete, Step 3 enables and displays the generated Terraform HCL. Follow the instructions to set up your Terraform configuration files with this code. Resolve any issues that appear while running terraform plan or terraform apply before returning to CCM to configure cost exports.
Open the Azure console link to locate your cost exports. If needed, change the current scope to the correct one for your exports. For both actual and amortized exports, select them and click Edit to toggle on File Partitioning if not already enabled.
Save the File Partitioning changes and click Run Now. Return to CCM once both export runs have succeeded.
Follow the instructions in the Apply Datadog Terraform HCL step. Resolve any issues that appear while running terraform plan or terraform apply before returning to CCM to confirm account creation.
You need to generate exports for two data types: actual and amortized. Datadog recommends using the same storage container for both exports.
Navigate to [Cost Management | Configuration][5] under Azure portal’s Tools > Cost Management > Settings > Configuration and click Exports.
Select the export scope located next to the search filter.
Note: The scope must be billing account, subscription, or resource group.
After the scope is selected, click Schedule export.
Select the Cost and usage (actual + amortized) template
Click Edit on each export and confirm the following details:
Frequency: Daily export of month-to-date costs
Dataset version:
2021-10-01, 2021-01-01, 2020-01-012019-10-01Enter an “Export prefix” for the new exports. For example, enter datadog to avoid conflicts with existing exports.
In the Destination tab, select the following details:
. in these fields.On the Review + create tab, select Create.
Generate the first exports manually by clicking Run Now. Wait for successful completion before continuing.
Grant Datadog read access to the storage account where your exports are saved.
Note: You do not need to configure this access if your scope is Billing Account.
This helps ensure complete cost accuracy by allowing periodic cost calculations against Microsoft Cost Management.
Note: Data can take up to 48 to 72 hours after setup to stabilize in Datadog.
Note: If you have the proper permissions on the app registration but your network is blocking Datadog’s webhook IPs, you may encounter errors that appear to be permission-related.
To resolve this, add Datadog’s webhook IPs to your network allowlist by visiting the Webhooks section at https://ip-ranges..
Navigate to Setup & Configuration and follow the steps.
Azure exports cost data starting from the month you created the export. Datadog automatically ingests up to 15 months of available historical cost data from these exports. You can manually backfill up to 12 months of Azure cost data using the Azure Cost Exports UI.
Datadog automatically discovers and ingests this data, and it should appear in Datadog within 24 hours.
You can also create historical data in your storage account using the Microsoft API or by creating a support ticket with Microsoft. Ensure the file structure and partitioning follows the format of scheduled exports.
You can visualize your ingested data using the following cost types:
| Cost Type | Description |
|---|---|
azure.cost.amortized | Cost based on applied discount rates plus the distribution of pre-payments across usage for the discount term (accrual basis). |
azure.cost.actual | Cost shown as the amount charged at the time of usage (cash basis). Actual costs include private discounts as well as discounts from reserved instances and savings plans as separate charge types. |
azure.cost.discounted.ondemand | Cost based on the list rate provided by Azure, after privately negotiated discounts. To get the true on-demand cost, divide this metric by (1 - <negotiated_discount>). For example if you have a 5% flat rate discount across all Azure products, taking this metric and dividing by .95 (1-.05) provides the true on-demand price. |
Datadog automatically enriches your Azure cost data with tags from multiple sources. For a comprehensive overview of how tags are applied to cost data, see Tags.
The following out-of-the-box tags are derived from your usage cost report and make it easier to discover and understand cost data:
| Tag Name | Tag Description |
|---|---|
accountname | The name of the account associated with the line item. |
accountownerid | The ID of the owner associated with the line item. |
billingaccountid | The ID of the billing account associated with the line item. |
billingaccountname | The name of the billing account associated with the line item. |
billingcurrency | The currency associated with the billing account. |
billingperiod | The billing period of the charge. |
billingperiodenddate | The end date of the billing period. |
billingperiodstartdate | The start date of the billing period. |
billingprofileid | The unique identifier of the Enterprise Agreement enrollment. |
billingprofilename | The name of the Enterprise Agreement enrollment. |
chargetype | The type of charge covering the line item: Usage, Purchase, or Refund. |
consumedservice | The name of the service the line item is associated with. |
costcenter | The cost center defined for the subscription for tracking costs. |
costinbillingcurrency | The cost in the billing currency before credits or taxes. |
costinpricingcurrency | The cost in the pricing currency before credits or taxes. |
currency | The currency associated with the billing account. |
date | The usage or purchase date of the charge. |
effectiveprice | The blended unit price for the period. Blended prices average out any fluctuations in the unit price, like graduated tiering, which lowers the price as quantity increases. |
exchangeratedate | The date the exchange rate was established. |
exchangeratepricingtobilling | The exchange rate used to convert the cost in the pricing currency to the billing currency. |
frequency | Indicates whether a charge is expected to repeat. Charges can either happen once (OneTime), repeat on a monthly or yearly basis (Recurring), or be based on usage (Usage) |
InvoiceId | The unique document ID listed on the invoice PDF. |
invoicesectionid | The ID of the MCA invoice section. |
invoicesectionname | The name of the Enterprise Agreement (EA) department. |
isazurecrediteligible | true if the charge is eligible to be paid for using Azure credits. |
location | The data center location where the resource is running. |
metercategory | The top level service that this usage belongs to (such as Networking). |
meterid | The unique ID for the meter. |
metername | The usage details of the line item (such as L8s v2 or General Purpose Data Stored). |
meterregion | The data center location for the services priced based on location (such as West US 2). Use resourcelocation to see location data without N/A. |
metersubcategory | The name of the meter subclassification category (such as General Purpose - Storage). Use metername or metercategory to see top-level classification without N/A. |
offerid | The name of the offer purchased. |
partnumber | The ID used to get specific meter pricing. |
planname | The marketplace plan name if purchased through marketplace. |
PreviousInvoiceId | Reference to an original invoice if this line item is a refund. |
PricingCurrency | The currency used when rating based on negotiated prices. |
pricingmodel | The type of usage (such as Reservation). |
ProductId | The identifier for a specific Azure product. |
productname | The name of the Azure product at a granular level, such as VM or disk type and region. |
productorderid | The ID for the product order. Use productname to see top level product information without N/A. |
productordername | The name of the product order. Use productname to see top level product information without N/A. |
publishername | The publisher for marketplace services. |
publishertype | The type of publisher: Microsoft for Microsoft Customer Agreement accounts and Azure for Enterprise Agreement accounts. |
reservationid | The ID for the purchased reservation instance. If you see N/A values, these are OnDemand resources, which can be checked using the pricingmodel tag. |
reservationname | The name of the purchased reservation instance. If you see N/A values, these are OnDemand resources, which can be checked using the pricingmodel tag. |
resourcegroup | The name of the resource group the resource is in. Not all charges come from resources deployed to resource groups. |
resourceid | The ID of the Azure resource. |
resourcelocation | The data center location where the resource is running (such as westus2). |
resourcename | The name of the resource. Not all charges come from deployed resources. |
resourcetype | The type of the Azure resource. |
servicefamily | The service family that the service belongs to (such as Compute). The tag consumedservice has deeper insights on infrastructure types. |
ServicePeriodEndDate | The termination date of the Azure service period. |
ServicePeriodStartDate | The start date the Azure service period. |
subscriptionid | The ID of the Azure subscription. |
subscriptionname | The name of the Azure subscription. |
term | Describes the duration or term of the Savings Plan in months (such as 12). |
unitofmeasure | The unit of measure for billing for the service. For example, compute services are billed per hour. |
Viewing costs in context of observability data is important to understand how infrastructure changes impact costs, identify why costs change, and optimize infrastructure for both costs and performance. Datadog adds the name tag on cost data for top Azure products to simplify correlating observability and cost metrics.
For example, to view cost and utilization for each Azure VM, you can make a table with azure.cost.amortized and azure.vm.network_in_total (or any other VM metric) and group by name. Or, to see Storage usage and costs side by side, you can filter into metercategory:Storage and graph azure.storage.transactions and azure.cost.amortized grouped by name.
Additional helpful documentation, links, and articles:
| |