aws-resource-health-diagnose

Par github · awesome-copilot

Analysez l'état de santé des ressources AWS, diagnostiquez les problèmes à partir des logs et métriques CloudWatch, et créez un plan de remédiation pour les problèmes identifiés.

npx skills add https://github.com/github/awesome-copilot --skill aws-resource-health-diagnose

Santé et diagnostic des ressources AWS

Ce workflow analyse une ressource AWS spécifique pour évaluer son état de santé, diagnostiquer les problèmes potentiels à l'aide des logs et métriques CloudWatch, et élaborer un plan de correction complet pour les problèmes détectés.

Prérequis

  • AWS CLI configurée et authentifiée
  • Ressource AWS cible identifiée (nom, type et optionnellement région/compte)
  • Logs et métriques CloudWatch activés sur la ressource cible

Étapes du workflow

Étape 1 : Obtenir les bonnes pratiques de diagnostic AWS

Récupérer https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ pour des conseils de monitoring et de dépannage afin d'orienter l'approche diagnostique.

Étape 2 : Découverte et identification des ressources

Localiser la ressource cible à l'aide de la commande AWS CLI appropriée pour son type :

# EC2
aws ec2 describe-instances --filters "Name=tag:Name,Values=<name>"
# Lambda
aws lambda get-function --function-name <name>
# RDS
aws rds describe-db-instances --db-instance-identifier <name>
# ECS
aws ecs describe-services --cluster <cluster> --services <name>
# ALB
aws elbv2 describe-load-balancers --names <name>
# DynamoDB
aws dynamodb describe-table --table-name <name>
# SQS
aws sqs get-queue-attributes --queue-url <url> --attribute-names All
# API Gateway
aws apigatewayv2 get-apis

Si plusieurs correspondances sont trouvées, demander à l'utilisateur de préciser la région/le compte.

Étape 3 : Évaluation de l'état de santé

Exécuter les contrôles de santé spécifiques au service :

# EC2
aws ec2 describe-instance-status --instance-ids <id>

# RDS
aws rds describe-db-instances --db-instance-identifier <name> \
  --query 'DBInstances[0].DBInstanceStatus'

# Lambda - taux d'erreur sur 24h
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

# ECS
aws ecs describe-services --cluster <cluster> --services <name> \
  --query 'services[0].[status,runningCount,desiredCount,pendingCount]'

Indicateurs clés de santé par type de service :

  • Lambda : taux d'erreur, taux de limitation, durée P99, exécutions concurrentes
  • RDS : utilisation CPU, FreeStorageSpace, DatabaseConnections, ReadLatency/WriteLatency
  • ECS : nombre de tâches actives vs souhaitées, raison d'arrêt des tâches
  • ALB : TargetResponseTime, HTTPCode_ELB_5XX_Count, UnHealthyHostCount
  • SQS : ApproximateNumberOfMessagesNotVisible, ApproximateAgeOfOldestMessage
  • DynamoDB : ConsumedReadCapacityUnits, ThrottledRequests, SuccessfulRequestLatency

Étape 4 : Analyse des logs et métriques

Trouver les groupes de logs et exécuter les requêtes CloudWatch Logs Insights :

# Trouver les groupes de logs
aws logs describe-log-groups --log-group-name-prefix /aws/<service>/<name>

# Démarrer une requête (erreurs des 24 dernières heures)
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)'

# Obtenir les résultats
aws logs get-query-results --query-id <id>

# Démarrages à froid Lambda
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)'

# Performance Insights RDS (si activé)
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

Identifier : modèles d'erreur récurrents, corrélation avec les déploiements (CloudTrail), tendances de performance, défaillances de dépendances.

Étape 5 : Classification des problèmes et analyse des causes racines

Sévérité :

  • Critique : service indisponible, perte de données, incidents de sécurité
  • Élevée : dégradation de performance, taux d'erreur >5%, défaillances intermittentes
  • Moyenne : avertissements, configuration sous-optimale, problèmes mineurs de performance
  • Faible : alertes informelles, opportunités d'optimisation

Catégories de causes racines :

  • Problèmes de configuration : paramètres incorrects, variables d'environnement manquantes, refus de permissions IAM
  • Contraintes de ressources : limites CPU/mémoire/disque, limitation de Lambda, épuisement des connexions RDS
  • Problèmes réseau : règles de groupe de sécurité, routage VPC, DNS, NACLs
  • Problèmes applicatifs : bugs du code, fuites mémoire, exceptions non gérées, requêtes lentes
  • Problèmes de dépendances : timeouts en aval, défaillances SQS/SNS, limites d'API externes
  • Problèmes de sécurité : problèmes de clés KMS, expiration de certificats

Étape 6 : Générer le plan de correction

Actions immédiates (Critique) :

# Limitation de Lambda — augmenter la concurrence réservée
aws lambda put-reserved-concurrency \
  --function-name <name> --reserved-concurrent-executions 100

# Épuisement des connexions RDS — redémarrer pour réinitialiser les connexions
aws rds reboot-db-instance --db-instance-identifier <name>

Correctifs à court terme (Élevée/Moyenne) : ajustements de configuration, redimensionnement, améliorations des alarmes CloudWatch, corrections IAM.

Améliorations à long terme : changements architecturaux pour la résilience, monitoring préventif, activation des notifications AWS Health Dashboard via EventBridge.

Étape 7 : Rapport et confirmation utilisateur

Présenter les résultats :

🏥 Évaluation de l'état de santé de la ressource AWS

📊 Aperçu des ressources :
• Ressource : [Name] ([Type])
• État : [Sain/Avertissement/Critique]
• Région : [Region] | Compte : [Account ID]

🚨 Problèmes identifiés :
• Critique : X | Élevée : Y | Moyenne : Z | Faible : N

🔍 Problèmes principaux :
1. [Issue] : [Description] — Impact : [Élevé/Moyen/Faible]
2. [Issue] : [Description] — Impact : [Élevé/Moyen/Faible]

🛠️ Correction : X immédiates, Y court terme, Z actions long terme

❓ Procéder avec le plan de correction détaillé ? (o/n)

Puis générer un rapport complet en markdown couvrant : métriques de santé, problèmes avec analyse des causes racines, étapes de correction échelonnées avec commandes AWS CLI, recommandations d'alarmes CloudWatch et liste de validation.

Gestion des erreurs

  • Ressource non trouvée : demander à l'utilisateur de clarifier le nom/la région
  • Problèmes d'authentification : guider via aws configure
  • Permissions insuffisantes : lister les actions IAM requises (logs:*, cloudwatch:*, pi:*)
  • Aucun log disponible : suggérer d'activer la journalisation CloudWatch pour le type de ressource
  • Timeouts de requête : utiliser des fenêtres de temps plus courtes

Critères de réussite

  • ✅ État de santé de la ressource évalué avec précision sur toutes les métriques clés
  • ✅ Tous les problèmes significatifs identifiés et classés par sévérité
  • ✅ Analyse des causes racines réalisée pour les problèmes majeurs
  • ✅ Plan de correction exploitable avec commandes AWS CLI
  • ✅ Recommandations de monitoring CloudWatch incluses
  • ✅ Les étapes de mise en œuvre incluent les procédures de validation et de restauration

Skills similaires