cloudfront_distribution_pricing_classcw_log_group_without_retentiondynamodb_stale_dataebs_volumes_not_using_gp3ec2_application_lb_unusedec2_classic_lb_unusedec2_gateway_lb_unusedec2_network_lb_unusedec2_reserved_instance_lease_expiration_daysecs_cluster_low_utilizationecs_service_without_autoscalingelasticache_long_running_clusteremr_cluster_instance_prev_genemr_cluster_is_idle_30_minutesgp2_ebs_volumeshigh_iops_volumesinactive_ebs_volumesio1_ebs_volumeslambda_function_excessive_timeoutlambda_function_high_error_ratelarge_ebs_volumeslarge_ec2_instanceslong_running_instanceslow_connections_rds_metricslow_iops_volumeslow_usage_ebs_volumeslow_usage_rds_metricslow_utilization_ec2_instancemonthly_service_cost_changesmultiple_cloudtrail_trailsmultiple_regional_trailsold_ebs_snapshotsold_rds_db_instancesprev_gen_rds_instancesredshift_cluster_low_utilizationredshift_cluster_max_ageredshift_cluster_schedule_pause_resume_enableds3_bucket_without_lifecyclestale_cw_log_streamunattached_ebs_volumesunattached_eipsvpc_nat_gateway_unused
Query: redshift_cluster_low_utilization
Usage
steampipe query aws_thrifty.query.redshift_cluster_low_utilization
SQL
with redshift_cluster_utilization as ( select cluster_identifier, round(cast(sum(maximum)/count(maximum) as numeric), 1) as avg_max, count(maximum) days from aws_redshift_cluster_metric_cpu_utilization_daily where date_part('day', now() - timestamp) <= 30 group by cluster_identifier)select i.cluster_identifier 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_idfrom aws_redshift_cluster as i left join redshift_cluster_utilization as u on u.cluster_identifier = i.cluster_identifier;
Controls
The query is being used by the following controls: