Cloud Cost Recommendations

Overview

Cloud Cost Recommendations provides recommendations on reducing your cloud spending by optimizing the usage of your cloud resources. Datadog generates a set of recommendations by combining your observability data with your underlying cloud provider billing data to identify orphaned, legacy, or over-provisioned cloud resources.

Recommendations are run on a daily basis and are automatically refreshed in your account as soon as the recommendations are released.

  • For all resources, cloud cost metrics are also pulled for that resource
  • For all AWS resources besides Kubernetes and EC2, AWS metrics are also pulled from AWS CloudWatch
Overview tab with potential monthly savings, potential annual savings, and total number of open cases on the Cloud Cost Recommendations page

You can see the detailed logic for each recommendation type, along with observability metrics or cost data shown on this page.

Recommendations support Tag Pipelines, allowing you to filter, group, and analyze recommendations using your organization’s standardized tags. Any tag rules configured in Tag Pipelines are automatically applied to recommendations and are normalized.

Recommendation categories

Below are the available cloud cost recommendation categories and their descriptions.

Recommendation CategoryDescription
TerminateResources with signals that the resource is unused or very low utilization signals. Consider terminating or deleting these resources to reduce your costs.
MigrateResources with moderately low utilization signals or other inefficiencies. Consider adjusting the instance type or other parameters.
DownsizeResources that are under-utilized or over-provisioned. Consider adjusting the size or other parameters to reduce costs.
PurchaseResources with on-demand charges and extended uptime. Purchasing a reservation or Savings Plan can reduce the amortized cost of the resource.

Prerequisites

The following are requirements necessary to receive Cloud Cost recommendations:

Setup

For each cloud account that you would like to receive recommendations for:

  1. Configure Cloud Cost Management to send billing data to Datadog.
    • For Azure, this requires using the App Registration method to collect billing data.
  2. Enable resource collection for recommendations.
  3. Install the Datadog Agent (required for Downsize recommendations).

Note: Cloud Cost Recommendations supports billing in customers’ non-USD currencies.

Recommendation statuses

Assign a status to each recommendation to track cost optimization progress across your teams. Statuses persist when recommendations regenerate daily. You don’t need to re-triage the same recommendations.

StatusDescription
Open(Default) The recommendation has not been triaged.
In ProgressWork is underway to address this recommendation.
CompletedThe recommended action has been taken or is no longer relevant.
DismissedNo work is planned for this recommendation over the time frame specified when dismissing.

Change a recommendation status

  1. Click a recommendation in the Cloud Cost Recommendations list to open the side panel.
  2. Use the status dropdown to select a new status.

Recommendation action-taking

You can act on recommendations to save money and optimize costs. Cloud Cost Recommendations support Jira, 1-click Workflow Automation, and Datadog Case Management. Unused EBS and GP2 EBS volume recommendations also support 1-click Workflow Automation. See the following details for each action-taking option:

  • Jira: Create Jira issues directly from the recommendation side panel or by selecting multiple recommendations in the “Active Recommendations” list and clicking “Create Jira issue.” Created issues are tagged and link back to the recommendation in Datadog.

    To filter recommendations by Jira status, use the following query options:

    • @jira_issues.issue_key:* - Show only recommendations with a Jira issue
    • -@jira_issues.issue_key:* - Show only recommendations without a Jira issue
    • jira_issues.issue_key:ABC* - Filter by specific Jira project prefix
  • Bits AI Dev Agent code fixes: Code fixes are available for all S3 recommendations. In these situations, the Bits AI Dev Agent (in Preview) creates production-ready pull requests to implement cloud resource changes and cost optimizations. Join the Preview and set up the Bits AI Dev Agent to use this feature.

    Join the Preview!

    Bits AI Dev Agent is in Preview. To sign up, click Request Access and complete the form.

    Request Access
  • 1-click Workflow Automation actions: Actions are available for a limited set of recommendations, allowing users to execute suggested actions, such as clicking “Delete EBS Volume”, directly within Cloud Cost Management.

  • Datadog Case Management: Users can go to the recommendation side panel and click “Create Case” to generate a case to manage and take action on recommendations.

  • Dismiss: Use “Dismiss” in the recommendation side panel to hide a recommendation for a chosen time frame and provide a reason. Dismissed recommendations move to the “Dismissed” tab.

Recommendation and resource descriptions

Recommendation CategoryCloud ProviderResource TypeRecommendation TypeRecommendation DescriptionRecommendation Prerequisites
MigrateAWSAuto Scaling GroupMigrate ASG Legacy InstancesAn Auto Scaling group that includes legacy instance types.
DownsizeAWSAuto Scaling GroupReduce Minimum CapacityAn Auto Scaling group with a minimum capacity of instances that can be reduced.Datadog Agent
TerminateAWSCloudTrail TrailDelete unnecessary CloudTrail trailsCloudTrail trails with paid events can be deleted to reduce costs.
TerminateAWSDynamoDB TableDelete DynamoDB Global Secondary IndexA DynamoDB table’s Global Secondary Index (GSI) has 0 consumed reads.
TerminateAWSDynamoDB TableDelete DynamoDB TableA DynamoDB table has 0 consumed reads and 0 consumed non-replica writes.
TerminateAWSDynamoDB TableDelete Extra On-Demand BackupsA DynamoDB table has charges for more than 2 on-demand backups.
DownsizeAWSDynamoDB TableDownsize DynamoDB CapacityA provisioned DynamoDB table using less than 80% of its read and write capacity more than 80% of the time.
MigrateAWSDynamoDB TableMigrate DynamoDB to Infrequent Access Table ClassMigrating to the Infrequent Access (IA) table class offers more potential savings from storage rates compared to the additional costs from capacity rates.
MigrateAWSDynamoDB TableMigrate DynamoDB to On-Demand Capacity ModeA provisioned DynamoDB table has an hourly read and write capacity consumption below 18% at least once in the last two weeks.
MigrateAWSDynamoDB TableMigrate DynamoDB to Provisioned Capacity ModeAn on-demand DynamoDB table has an hourly read and write capacity consumption that is always greater than 18%.
MigrateAWSDynamoDB TableMigrate DynamoDB to Standard Table ClassMigrating to the Standard table class offers potential savings from capacity rates compared to the additional costs from storage rates, or it uses the Standard table class’ free tier for storage.
PurchaseAWSDynamoDB TablePurchase Reserved CapacityPurchase reserved capacity for stable provisioned capacity units charged at standard rates.
TerminateAWSEBS SnapshotDelete Old EBS SnapshotsEBS Snapshots that are at least 90 days old and can be deleted.
DownsizeAWSEBS VolumeDownsize EBS Volume Provisioned IOPSAn EBS volume using less than 80% of the provisioned IOPS for reads and writes.Amazon EC2 integration
DownsizeAWSEBS VolumeDownsize EBS Volume Provisioned ThroughputAn EBS volume using less than the configured threshold of the provisioned throughput for reads and writes.Amazon EC2 integration
DownsizeAWSEBS VolumeDownsize EBS Volume Storage CapacityAn EBS volume with less than 20% of its storage capacity used.Amazon EC2 integration
MigrateAWSEBS VolumeMigrate EBS Volume from GP2 to GP3EBS volumes that are GP2 and can be upgraded to GP3 for cost reduction and performance improvement.
MigrateAWSEBS VolumeMigrate EBS Volume from IO1 to GP3EBS volumes that are IO1 and can be upgraded to GP3 for cost reduction and performance improvement.
TerminateAWSEBS VolumeTerminate Unattached EBS VolumeVolume that is not attached to an EC2 instance.
TerminateAWSEBS VolumeTerminate Unused EBS VolumeVolume that has no read or write activity.
TerminateAWSElastic IPDelete Idle Elastic IPElastic IP addresses with idle charges in your AWS cost and usage report.
DownsizeAWSEC2 InstanceDownsize EC2 InstanceEC2 instances with CPU and memory utilization less than the available resources of the next smallest instance in the family. Without the Datadog Agent, this recommendation is generated using CloudWatch metrics.Datadog Agent
MigrateAWSEC2 InstanceMigrate EC2 InstanceEC2 Instances of a previous generation that can be upgraded to a newer instance type.
MigrateAWSEC2 InstanceMigrate EC2 Instance to Graviton TypeEC2 Instances that can be migrated to an equivalent Graviton instance type.
TerminateAWSEC2 InstanceTerminate EC2 InstanceEC2 instances with CPU and memory utilization under a customizable threshold. Without the Datadog Agent, this recommendation is generated using CloudWatch metrics.Datadog Agent
TerminateAWSEC2 InstanceTerminate EC2 Instance with Stuck NodeEC2 instances hosting Kubernetes nodes that are stuck in the pending phase, indicating the node is not functioning properly.Datadog Agent
TerminateAWSECR RepositoryDelete ECR RepositoryECR repository with no pull activity that can be deleted to reduce costs.
DownsizeAWSECS Task DefinitionDownsize ECS Task SizeAn ECS task using less than 50% of its requested CPU or memory.Container Monitoring
PurchaseAWSElastiCache ClusterPurchase Reserved ElastiCache NodeAn ElastiCache node older than 45 days is still charged with on-demand rates.
TerminateAWSElastiCache ClusterTerminate ElastiCache ClusterAn ElastiCache Redis cluster with no cache hits and no replication or a Memcached cluster with no cache hits.
TerminateAWSOpenSearch DomainDelete OpenSearch DomainOpenSearch domain with no request activity.
PurchaseAWSOpenSearch DomainPurchase Reserved OpenSearch InstanceOpenSearch domain eligible for Reserved Instance purchase.
TerminateAWSClassic Load BalancerTerminate Classic Load BalancerClassic Elastic Load Balancer with no active connections that is not attached to an EC2 instance.
TerminateAWSLoad BalancerTerminate Application Load BalancerAn application load balancer with no traffic being processed.
TerminateAWSLoad BalancerTerminate Network Load BalancerA network load balancer with 0 processed bytes.
DownsizeAWSLambdaDownsize Lambda Provisioned ConcurrencyAWS Lambda function with over-allocated provisioned concurrency.
TerminateAWSCloudWatch Log GroupDelete Lambda CloudWatch Logs and write permissionsRemove write permissions for Lambda CloudWatch Logs to prevent further unnecessary logging.
DownsizeAWSCloudWatch Log GroupSet CloudWatch Logs Retention PolicyReduce CloudWatch Logs storage costs by setting appropriate retention policies.
TerminateAWSMQ BrokerTerminate MQ BrokerAn MQ broker with 0 connections.
DownsizeAWSRDS InstanceDownsize RDS Instance Provisioned IOPSRDS instances using less than 80% of provisioned IOPS over the past two weeks.
MigrateAWSRDS InstanceMigrate RDS Instance EngineAn RDS running an engine version that is no longer supported and incurring extended support charges.
MigrateAWSRDS InstanceMigrate RDS Instance to GravitonRDS Instances that can be migrated to an equivalent Graviton instance type.
PurchaseAWSRDS InstancePurchase Reserved RDS InstanceAn RDS instance older than 45 days is still charged with on-demand rates.
TerminateAWSRDS InstanceTerminate Unused RDS InstanceRDS instance with 0 database connections and 0 replica lag.
PurchaseAWSRedshift ClusterPurchase Reserved Redshift Cluster NodeRedshift cluster node older than 45 days is still charged with on-demand rates.
TerminateAWSRedshift ClusterTerminate Redshift ClusterRedshift cluster with 0 database connections.
MigrateAWSS3 BucketClean up old versions to reduce storage costsA bucket with versioning enabled has significant storage costs from old object versions.Storage Management
TerminateAWSS3 BucketDelete S3 noncurrent version objectsA standard S3 bucket without a noncurrent version expiration lifecycle and that does not serve a website contains noncurrent version storage bytes older than 30 days.Storage Lens
TerminateAWSS3 BucketDelete abandoned S3 multipart uploadsS3 buckets with incomplete multipart uploads older than 7 days that are consuming storage space.Storage Lens
MigrateAWSS3 BucketReduce small file count to reduce storage costsA bucket has a significant percentage of small files in infrequent access storage classes, increasing storage costs due to minimum billing size.
TerminateAWSS3 BucketTerminate S3 BucketAn S3 bucket with minimal storage costs and no GET or PUT requests.
MigrateAWSS3 BucketTransition S3 IA and Glacier objects to Intelligent-TieringA bucket has large early deletion charges.
MigrateAWSS3 BucketTransition S3 Standard objects to Intelligent TieringA bucket’s costs are almost entirely in per-GB standard storage, but GET requests indicate few objects are accessed.
MigrateAWSS3 BucketTransition S3 objects to Infrequent Access by PrefixA bucket prefix’s costs are almost entirely in per-GB standard storage, but GET requests indicate few objects in the prefix are accessed.Storage Management
DownsizeAWSVPC NAT GatewayReduce NAT Gateway Cross-Zone TransfersResources that need a NAT gateway should use one that is in the same availability zone, or they can incur unnecessary cross-zone transfer charges.
DownsizeAWSVPC NAT GatewayReduce NAT Gateway Within-VPC TransfersResources in the same VPC should avoid communicating with each other through a NAT gateway because that incurs unnecessary NAT gateway processing charges.NPM
TerminateAWSVPC NAT GatewayTerminate NAT GatewayA NAT Gateway that has no bytes sent through it.
TerminateAzureAKS ClusterTerminate AKS ClusterAn AKS cluster with less than 5% CPU usage.
PurchaseAzureAzure App ServicePurchase Reservation for App ServiceApp Service older than 45 days is charged with on-demand rates.
DownsizeAzureContainer AppDownsize Container AppA Container App has higher than necessary minimum replicas.
TerminateAzureLoad BalancerDelete Load BalancerLoad Balancer with 0 bytes transferred.
TerminateAzureManaged DiskDelete Unattached Managed DiskManaged disk is unattached and can be deleted.
TerminateAzureManaged DiskDelete Unused Managed DiskManaged disk with no read/write operations, which can be deleted.
DownsizeAzureManaged DiskDownsize Managed Disk IOPSManaged disk using less than the configured threshold of provisioned IOPS.
DownsizeAzureManaged DiskDownsize Managed Disk ThroughputManaged disk using less than the configured threshold of provisioned throughput.
PurchaseAzureMySQL DatabasePurchase Reservation for MySQLDatabase for MySQL has no reservation coverage and is more than 45 days old.
TerminateAzureMySQL DatabaseTerminate Database for MySQLDatabase server with no connections, which can be terminated.
PurchaseAzureDatabase for PostgreSQLPurchase Reservation for PostgreSQLDatabase for PostgreSQL has no reservation coverage and is more than 45 days old.
TerminateAzureSQL ServerTerminate SQL ServerSQL Server with no connections, which can be terminated.
DownsizeAzureSQL Server DatabaseDownsize SQL Server Database DTUSQL Server database with low DTU usage that can be downsized.
PurchaseAzureSQL Server DatabasePurchase Reservation for SQL Server DatabaseSQL server database has no reservation coverage and is more than 45 days old.
TerminateAzureSQL Server DatabaseTerminate SQL Server DatabaseSQL Server Database with no successful connections and very minimal CPU, which can be terminated.
PurchaseAzureSQL Server Managed InstancePurchase Reservation for SQL Server Managed InstancePurchase reservation for SQL Server Managed Instance with no reservation coverage and is more than 45 days old.
DownsizeAzureVM InstanceDownsize Azure VM InstanceVM instance that can be downsized to a smaller instance type.Datadog Agent
TerminateAzureVM InstanceTerminate Azure VM InstanceVM instance with less than 5% user CPU and over 90% usable memory.Datadog Agent
DownsizeAWSDatabricks ClusterDownsize Databricks All-PurposeIdentifies overprovisioned all-purpose Databricks clusters and suggests rightsizing to smaller instance types to reduce costs.
DownsizeAzureDatabricks ClusterDownsize Databricks All-PurposeIdentifies overprovisioned all-purpose Databricks clusters and suggests rightsizing to smaller instance types to reduce costs.
DownsizeGCPDatabricks ClusterDownsize Databricks All-PurposeIdentifies overprovisioned all-purpose Databricks clusters and suggests rightsizing to smaller instance types to reduce costs.
DownsizeAWSDatabricks ClusterDownsize Databricks JobIdentifies overprovisioned Databricks jobs and suggests rightsizing to smaller instance types to reduce costs.
DownsizeAzureDatabricks ClusterDownsize Databricks JobIdentifies overprovisioned Databricks jobs and suggests rightsizing to smaller instance types to reduce costs.
DownsizeGCPDatabricks ClusterDownsize Databricks JobIdentifies overprovisioned Databricks jobs and suggests rightsizing to smaller instance types to reduce costs.
PurchaseGCPCloud Run JobPurchase Flexible CUD for Cloud Run JobCloud Run Jobs that benefit from flexible committed use discounts.
TerminateGCPCompute AddressDelete Unused Compute IP AddressUnused compute IP addresses can be deleted.
TerminateGCPCompute DiskDelete Unattached Compute DiskCompute disks that are unattached and can be deleted.
TerminateGCPCompute DiskDelete Unused Compute DiskCompute disks that are unused and can be deleted.
TerminateGCPCompute Global AddressDelete Unused Compute Global IP AddressUnused compute global IP addresses can be deleted.
DownsizeGCPCompute InstanceDownsize Compute InstanceCompute instance with low CPU and memory usage that can be downsized to a smaller instance type.Datadog Agent
TerminateGCPCompute InstanceTerminate Compute InstanceCompute instance with low CPU usage, high available memory, and minimal network activity.Datadog Agent
DownsizeGCPCompute Instance GroupReduce Minimum CapacityA Compute Instance Group Autoscaler with a minimum capacity of instances that can be reduced.
DownsizeGCPCloudSQL InstanceDownsize CloudSQL DatabaseCloudSQL instances that are over-provisioned and can be downsized.
PurchaseGCPCloudSQL InstancePurchase CUD for Cloud SQLCloudSQL instances that benefit from committed use discounts.
TerminateGCPCloudSQL InstanceTerminate CloudSQL InstanceCloudSQL instances with minimal usage that can be terminated.
TerminateGCPStorage BucketDelete Noncurrent Cloud Storage ObjectsCloud Storage buckets that benefit from lifecycle rules to automatically delete noncurrent object versions.
MigrateGCPStorage BucketTransition Cloud Storage Bucket to AutoclassObjects in the storage bucket can be automatically migrated to archival tiers for better rates.
DownsizeAWSKubernetes ClusterReduce Cluster IdleKubernetes clusters with high CPU or memory cluster idle.Datadog Agent
DownsizeAzureKubernetes ClusterReduce Cluster IdleKubernetes clusters with high CPU or memory cluster idle.Datadog Agent
DownsizeGCPKubernetes ClusterReduce Cluster IdleKubernetes clusters with high CPU or memory cluster idle.Datadog Agent
DownsizeAWSKubernetes DeploymentDownsize DeploymentContainers are using only a fraction of their requested CPU or memory.Datadog Agent
DownsizeAzureKubernetes DeploymentDownsize DeploymentContainers are using only a fraction of their requested CPU or memory.Datadog Agent
DownsizeGCPKubernetes DeploymentDownsize DeploymentContainers are using only a fraction of their requested CPU or memory.Datadog Agent

Further reading