| name | aws-performance |
| description | Monitor and analyze AWS infrastructure performance using read-only MCP tools |
| version | 1.0.0 |
| author | kai-agent |
| metadata | {"kai":{"tags":["kai","aws","performance","monitoring","cloudwatch"],"related_skills":["aws-cost-optimizer"]}} |
AWS Performance Analyzer
Monitor health and performance of AWS infrastructure.
All operations are read-only — no changes are made.
Prerequisites
- Workspace with AWS credentials configured in kai-backend
- MCP tools available:
mcp__kai__aws_*
Workflow 1: Infrastructure Overview
Get a complete picture of what's running.
aws_ec2_list_instances(workspaceId, state="running") # Compute
aws_ecs_list_services(workspaceId) # Containers
aws_lambda_list_functions(workspaceId) # Serverless
aws_rds_list_instances(workspaceId) # Databases
aws_elb_list(workspaceId) # Load balancers
aws_cloudformation_list_stacks(workspaceId) # IaC stacks
Present as a summary table:
Workflow 2: ECS Health Check
-
Service status:
aws_ecs_list_services(workspaceId)
- Flag services where
runningCount < desiredCount
- Flag services with
pendingCount > 0 for extended time
-
Recently crashed tasks:
aws_ecs_list_tasks(workspaceId, desiredStatus="STOPPED")
- Check
stoppedReason for OOM kills or task failures
-
Resource utilization (CPU + Memory):
aws_cloudwatch_get_metrics(
workspaceId, namespace="AWS/ECS", metricName="CPUUtilization",
dimensions=[{"name":"ClusterName","value":"xxx"},{"name":"ServiceName","value":"yyy"}],
startTime="-24h", endTime="now", period=300
)
Repeat for MemoryUtilization.
- Flag CPU sustained >80% → upgrade candidates
- Flag Memory sustained >90% → OOM risk
Workflow 3: EC2 Performance Analysis
For each running instance:
aws_cloudwatch_get_metrics(workspaceId, namespace="AWS/EC2", metricName="CPUUtilization",
dimensions=[{"name":"InstanceId","value":"i-xxx"}],
startTime="-7d", endTime="now", period=3600, statistics=["Average","Maximum"])
Also check:
NetworkIn / NetworkOut — network bottlenecks
EBSReadOps / EBSWriteOps — disk I/O pressure
Decision matrix:
| Avg CPU | Max CPU | Recommendation |
|---|
| <10% | <30% | Downsize or stop |
| 10-60% | <80% | Right-sized |
| >60% | >80% | Consider upgrading |
| >80% | >95% | Upgrade urgently |
Workflow 4: Lambda Performance
-
List functions:
aws_lambda_list_functions(workspaceId)
-
For each function, check metrics:
aws_cloudwatch_get_metrics(workspaceId, namespace="AWS/Lambda",
metricName="Duration", # also: Errors, Throttles, ConcurrentExecutions
dimensions=[{"name":"FunctionName","value":"xxx"}],
startTime="-7d", endTime="now", period=86400, statistics=["Average","Maximum","Sum"])
Flags:
- Error rate >5% → investigate immediately
- P99 duration >80% of timeout → at risk of timing out
- Throttles >0 → hitting concurrency limits
- ConcurrentExecutions near account limit → scale risk
Workflow 5: Database Health (RDS)
-
List databases:
aws_rds_list_instances(workspaceId)
-
For each DB, check CloudWatch:
CPUUtilization — sustained >80% is a problem
DatabaseConnections — compare to max_connections setting
FreeableMemory — low = swap risk
ReadIOPS / WriteIOPS — I/O bottlenecks
aws_cloudwatch_get_metrics(workspaceId, namespace="AWS/RDS",
metricName="CPUUtilization",
dimensions=[{"name":"DBInstanceIdentifier","value":"xxx"}],
startTime="-24h", endTime="now", period=300)
Workflow 6: Load Balancer Health
-
List LBs:
aws_elb_list(workspaceId)
-
Check target health:
aws_elb_target_health(workspaceId, targetGroupArn="arn:xxx")
- Flag any unhealthy targets
- Flag targets in "draining" state
-
Check latency (CloudWatch):
aws_cloudwatch_get_metrics(workspaceId, namespace="AWS/ApplicationELB",
metricName="TargetResponseTime",
dimensions=[{"name":"LoadBalancer","value":"app/xxx/yyy"}],
startTime="-24h", endTime="now", period=300, statistics=["Average","Maximum"])
- Flag avg response time >1s
- Check
HTTPCode_Target_5XX_Count for error spikes
Workflow 7: Security Posture Quick Check
-
Security groups:
aws_ec2_security_groups(workspaceId)
- Flag rules with
0.0.0.0/0 on ports other than 80, 443
- Flag rules with
0.0.0.0/0 on SSH (22) or RDP (3389)
-
IAM users:
aws_iam_list_users(workspaceId)
- Flag users with
passwordLastUsed: "never" — unused accounts
-
IAM roles overview:
aws_iam_list_roles(workspaceId)
CloudWatch Metrics Quick Reference
| Service | Namespace | Common Metrics | Dimension |
|---|
| EC2 | AWS/EC2 | CPUUtilization, NetworkIn, NetworkOut, DiskReadOps | InstanceId |
| ECS | AWS/ECS | CPUUtilization, MemoryUtilization | ClusterName, ServiceName |
| Lambda | AWS/Lambda | Duration, Errors, Throttles, Invocations, ConcurrentExecutions | FunctionName |
| RDS | AWS/RDS | CPUUtilization, DatabaseConnections, FreeableMemory, ReadIOPS, WriteIOPS | DBInstanceIdentifier |
| ALB | AWS/ApplicationELB | TargetResponseTime, HTTPCode_Target_5XX_Count, RequestCount | LoadBalancer |
| NLB | AWS/NetworkELB | ActiveFlowCount, ProcessedBytes | LoadBalancer |
| S3 | AWS/S3 | BucketSizeBytes, NumberOfObjects | BucketName, StorageType |
Reporting Format
Infrastructure Health Report
Overall status: Healthy / Warning / Critical
| Resource | Service | Status | Issue | Severity |
|---|
| i-abc123 | EC2 | Warning | CPU avg 85% over 7d | High |
| my-service | ECS | Critical | 2/4 tasks running | Critical |
| auth-fn | Lambda | Warning | Error rate 8% | High |
Immediate actions needed:
- ...
Monitoring recommendations:
- ...