Introduction
Dans un monde cloud où les applications tournent 24/7, le monitoring est essentiel pour détecter les anomalies avant qu'elles n'impactent les utilisateurs. AWS CloudWatch, service natif d'Amazon, collecte métriques, logs et événements pour une visibilité totale. Ce tutoriel intermediate vous guide pour implémenter un monitoring complet : métriques custom, alarmes automatisées et dashboards interactifs.
Pourquoi c'est crucial en 2026 ? Avec l'essor de l'IA et des microservices, les pannes coûtent cher – jusqu'à 10 000 €/minute selon Gartner. Nous utilisons AWS CDK (Infrastructure as Code en TypeScript) pour déployer rapidement, et le SDK AWS pour envoyer des métriques depuis vos apps Node.js. Résultat : un système scalable, observable et actionable. Suivez ces étapes pour un setup production-ready en moins d'une heure. (142 mots)
Prérequis
- Compte AWS actif avec permissions IAM (CloudWatchFullAccess, CDKDeploy).
- Node.js 20+ installé.
- AWS CLI v2 configuré (
aws --version). - Connaissances de base en TypeScript et AWS CDK.
- Région AWS par défaut (ex: eu-west-1).
Initialiser le projet CDK
mkdir cloud-monitoring-cdk
cd cloud-monitoring-cdk
npm init -y
npm install aws-cdk-lib constructs @aws-sdk/client-cloudwatch
npm install -D typescript ts-node @types/node cdk
cdk init app --language typescript
npm run buildCette commande crée un projet CDK TypeScript standard, installe les dépendances essentielles (CDK v2, SDK CloudWatch) et initialise la structure. Le cdk init génère boilerplate prêt à customiser. Évitez les versions CDK v1 obsolètes pour une compatibilité 2026.
Configurer les credentials AWS
Exécutez aws configure pour définir votre Access Key, Secret Key, région (ex: eu-west-1) et output (json). Vérifiez avec aws sts get-caller-identity. Cela active CDK et SDK sans hardcoder de secrets – une pratique sécurisée.
Définir la stack CDK principale
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
export class CloudMonitoringStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Métrique custom exemple (simule CPU app)
const cpuMetric = new cloudwatch.Metric({
namespace: 'MyApp',
metricName: 'CPUUtilization',
statistic: 'Average',
period: cdk.Duration.minutes(1),
});
// Alarme si CPU > 80%
new cloudwatch.Alarm(this, 'HighCPUAlarm', {
metric: cpuMetric,
threshold: 80,
evaluationPeriods: 2,
alarmDescription: 'Alarme CPU élevée pour MyApp',
});
// Dashboard avec widget
const dashboard = new cloudwatch.Dashboard(this, 'MyAppDashboard', {
dashboardName: 'MyApp-Monitoring',
});
dashboard.addWidgets(
new cloudwatch.GraphWidget({
title: 'CPU Utilization',
left: [cpuMetric],
}),
);
}
}Cette stack crée une métrique custom 'CPUUtilization' dans namespace 'MyApp', une alarme qui se déclenche au-dessus de 80% sur 2 périodes, et un dashboard avec graphique. CDK synthétise en CloudFormation. Piège : Oubliez pas d'importer les modules pour éviter les erreurs de résolution.
Configurer l'app CDK
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib';
import { CloudMonitoringStack } from '../lib/cloud-monitoring-stack';
const app = new cdk.App();
new CloudMonitoringStack(app, 'CloudMonitoringStack', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION,
},
});Fichier d'entrée CDK standard qui instancie la stack avec env auto-détectée. Ajoutez env pour cibler région/compte précis. Exécutez cdk synth pour valider avant deploy – évite les surprises en prod.
Déployer l'infrastructure
Exécutez cdk bootstrap (une fois par compte/région), puis cdk deploy. Cela crée les ressources CloudWatch. Vérifiez dans console AWS > CloudWatch > Dashboards et Alarms. Le dashboard est live !
Envoyer des métriques custom
import { CloudWatchClient, PutMetricDataCommand } from '@aws-sdk/client-cloudwatch';
const client = new CloudWatchClient({ region: 'eu-west-1' });
const params = {
Namespace: 'MyApp',
MetricData: [
{
MetricName: 'CPUUtilization',
Value: 85.5,
Unit: 'Percent',
Timestamp: new Date(),
},
],
};
const command = new PutMetricDataCommand(params);
client.send(command).then(() => console.log('Métrique envoyée !')).catch(console.error);Ce script utilise le SDK v3 pour pousser une métrique CPU à 85.5% dans le namespace 'MyApp', déclenchant l'alarme. Intégrez-le dans votre app Node.js (ex: cron ou middleware). Piège : Sans credentials, ça fail – utilisez IAM roles en prod.
Package.json complet pour l'app sender
{
"name": "metric-sender",
"version": "1.0.0",
"main": "metric-sender.js",
"scripts": {
"start": "ts-node metric-sender.ts",
"build": "tsc"
},
"dependencies": {
"@aws-sdk/client-cloudwatch": "^3.600.0",
"typescript": "^5.5.3",
"ts-node": "^10.9.2",
"@types/node": "^20.14.10"
}
}Package.json dédié au sender : npm install puis npm start pour tester. Séparez sender de CDK pour modularité. Versionnez les deps pour reproductibilité en CI/CD.
Déployer et tester
cd cloud-monitoring-cdk
cdk deploy
cd ..
npm install
npm start # Envoie métrique et trigger alarmeDéploie CDK puis teste sender. L'alarme se déclenche en ~2min. Surveillez SNS/CloudWatch Events pour notifications. Nettoyez avec cdk destroy.
Bonnes pratiques
- Utilisez des namespaces uniques par app pour isoler métriques.
- Ajoutez dimensions (ex: {InstanceId}) pour granularité.
- Intégrez logs et traces avec X-Ray pour observabilité full-stack.
- Automatisez avec Lambda : Trigger alarms via SNS/EventsBridge.
- Taggez ressources CDK pour coûts tracking.
Erreurs courantes à éviter
- Pas de bootstrap CDK : Erreur "no bootstrap stack". Faites
cdk bootstrap. - Métriques sans données : Alarmes restent OK – envoyez data d'abord.
- Région mismatch : SDK/CDK doivent matcher
aws configure. - Permissions IAM manquantes : Ajoutez
cloudwatch:PutMetricDataau rôle.
Pour aller plus loin
Approfondissez avec CloudWatch Logs Insights ou intégrez Prometheus via ADOT. Découvrez nos formations DevOps Learni pour maîtriser Kubernetes monitoring et Grafana.