Skip to main content

Cost Analytics

Starter+Enterprise

Cost Analytics connects to Cloud Cost Explorer to give you a complete picture of your cloud spend — broken down by service, region, account, and resource tag — alongside actionable recommendations for reducing waste. Instead of switching between the cloud Console, spreadsheets, and third-party FinOps tools, everything you need to understand and optimise your cloud bill is available directly in Calabi.


Key Capabilities

CapabilityDescription
Spend breakdownFilter and group costs by service, region, account, linked account, or tag
Month-over-month trendsLine and bar charts comparing current vs. prior periods
Rightsizing recommendationsIdentify underutilised EC2, idle RDS, and oversized EBS
Cost anomaly detectionAlerts when daily spend exceeds expected patterns
Savings Plans coverageSee what fraction of your compute is covered by Savings Plans
Reserved Instance coverageIdentify on-demand usage that could be replaced by RIs
Tag coverage reportSurface untagged resources driving unattributed spend

Spend Breakdown

The Spend Breakdown view is the primary cost exploration interface. It renders a stacked bar chart for the selected time range and a detailed table beneath it.

Grouping dimensions

DimensionExample use case
ServiceHow much is EC2 vs. S3 vs. RDS this month?
RegionWhich regions are driving the most spend?
Linked accountHow does spend compare across AWS Organization member accounts?
Usage typeBreak EC2 cost into compute, data transfer, and EBS components
Resource tagAttribute costs to teams, projects, or environments via tags

Time range presets

PresetDescription
This monthMonth-to-date (MTD)
Last monthFull previous calendar month
Last 3 monthsRolling 90-day view
Last 6 monthsRolling 180-day view
Last 12 monthsFull year view
CustomArbitrary start and end date
Data freshness

Cloud Cost Explorer data has a 24-hour lag. Charges incurred today will appear in Calabi the following day.


The Trends tab shows your total cloud spend as a line chart across the last 12 months, with the current month shown as a partial bar. Key trend indicators:

  • MoM change (%) — percentage change vs. the prior month
  • 3-month moving average — smoothed trend line to filter month-end noise
  • Projected month-end — linear projection of the current month's final cost based on daily spend rate

You can overlay a second dimension (e.g., EC2 + RDS) to compare two cost lines on the same chart.


Rightsizing Recommendations

Calabi analyses CloudWatch utilisation metrics alongside Cost Explorer data to surface rightsizing opportunities. Recommendations are grouped by resource type.

EC2 rightsizing

Finding typeTrigger conditionPotential saving
Underutilised instanceAverage CPU < 5% and network < 5 MB/day for 14 daysSwitch to a smaller instance type
Idle instanceAverage CPU < 1% for 14 daysStop or terminate the instance
Oversized memoryMemory utilisation < 10% for 14 days (requires CloudWatch agent)Move to a memory-optimised tier

Each recommendation includes:

  • Current instance type and monthly cost
  • Recommended instance type and monthly cost
  • Estimated monthly saving
  • Last 14 days of CPU and network utilisation charts
  • A direct link to resize the instance in the cloud Console

RDS rightsizing

Finding typeTrigger condition
Idle clusterZero connections for 7 days
Oversized instanceAverage CPU < 5%, FreeableMemory > 80% for 14 days
Single-AZ in productionNon-dev instance with multi_az = false

EBS optimisation

Finding typeTrigger condition
Unattached volumestate = available for more than 14 days
gp2 to gp3 upgradeAny gp2 volume (gp3 is cheaper and faster by default)
Oversized provisioned IOPSProvisioned IOPS utilisation < 20% for 14 days

Cost Anomaly Detection

Calabi applies a statistical model to your daily spend time series and alerts you when actual spend deviates significantly from the expected range.

How it works

  1. Calabi trains on 90 days of historical daily spend per service and account.
  2. For each new day, it computes an expected spend range (lower and upper bound).
  3. If the actual daily spend exceeds the upper bound by more than the configured threshold, an anomaly is raised.
  4. Anomaly alerts are delivered to your configured notification channels (Slack, PagerDuty, email).

Anomaly alert example

[ANOMALY] EC2 spend spike detected
Account: 123456789012 (production)
Service: Amazon EC2
Date: 2026-04-07
Expected: $1,200 – $1,450
Actual: $3,820
Deviation: +163%

Top driver: us-east-1 — 47 new p3.2xlarge instances launched at 14:23 UTC

Savings Plans and Reserved Instance Coverage

Savings Plans coverage

The coverage chart shows what fraction of your EC2, Fargate, and Lambda compute is covered by a Savings Plan commitment vs. on-demand pricing. The uncovered (on-demand) portion is highlighted in orange — these are the hours where a Savings Plan would reduce costs.

MetricDescription
Coverage %Percentage of eligible compute hours covered by a Savings Plan
On-demand cost (uncovered)Monthly cost of the uncovered compute hours
Recommended commitmentDaily Savings Plans commitment that would achieve 80% coverage
Estimated annual savingProjected savings at the recommended commitment level

Reserved Instance coverage

MetricDescription
RI coverage %Percentage of RDS or ElastiCache instance hours covered by RIs
On-demand hoursHours running at on-demand price that could be RI-covered
Recommended RI purchaseInstance type and term recommendation

Tag Coverage Report

Untagged resources make it impossible to attribute costs to teams or projects. The Tag Coverage report shows:

  • Which resources have missing or incomplete tags
  • What fraction of total spend is unattributable (untagged)
  • The estimated unattributable cost for the current month

You can define which tag keys are required (e.g., env, team, project) in Configure under Tag Policy.


Example SQL Queries

These queries can be run directly in Query Resources.

Total daily spend by service (last 30 days)

SELECT
service,
usage_start_date,
SUM(unblended_cost_amount) AS daily_cost_usd
FROM
aws_cost_by_service_daily
WHERE
usage_start_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY
service, usage_start_date
ORDER BY
usage_start_date DESC, daily_cost_usd DESC;

Top 10 most expensive services this month

SELECT
service,
ROUND(SUM(unblended_cost_amount)::NUMERIC, 2) AS month_to_date_cost_usd
FROM
aws_cost_by_service_daily
WHERE
usage_start_date >= DATE_TRUNC('month', CURRENT_DATE)
GROUP BY
service
ORDER BY
month_to_date_cost_usd DESC
LIMIT 10;

Month-over-month EC2 spend comparison

SELECT
DATE_TRUNC('month', usage_start_date) AS month,
ROUND(SUM(unblended_cost_amount)::NUMERIC, 2) AS ec2_cost_usd
FROM
aws_cost_by_service_daily
WHERE
service = 'Amazon EC2'
AND usage_start_date >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY
DATE_TRUNC('month', usage_start_date)
ORDER BY
month;

Spend by tag (team)

SELECT
tags ->> 'team' AS team,
ROUND(SUM(unblended_cost_amount)::NUMERIC, 2) AS monthly_cost_usd
FROM
aws_cost_by_service_daily
WHERE
usage_start_date >= DATE_TRUNC('month', CURRENT_DATE)
AND tags ->> 'team' IS NOT NULL
GROUP BY
tags ->> 'team'
ORDER BY
monthly_cost_usd DESC;

  • Age Reports — Find stale resources contributing to unnecessary storage costs
  • Security Posture — Identify misconfigured resources that may also be driving unexpected spend
  • Configure — Set up tag policies and anomaly alert channels