AWS CloudWatch
Le système nerveux de vos applications cloud qui surveille, analyse et visualise en temps réel toutes les métriques et logs de votre infrastructure.
Qu'est-ce qu'AWS CloudWatch ?
Imaginez que vous possédez un parc d'attractions complexe. Comment sauriez-vous si l'une des attractions commence à dysfonctionner ? Comment pourriez-vous détecter les longues files d'attente avant que les clients ne se plaignent ? Et comment analyseriez-vous la fréquentation pour optimiser votre personnel ?
AWS CloudWatch est comme un système de surveillance sophistiqué pour votre parc d'attractions numérique. Il collecte des données sur tous les aspects de vos applications et infrastructures cloud - combien de visiteurs vous avez, combien de temps les attractions (services) mettent à fonctionner, quelles erreurs se produisent, et bien plus encore.
Pourquoi est-ce important ?
Visibilité
Vous donne une image claire de ce qui se passe dans vos applications et votre infrastructure à tout moment.
Alertes
Vous avertit automatiquement quand quelque chose ne va pas, souvent avant que vos utilisateurs ne s'en aperçoivent.
En résumé, AWS CloudWatch est un système complet de surveillance et d'observabilité qui vous aide à garder vos applications cloud en bonne santé, à résoudre rapidement les problèmes, et à optimiser vos ressources en fonction des besoins réels.
Fonctionnement technique
AWS CloudWatch est un service d'observabilité complet qui collecte, agrège et analyse des données provenant de toutes les couches de votre pile technologique AWS. Il fournit une vue unifiée des métriques, des logs, des traces et des événements, permettant aux équipes de développement et d'opérations de surveiller efficacement leur infrastructure et leurs applications.
Les composants principaux
CloudWatch Metrics
CloudWatch collecte et stocke des métriques numériques représentant les points de données sur la performance de vos ressources et applications. AWS fournit automatiquement des métriques pour la plupart des services, et vous pouvez également créer vos propres métriques personnalisées.
// Exemple de création et publication d'une métrique CloudWatch avec AWS SDK
const { CloudWatchClient, PutMetricDataCommand } = require('@aws-sdk/client-cloudwatch');
async function publishCustomMetric() {
const client = new CloudWatchClient({ region: 'eu-west-3' });
const params = {
MetricData: [
{
MetricName: 'ActiveUsers',
Dimensions: [
{ Name: 'Service', Value: 'UserAuthentication' },
{ Name: 'Environment', Value: 'Production' }
],
Unit: 'Count',
Value: 42,
Timestamp: new Date()
}
],
Namespace: 'MyApplication'
};
try {
const command = new PutMetricDataCommand(params);
const response = await client.send(command);
console.log('Métrique publiée avec succès:', response);
return response;
} catch (error) {
console.error('Erreur lors de la publication de la métrique:', error);
throw error;
}
}
CloudWatch Alarms
Les alarmes surveillent les métriques sur une période définie et déclenchent des actions lorsque les seuils sont dépassés. Ces actions peuvent inclure l'envoi de notifications via SNS ou le déclenchement d'actions automatisées, comme le scaling d'
Amazon ECS ou
EC2.
// Définition d'une alarme CloudWatch dans un template CloudFormation
Resources:
HighCpuAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: high-cpu-usage-alarm
AlarmDescription: Se déclenche quand l'utilisation CPU dépasse 80% pendant 5 minutes
MetricName: CPUUtilization
Namespace: AWS/EC2
Statistic: Average
Dimensions:
- Name: InstanceId
Value: !Ref WebServerInstance
Period: 300
EvaluationPeriods: 1
Threshold: 80
ComparisonOperator: GreaterThanThreshold
AlarmActions:
- !Ref NotificationTopic
InsufficientDataActions:
- !Ref NotificationTopic
CloudWatch Logs
CloudWatch Logs centralise les logs de toutes vos ressources AWS et applications. Il vous permet de rechercher, de filtrer et d'analyser vos logs pour résoudre les problèmes, suivre les performances et réaliser des analyses de sécurité. Le service s'intègre nativement avec AWS Lambda et d'autres services AWS.
// Exemple d'interrogation de CloudWatch Logs avec CloudWatch Logs Insights
const { CloudWatchLogsClient, StartQueryCommand, GetQueryResultsCommand } = require('@aws-sdk/client-cloudwatch-logs');
async function queryCloudWatchLogs() {
const client = new CloudWatchLogsClient({ region: 'eu-west-3' });
// Requête Logs Insights sur le groupe de logs de l'application
const queryString = `
fields @timestamp, @message, @logStream, @log
| filter errorCode = 500
| sort @timestamp desc
| limit 20
`;
const startTime = new Date();
startTime.setHours(startTime.getHours() - 24); // Dernières 24 heures
const startQueryParams = {
logGroupName: '/aws/lambda/my-application',
startTime: Math.floor(startTime.getTime() / 1000),
endTime: Math.floor(new Date().getTime() / 1000),
queryString,
};
try {
// Lancer la requête
const startQueryCommand = new StartQueryCommand(startQueryParams);
const { queryId } = await client.send(startQueryCommand);
// Attendre les résultats
let results;
let status = 'Running';
while (status === 'Running') {
await new Promise(resolve => setTimeout(resolve, 1000)); // Attendre 1 seconde
const getResultsCommand = new GetQueryResultsCommand({ queryId });
const response = await client.send(getResultsCommand);
status = response.status;
if (status === 'Complete') {
results = response.results;
}
}
return results;
} catch (error) {
console.error('Erreur lors de l\'interrogation des logs:', error);
throw error;
}
}
CloudWatch Dashboards
Les tableaux de bord CloudWatch sont des pages personnalisables qui vous permettent de visualiser les métriques et les alarmes de plusieurs ressources et applications dans une seule vue. Vous pouvez créer des tableaux de bord personnalisés pour surveiller des aspects spécifiques de votre infrastructure.
// Exemple de définition d'un tableau de bord CloudWatch
{
"widgets": [
{
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties": {
"metrics": [
[ "AWS/Lambda", "Invocations", "FunctionName", "processOrders" ],
[ ".", "Errors", ".", "." ],
[ ".", "Duration", ".", "." ]
],
"view": "timeSeries",
"stacked": false,
"region": "eu-west-3",
"title": "Lambda - Performance des traitements de commandes",
"period": 300,
"stat": "Sum"
}
},
{
"type": "metric",
"x": 12,
"y": 0,
"width": 12,
"height": 6,
"properties": {
"metrics": [
[ "AWS/ApiGateway", "Count", "ApiName", "ecommerce-api" ],
[ ".", "4XXError", ".", "." ],
[ ".", "5XXError", ".", "." ]
],
"view": "timeSeries",
"stacked": false,
"region": "eu-west-3",
"title": "API Gateway - Requêtes et erreurs",
"period": 300,
"stat": "Sum"
}
},
{
"type": "log",
"x": 0,
"y": 6,
"width": 24,
"height": 6,
"properties": {
"query": "SOURCE '/aws/lambda/processOrders' | fields @timestamp, @message\n| filter @message like /Error/\n| sort @timestamp desc\n| limit 20",
"region": "eu-west-3",
"title": "Erreurs Lambda - 20 dernières erreurs",
"view": "table"
}
}
]
}
Concepts clés et fonctionnalités avancées
- Namespaces - Conteneurs pour les métriques liées à un service ou une application spécifique
- Dimensions - Paires clé-valeur qui identifient une métrique de manière unique (ex: InstanceId, FunctionName)
- Statistiques - Calculs mathématiques appliqués aux métriques sur une période spécifiée (Average, Sum, Minimum, Maximum, etc.)
- Period - Intervalle de temps pour lequel les statistiques sont calculées (ex: 60 secondes, 5 minutes)
- Groupes de logs - Collections de flux de logs provenant d'une même application ou ressource
- Log Insights - Moteur de requête puissant pour analyser vos logs avec un langage de requête dédié
- Embedded Metrics Format - Format structuré pour l'extraction de métriques à partir de logs
- Composite Alarms - Alarmes qui combinent plusieurs alarmes avec des opérateurs logiques (AND, OR, NOT)
Intégrations importantes
CloudWatch s'intègre avec de nombreux autres services AWS pour former un écosystème complet d'observabilité :
- CloudWatch Agent - Agent permettant de collecter des métriques et logs détaillés des serveurs et instances
- X-Ray - Service de traçage pour analyser le flux de requêtes à travers vos microservices
- Amazon EventBridge - Service d'événements serverless pour connecter vos applications avec des services AWS
- AWS SNS & SQS - Services de messagerie pour distribuer les notifications d'alarmes
- AWS Lambda - Fonctions serverless qui peuvent être déclenchées par des alarmes ou des événements CloudWatch
Cas d'usage
Surveillance proactive de l'infrastructure
Configurez des alarmes pour détecter les problèmes potentiels avant qu'ils n'affectent vos utilisateurs, comme des tendances d'utilisation CPU anormales ou des erreurs de service en augmentation.
Optimisation des performances des applications
Suivez les métriques de performance de vos applications, comme les temps de réponse ou les taux d'erreur, pour identifier les goulots d'étranglement et optimiser les performances.
Optimisation des coûts
Surveillez l'utilisation des ressources pour identifier les instances sous-utilisées ou surdimensionnées, et mettez en place des politiques de scaling automatique basées sur la demande réelle.
Analyse des incidents
Utilisez les logs et les métriques centralisés pour diagnostiquer rapidement les incidents, identifier les causes racines, et réduire le temps moyen de résolution (MTTR).
Industries tirant parti de CloudWatch
Les capacités d'observabilité de CloudWatch sont cruciales pour diverses industries :

Ce que j'ai réalisé avec AWS CloudWatch
Monitoring et optimisation des infrastructures cloud
J'ai utilisé AWS CloudWatch dans plusieurs contextes professionnels exigeants, notamment au sein du groupe Altice et chez Wooskill.
Surveillance hybride avec Datadog
Dans mes missions, j'ai souvent travaillé dans des environnements où CloudWatch était utilisé en complément de Datadog. Pour le monitoring quotidien, Datadog était l'outil principal, mais dès qu'un doute surgissait sur un traitement spécifique, CloudWatch devenait la référence indispensable pour accéder aux logs détaillés et aux métriques précises.
Détection proactive des anomalies
J'ai configuré des tableaux de bord et des alertes CloudWatch pour surveiller en temps réel les performances des applications, permettant d'identifier et de résoudre les problèmes avant qu'ils n'impactent les utilisateurs finaux. Cette approche proactive a considérablement amélioré la fiabilité des services.