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