AWS resource health diagnosis
Identify a target AWS resource, collect service-specific status, CloudWatch metrics, logs, and related events, classify issues by severity and root cause, then produce immediate, short-term, and long-term remediation steps with validation.
When to invoke
- "Diagnose this AWS Lambda health issue."
- "Check why this RDS instance is slow."
- "Analyze CloudWatch logs and metrics for this resource."
- "Create a remediation plan for an unhealthy ECS service."
- "Troubleshoot AWS resource health for EC2, ALB, SQS, or DynamoDB."
Prerequisites and context
- AWS CLI must be configured and authenticated.
- The target resource must be identified by name, type, and optionally region/account.
- CloudWatch logs and metrics should be enabled; if not, report the limitation and recommend enablement.
- Fetch
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ when current monitoring guidance is needed.
Resource discovery
Use the appropriate AWS CLI command for the resource type:
aws ec2 describe-instances --filters "Name=tag:Name,Values=<name>"
aws lambda get-function --function-name <name>
aws rds describe-db-instances --db-instance-identifier <name>
aws ecs describe-services --cluster <cluster> --services <name>
aws elbv2 describe-load-balancers --names <name>
aws dynamodb describe-table --table-name <name>
aws sqs get-queue-attributes --queue-url <url> --attribute-names All
aws apigatewayv2 get-apis
If multiple matches exist, ask for the specific region, account, cluster, queue URL, or resource identifier.
Health indicators
| Service |
Key indicators |
| Lambda |
Error rate, throttle rate, duration P99, concurrent executions, cold starts. |
| RDS |
CPU utilization, FreeStorageSpace, DatabaseConnections, ReadLatency, WriteLatency, Performance Insights DB load. |
| ECS |
Running vs desired count, pending count, task stop reason, service status. |
| ALB |
TargetResponseTime, HTTPCode_ELB_5XX_Count, UnHealthyHostCount. |
| SQS |
ApproximateNumberOfMessagesNotVisible, ApproximateAgeOfOldestMessage. |
| DynamoDB |
ConsumedReadCapacityUnits, ThrottledRequests, SuccessfulRequestLatency. |
| EC2 |
Instance status checks, CPU, memory if agent-enabled, disk, network, system events. |
Service checks:
aws ec2 describe-instance-status --instance-ids <id>
aws rds describe-db-instances --db-instance-identifier <name> --query 'DBInstances[0].DBInstanceStatus'
aws cloudwatch get-metric-statistics --namespace AWS/Lambda --metric-name Errors --dimensions Name=FunctionName,Value=<name> --start-time $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ) --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) --period 3600 --statistics Sum
aws ecs describe-services --cluster <cluster> --services <name> --query 'services[0].[status,runningCount,desiredCount,pendingCount]'
Logs and metrics analysis
Find log groups, run CloudWatch Logs Insights, and retrieve results:
aws logs describe-log-groups --log-group-name-prefix /aws/<service>/<name>
aws logs start-query --log-group-name /aws/lambda/<name> --start-time $(date -u -d '24 hours ago' +%s) --end-time $(date -u +%s) --query-string 'filter @message like /ERROR/ | stats count(*) as errorCount by bin(1h)'
aws logs get-query-results --query-id <id>
aws logs start-query --log-group-name /aws/lambda/<name> --start-time $(date -u -d '24 hours ago' +%s) --end-time $(date -u +%s) --query-string 'filter @type = "REPORT" | filter @initDuration > 0 | stats count() as coldStarts by bin(1h)'
aws pi get-resource-metrics --service-type RDS --identifier db:<identifier> --metric-queries '[{"Metric":"db.load.avg"}]' --start-time $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ) --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) --period-in-seconds 3600
Look for recurring error patterns, correlation with deployments or CloudTrail events, performance trends, dependency failures, and saturation signals.
Severity and root cause
| Severity |
Definition |
| Critical |
Service unavailable, data loss, or security incident. |
| High |
Performance degradation, intermittent failures, or error rates >5%. |
| Medium |
Warnings, suboptimal configuration, or minor performance issue. |
| Low |
Informational alert or optimization opportunity. |
| Root cause category |
Examples |
| Configuration Issues |
Wrong settings, missing env vars, IAM permission denials. |
| Resource Constraints |
CPU, memory, disk, Lambda throttling, RDS connection exhaustion. |
| Network Issues |
Security group rules, VPC routing, DNS, NACLs. |
| Application Issues |
Code bugs, memory leaks, unhandled exceptions, slow queries. |
| Dependency Issues |
Downstream timeouts, SQS/SNS failures, external API limits. |
| Security Issues |
KMS key issues, certificate expiration. |
Remediation planning
Immediate actions apply only to Critical issues and should include rollback/validation. Examples:
aws lambda put-reserved-concurrency --function-name <name> --reserved-concurrent-executions 100
aws rds reboot-db-instance --db-instance-identifier <name>
Short-term fixes include configuration adjustments, right-sizing, CloudWatch alarms, and IAM corrections. Long-term improvements include resilience architecture, preventive monitoring, and AWS Health Dashboard notifications via EventBridge.
Troubleshooting
| Issue |
Resolution |
| Resource Not Found |
Ask for resource name, type, region, account, cluster, or queue URL. |
| Authentication Issues |
Guide through aws configure. |
| Insufficient Permissions |
List required IAM actions such as logs:*, cloudwatch:*, and pi:*. |
| No Logs Available |
Recommend enabling CloudWatch logging for the resource type. |
| Query Timeouts |
Use shorter time windows. |
Compatibility vocabulary
Preserve these legacy terms, API names, command placeholders, and literal phrases when applying or migrating this skill:
CPU/memory/disk
Healthy/Warning/Critical
High/Medium
High/Medium/Low
ReadLatency/WriteLatency
name/region
region/account
Output template
## AWS resource health assessment
**Status:** Healthy | Warning | Critical | blocked
**Resource:** <name> (<type>)
**Region/account:** <region> | <account id>
| Issue | Severity | Evidence | Root cause category | Remediation phase |
| --- | --- | --- | --- | --- |
| <issue> | Critical/High/Medium/Low | <metric/log/status evidence> | <category> | Immediate/Short-term/Long-term |
### Remediation plan
#### Immediate actions
- <command, rollback, validation>
#### Short-term fixes
- <configuration, alarm, IAM, or sizing change>
#### Long-term improvements
- <architecture, monitoring, EventBridge, or resilience change>
### Validation
- <metric, log query, CLI check, or alarm state to confirm recovery>
Quality gate
References
1---2name: aws-resource-health-diagnose3description: Diagnose AWS resource health with AWS CLI, CloudWatch metrics, CloudWatch Logs Insights, Performance Insights, CloudTrail correlation, severity classification, root cause analysis, and remediation plans. Use when the user asks for AWS resource health, issue diagnosis, CloudWatch troubleshooting, or remediation for EC2, Lambda, RDS, ECS, ALB, DynamoDB, SQS, or API Gateway.4---56<!-- Generated from harness/github-copilot/skills/aws-resource-health-diagnose/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->78# AWS resource health diagnosis910Identify a target AWS resource, collect service-specific status, CloudWatch metrics, logs, and related events, classify issues by severity and root cause, then produce immediate, short-term, and long-term remediation steps with validation.1112## When to invoke1314- "Diagnose this AWS Lambda health issue."15- "Check why this RDS instance is slow."16- "Analyze CloudWatch logs and metrics for this resource."17- "Create a remediation plan for an unhealthy ECS service."18- "Troubleshoot AWS resource health for EC2, ALB, SQS, or DynamoDB."1920## Prerequisites and context2122- AWS CLI must be configured and authenticated.23- The target resource must be identified by name, type, and optionally region/account.24- CloudWatch logs and metrics should be enabled; if not, report the limitation and recommend enablement.25- Fetch `https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/` when current monitoring guidance is needed.2627## Resource discovery2829Use the appropriate AWS CLI command for the resource type:3031```bash32aws ec2 describe-instances --filters "Name=tag:Name,Values=<name>"33aws lambda get-function --function-name <name>34aws rds describe-db-instances --db-instance-identifier <name>35aws ecs describe-services --cluster <cluster> --services <name>36aws elbv2 describe-load-balancers --names <name>37aws dynamodb describe-table --table-name <name>38aws sqs get-queue-attributes --queue-url <url> --attribute-names All39aws apigatewayv2 get-apis40```4142If multiple matches exist, ask for the specific region, account, cluster, queue URL, or resource identifier.4344## Health indicators4546| Service | Key indicators |47| --- | --- |48| Lambda | Error rate, throttle rate, duration P99, concurrent executions, cold starts. |49| RDS | CPU utilization, FreeStorageSpace, DatabaseConnections, ReadLatency, WriteLatency, Performance Insights DB load. |50| ECS | Running vs desired count, pending count, task stop reason, service status. |51| ALB | TargetResponseTime, HTTPCode_ELB_5XX_Count, UnHealthyHostCount. |52| SQS | ApproximateNumberOfMessagesNotVisible, ApproximateAgeOfOldestMessage. |53| DynamoDB | ConsumedReadCapacityUnits, ThrottledRequests, SuccessfulRequestLatency. |54| EC2 | Instance status checks, CPU, memory if agent-enabled, disk, network, system events. |5556Service checks:5758```bash59aws ec2 describe-instance-status --instance-ids <id>60aws rds describe-db-instances --db-instance-identifier <name> --query 'DBInstances[0].DBInstanceStatus'61aws cloudwatch get-metric-statistics --namespace AWS/Lambda --metric-name Errors --dimensions Name=FunctionName,Value=<name> --start-time $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ) --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) --period 3600 --statistics Sum62aws ecs describe-services --cluster <cluster> --services <name> --query 'services[0].[status,runningCount,desiredCount,pendingCount]'63```6465## Logs and metrics analysis6667Find log groups, run CloudWatch Logs Insights, and retrieve results:6869```bash70aws logs describe-log-groups --log-group-name-prefix /aws/<service>/<name>71aws logs start-query --log-group-name /aws/lambda/<name> --start-time $(date -u -d '24 hours ago' +%s) --end-time $(date -u +%s) --query-string 'filter @message like /ERROR/ | stats count(*) as errorCount by bin(1h)'72aws logs get-query-results --query-id <id>73aws logs start-query --log-group-name /aws/lambda/<name> --start-time $(date -u -d '24 hours ago' +%s) --end-time $(date -u +%s) --query-string 'filter @type = "REPORT" | filter @initDuration > 0 | stats count() as coldStarts by bin(1h)'74aws pi get-resource-metrics --service-type RDS --identifier db:<identifier> --metric-queries '[{"Metric":"db.load.avg"}]' --start-time $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ) --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) --period-in-seconds 360075```7677Look for recurring error patterns, correlation with deployments or CloudTrail events, performance trends, dependency failures, and saturation signals.7879## Severity and root cause8081| Severity | Definition |82| --- | --- |83| Critical | Service unavailable, data loss, or security incident. |84| High | Performance degradation, intermittent failures, or error rates `>5%`. |85| Medium | Warnings, suboptimal configuration, or minor performance issue. |86| Low | Informational alert or optimization opportunity. |8788| Root cause category | Examples |89| --- | --- |90| Configuration Issues | Wrong settings, missing env vars, IAM permission denials. |91| Resource Constraints | CPU, memory, disk, Lambda throttling, RDS connection exhaustion. |92| Network Issues | Security group rules, VPC routing, DNS, NACLs. |93| Application Issues | Code bugs, memory leaks, unhandled exceptions, slow queries. |94| Dependency Issues | Downstream timeouts, SQS/SNS failures, external API limits. |95| Security Issues | KMS key issues, certificate expiration. |9697## Remediation planning9899Immediate actions apply only to Critical issues and should include rollback/validation. Examples:100101```bash102aws lambda put-reserved-concurrency --function-name <name> --reserved-concurrent-executions 100103aws rds reboot-db-instance --db-instance-identifier <name>104```105106Short-term fixes include configuration adjustments, right-sizing, CloudWatch alarms, and IAM corrections. Long-term improvements include resilience architecture, preventive monitoring, and AWS Health Dashboard notifications via EventBridge.107108## Troubleshooting109110| Issue | Resolution |111| --- | --- |112| Resource Not Found | Ask for resource name, type, region, account, cluster, or queue URL. |113| Authentication Issues | Guide through `aws configure`. |114| Insufficient Permissions | List required IAM actions such as `logs:*`, `cloudwatch:*`, and `pi:*`. |115| No Logs Available | Recommend enabling CloudWatch logging for the resource type. |116| Query Timeouts | Use shorter time windows. |117118## Compatibility vocabulary119120Preserve these legacy terms, API names, command placeholders, and literal phrases when applying or migrating this skill:121122- `CPU/memory/disk`123- `Healthy/Warning/Critical`124- `High/Medium`125- `High/Medium/Low`126- `ReadLatency/WriteLatency`127- `name/region`128- `region/account`129130## Output template131132```markdown133## AWS resource health assessment134135**Status:** Healthy | Warning | Critical | blocked136**Resource:** <name> (<type>)137**Region/account:** <region> | <account id>138139| Issue | Severity | Evidence | Root cause category | Remediation phase |140| --- | --- | --- | --- | --- |141| <issue> | Critical/High/Medium/Low | <metric/log/status evidence> | <category> | Immediate/Short-term/Long-term |142143### Remediation plan144#### Immediate actions145- <command, rollback, validation>146147#### Short-term fixes148- <configuration, alarm, IAM, or sizing change>149150#### Long-term improvements151- <architecture, monitoring, EventBridge, or resilience change>152153### Validation154- <metric, log query, CLI check, or alarm state to confirm recovery>155```156157## Quality gate158159- [ ] Target resource identity, type, region, and account were resolved or reported as blocked.160- [ ] Service-specific health metrics and status checks were collected.161- [ ] CloudWatch logs were queried or missing logs were documented.162- [ ] Major issues have severity, evidence, and root cause category.163- [ ] Remediation is split into immediate, short-term, and long-term actions when applicable.164- [ ] AWS CLI commands include validation and rollback considerations for risky changes.165- [ ] Monitoring recommendations include CloudWatch alarms or AWS Health Dashboard/EventBridge where relevant.166167## References168169- [Amazon CloudWatch monitoring](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)