Context: AWS RDS has two types metrics for CPU. “CPU productive work” and AAS. If 1 vCPU wait 80% for IO operations and 20% making work it will be two different metrics
CPU Utilization 20%, AAS 1 (80% waiting and 20% productive)
So in general you could have 30% CPU Utilization and 15 of 8 AAS (your db on huge pressure, lock etc). CPUUtilization just default, DBLoad from performance insights. So basically will be nice have DBLoad (AAS) less then vCPU count (this is in general).
So, what I’m trying to achieve:
Make multi-dimentional dashboard with N databases (with 1-16vCPUs) and get next graph/table
Name| Min | Max | Mean| vCPU | %current (current/vCPU)
DB#1 | 0.5 | 12 | 8 | 8 | 90%
DB#2 | 1 | 2 | 1.05 | 2 | 50%
Min, Max, Mean → I could get from AWS CloudWatch Metrics (AWS/RDS DBLoad AVG)
But vCPU I could get from DB CloudWatch Logs. Also “aws pi” cannot show me current numVCPUs count (but this metric should be).
Also sometimes DBs increase their size (but I could make manual changes in Grafana (make some map: db1 → 16vCPUs, db2 → 4vCPUs…), but will be nice have it automatically.
And Alert should be per line (depends on current DBLoad / numvCPUs). For huge DB it’ll be on 12 AAS (75%), on small db on 3 AAS (the same 75%).
Maybe it’s not possible and data should be prepared properly to make my life better instead of cross join data sources ?