DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AWSLesson 32 / 478 min readUpdated October 7, 2026

CloudWatch : alarmes, logs et métriques

À la fin de ce tutoriel, vous créerez une alarme CloudWatch (billing ou CPU), un Log Group, enverrez un événement de log, et brancherez une notification SNS — socle observability en ca-central-1 (billing metrics souvent us-east-1).

Niveau : Débutant → Intermédiaire · Temps estimé : 50–60 min · Versions testées : CloudWatch 2026, AWS CLI v2 · Dernière vérification : 2026-09-10 · Region lab : ca-central-1

← Précédent : SNS/SQS · → Suivant : SSM · Hub : Démarrer avec AWS

Prérequis

  • Topic SNS lab (ou créez-en un) — SNS/SQS
  • EC2 optionnelle pour métrique CPU
  • Profil lab

Coût estimé : alarmes et logs à bas volume = cents. Attention ingestion Logs et Contributor Insights en prod : un conteneur bavard peut coûter plus cher que l’EC2 qu’il observe. Fixez rétention et filtres tôt.

export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1

Ce que nous allons construire

Métrique CPU EC2 (ou EstimatedCharges)
        │
        ▼
Alarme CloudWatch ──OK/ALARM──► SNS topic lab-alerts
Logs applicatifs ──► Log Group /aws/lab/app

(Schéma — alt : « Métrique → alarme → SNS ; logs → Log Group ».)

Étape 1 — Les briques CloudWatch

Brique Rôle
Metrics Points numériques (CPU, facturation, custom)
Alarms Seuil → action (SNS, ASG, EC2 action)
Logs Journaux (agent / Lambda / SDK)
Dashboards Vue consolidée
Events / EventBridge Historiquement CloudWatch Events → EventBridge

Namespaces : AWS/EC2, AWS/Billing, custom Lab/App, etc.

Étape 2 — Alarme billing (anti-facture)

Les métriques Billing sont publiées dans us-east-1 :

# Activez d'abord « Receive Billing Alerts » dans Account (console Billing)

TOPIC_ARN=$(aws sns create-topic --name lab-alerts --query TopicArn --output text)
# souscrivez votre email et confirmez le lien

aws cloudwatch put-metric-alarm 
  --region us-east-1 
  --alarm-name lab-billing-5 
  --alarm-description "Estimated charges > 5 USD" 
  --namespace AWS/Billing 
  --metric-name EstimatedCharges 
  --dimensions Name=Currency,Value=USD 
  --statistic Maximum 
  --period 21600 
  --evaluation-periods 1 
  --threshold 5 
  --comparison-operator GreaterThanThreshold 
  --alarm-actions "$TOPIC_ARN"

C’est le filet du hub « Démarrer avec AWS » formalisé en alarme.

Étape 3 — Alarme CPU EC2

INSTANCE_ID=i-0abc…   # instance lab running

aws cloudwatch put-metric-alarm 
  --alarm-name lab-ec2-cpu-high 
  --namespace AWS/EC2 
  --metric-name CPUUtilization 
  --dimensions Name=InstanceId,Value="$INSTANCE_ID" 
  --statistic Average 
  --period 300 
  --evaluation-periods 2 
  --threshold 70 
  --comparison-operator GreaterThanThreshold 
  --alarm-actions "$TOPIC_ARN" 
  --treat-missing-data notBreaching

Liez la même idée à un ASG (scaling policy) plutôt qu’email seul en prod.

États d’alarme

Une alarme est OK, ALARM ou INSUFFICIENT_DATA. Trop d’INSUFFICIENT_DATA = métrique absente (instance stoppée) ou période trop courte vs granularité. treat-missing-data (breaching / notBreaching / ignore) change le comportement — pour billing, notBreaching évite les faux positifs nocturnes si la métrique tarde.

Période et évaluation

period=300 + evaluation-periods=2 = 10 minutes de moyenne au-dessus du seuil avant ALARM. Trop sensible = spam SNS ; trop lâche = incident tardif. Alignez avec vos SLO.

Étape 4 — Log Group

  • événement test
aws logs create-log-group --log-group-name /aws/lab/app
aws logs create-log-stream --log-group-name /aws/lab/app --log-stream-name test-1

# put-log-events exige sequenceToken après le 1er appel — pour un lab, console « Create log event »
# ou :
TS=$(date +%s000)
aws logs put-log-events 
  --log-group-name /aws/lab/app 
  --log-stream-name test-1 
  --log-events timestamp=$TS,message="hello-cloudwatch-lab"

Rétention : par défaut indefinite (coût) — fixez 7 ou 14 jours en lab :

aws logs put-retention-policy --log-group-name /aws/lab/app --retention-in-days 7

Étape 5 — Metric filter (aperçu)

Transformez des logs « ERROR » en métrique custom puis alarme — pattern apps sans agent metrics. Utile Lambda / conteneurs.

Exemple minimal après le Log Group /aws/lab/app :

aws logs put-metric-filter   --log-group-name /aws/lab/app   --filter-name lab-errors   --filter-pattern "ERROR"   --metric-transformations     metricName=LabAppErrors,metricNamespace=Lab/App,metricValue=1,defaultValue=0

aws cloudwatch put-metric-alarm   --alarm-name lab-app-errors   --namespace Lab/App   --metric-name LabAppErrors   --statistic Sum   --period 60   --evaluation-periods 1   --threshold 1   --comparison-operator GreaterThanOrEqualToThreshold   --alarm-actions "$TOPIC_ARN"   --treat-missing-data notBreaching

Chaque ligne de log contenant ERROR incrémente la métrique. En prod, affinez le filter pattern (JSON fields) pour éviter le bruit.

Étape 6 — Dashboards

aws cloudwatch put-dashboard --dashboard-name lab-sa 
  --dashboard-body '{
    "widgets": [{
      "type": "metric",
      "x": 0, "y": 0, "width": 12, "height": 6,
      "properties": {
        "metrics": [["AWS/EC2", "CPUUtilization"]],
        "region": "ca-central-1",
        "title": "EC2 CPU"
      }
    }]
  }'

Étape 7 — Vérification

aws cloudwatch describe-alarms --alarm-names lab-ec2-cpu-high
aws logs describe-log-groups --log-group-name-prefix /aws/lab

Checklist : alarme créée · action SNS · log group + rétention · (billing alarm us-east-1) · dashboard optionnel.

Logs Insights

Requêtes SQL-like sur vos log groups (fields @message | filter @message like /ERROR/). Facturé à la donnée scannée — restreignez l’intervalle de temps. Idéal pour post-mortem après une alarme.

Exemple de requête (console Logs Insights ou start-query) :

fields @timestamp, @message
| filter @message like /ERROR|hello-cloudwatch/
| sort @timestamp desc
| limit 20

Astuce lab : après put-log-events, attendez quelques secondes avant Insights. En prod, indexez via metric filters les signaux chauds et gardez Insights pour l’investigation.

Cross-account observability

Organizations peut centraliser metrics/logs vers un compte monitoring. Hors lab solo, pattern entreprise fréquent.

Lien avec le budget SNS

Réutilisez le topic lab-alerts pour ASG, RDS CPUUtilization, ALB HTTPCode_Target_5XX_Count. Une seule souscription email, plusieurs alarmes — évite la dispersion.

En lab ca-central-1, créez le topic une fois, confirmez l’email, puis enchaînez les alarmes (CPU, 5XX, FreeStorageSpace, Errors Lambda). En prod, séparez parfois ops-critical et ops-warning pour éviter la fatigue d’alerte, mais gardez le même principe : peu de topics, beaucoup d’alarmes ciblées.

Nettoyage

aws cloudwatch delete-alarms --alarm-names lab-ec2-cpu-high lab-app-errors
aws cloudwatch delete-alarms --region us-east-1 --alarm-names lab-billing-5
aws logs delete-metric-filter --log-group-name /aws/lab/app --filter-name lab-errors || true
aws logs delete-log-group --log-group-name /aws/lab/app
aws cloudwatch delete-dashboards --dashboard-names lab-sa
# topic SNS : delete si plus utilisé

EC2 status checks

Outre CPU, alarmez StatusCheckFailed pour remplacer une instance morte via action EC2 Recover/Reboot — complémentaire du health check ALB en production réelle.

Erreurs fréquentes

Symptôme Cause Correction
Billing metric vide Pas us-east-1 / alerts off Region + Billing preferences
Alarme INSUFFICIENT_DATA Instance stop / période Données manquantes ; treat-missing-data
Facture Logs Rétention never / gros volume Retention policy + filtres

Agent vs Embedded Metric Format

EC2 : CloudWatch Agent pour mem/disk. Apps : EMF dans les logs → métriques sans PutMetricData manuel. Pour l’examen, sachez que CPU de base arrive sans agent ; RAM nécessite l’agent.

Custom metrics

PutMetricData permet d’envoyer Lab/App OrdersPerMinute. Respectez les quotas et agrégez côté app (pas un put par requête web si possible). Les métriques custom hors Free Tier peuvent être facturées.

Synthèse SA

Observability = metrics + logs + traces (X-Ray). Ce lab couvre metrics/logs ; les traces viennent avec les tutos Lambda/API.

Composite alarms & Anomaly detection

Alarmes composites (AND/OR) et détection d’anomalie (bande machiniste) existent pour réduire le bruit — hors lab minimal, utiles en prod mature.

Lab bonus (5–8 min) — forcer ALARM et lire l’historique

# Force l’état pour tester la chaîne SNS sans stresser l’EC2
aws cloudwatch set-alarm-state   --alarm-name lab-ec2-cpu-high   --state-value ALARM   --state-reason "lab-test-manual"

aws cloudwatch describe-alarm-history   --alarm-name lab-ec2-cpu-high   --max-records 5   --query 'AlarmHistoryItems[].{Time:Timestamp,Summary:HistorySummary}'

# Remettre OK ensuite
aws cloudwatch set-alarm-state   --alarm-name lab-ec2-cpu-high   --state-value OK   --state-reason "lab-test-reset"

Vérifiez l’email / la souscription SNS (confirmez le lien si premier abonnement). Objectif : valider alarme → action sans attendre un vrai pic CPU.

Scénario examen classique

« Vous devez être alerté si la facture estimée dépasse 5 USD et si une flotte EC2 dépasse 70 % CPU pendant 10 minutes. » → alarme Billing en us-east-1 + alarme CPUUtilization en ca-central-1, toutes deux vers le même topic SNS. Pour l’ASG, préférez une scaling policy sur la métrique plutôt qu’un simple email. N’oubliez pas treat-missing-data et la rétention des Log Groups — deux pièges fréquents Associate.

Checklist lab anti-facture CloudWatch

  1. Region lab = ca-central-1 ; billing alarm explicitement --region us-east-1.
  2. Rétention Log Group 7 ou 14 jours dès la création (jamais « Never expire » en lab).
  3. Une seule souscription email sur lab-alerts ; plusieurs alarmes dessus.
  4. Supprimez alarmes, dashboard, metric filter, log group et (si jetable) le topic SNS en fin de lab.
  5. Évitez Contributor Insights / Canaries / métriques custom haute cardinalité hors besoin réel.

Granularité et namespaces utiles

Namespace Métriques typiques Usage SA
AWS/EC2 CPU, StatusCheckFailed, Network ASG, recover
AWS/ApplicationELB HTTPCode_Target_5XX_Count, TargetResponseTime SLO HTTP
AWS/RDS CPU, FreeStorageSpace, DatabaseConnections Disque plein
AWS/Lambda Errors, Throttles, Duration Serverless
AWS/Billing EstimatedCharges (us-east-1) Anti-facture

En ca-central-1, alarmez d’abord CPU + 5XX ALB + FreeStorageSpace RDS — trio qui évite 80 % des surprises lab.

Quiz (5 questions)

1. Les métriques AWS/Billing se consultent surtout en : – A. eu-west-3 uniquement
– B. us-east-1
– C. Local Zones

2. Un Log Group sans rétention : – A. S’auto-supprime
– B. Peut coûter indéfiniment
– C. Est gratuit illimité

3. Une alarme CloudWatch peut surtout : – A. Remplacer IAM
– B. Notifier SNS / déclencher actions
– C. Créer un VPC

4. Un metric filter sert surtout à : – A. Remplacer VPC Flow Logs
– B. Transformer des lignes de logs en métrique alarmable
– C. Chiffrer EBS

5. set-alarm-state en lab permet surtout de : – A. Modifier la facture AWS
– B. Tester la chaîne alarme → SNS sans vrai pic
– C. Créer un Log Group

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

Pour aller plus loin

Maillage série AWS (P1)

← Précédent SNS/SQS
→ Suivant SSM Session Manager
Aussi ASG · EC2

Retour parcours AWS — hub de la série et leçons sœurs.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *