turbot/aws_thrifty
Loading controls...

Control: RDS DB instance having low CPU utilization should be reviewed

Description

DB instances may be oversized for their usage.

Usage

Run the control in your terminal:

powerpipe control run aws_thrifty.control.rds_db_low_utilization

Snapshot and share results via Turbot Pipes:

powerpipe login
powerpipe control run aws_thrifty.control.rds_db_low_utilization --share

Steampipe Tables

Params

ArgsNameDefaultDescriptionVariable
$1rds_db_instance_avg_cpu_utilization_low
25
The average CPU utilization required for DB instances to be considered infrequently used. This value should be lower than rds_db_instance_avg_cpu_utilization_high.
$2rds_db_instance_avg_cpu_utilization_high
50
The average CPU utilization required for DB instances to be considered frequently used. This value should be higher than rds_db_instance_avg_cpu_utilization_low.

SQL

with rds_db_usage as (
select
db_instance_identifier,
round(cast(sum(maximum) / count(maximum) as numeric), 1) as avg_max,
count(maximum) days
from
aws_rds_db_instance_metric_cpu_utilization_daily
where
date_part('day', now() - timestamp) <= 30
group by
db_instance_identifier
)
select
arn as resource,
case
when avg_max is null then 'error'
when avg_max <= $1 then 'alarm'
when avg_max <= $2 then 'info'
else 'ok'
end as status,
case
when avg_max is null then 'CloudWatch metrics not available for ' || title || '.'
else title || ' is averaging ' || avg_max || '% max utilization over the last ' || days || ' days.'
end as reason,
region,
account_id
from
aws_rds_db_instance i
left join rds_db_usage as u on u.db_instance_identifier = i.db_instance_identifier;

Tags