Table of Contents
Les applications sans serveur ont transformé la façon dont les organisations construisent et déploient des logiciels, offrant une évolutivité élastique et un prix de paiement par exécution. Cependant, la nature éphémère des fonctions sans serveur rend l'observation et la surveillance plus difficiles que les serveurs traditionnels à long terme. Sans instrumentation appropriée, il devient presque impossible de déboguer les goulets d'étranglement ou les défaillances de performance. Amazon CloudWatch et Azure Monitor sont les principaux services de surveillance natifs pour les environnements sans serveur AWS et Azure. Ils fournissent des capacités complètes de l'enregistrement, de la collecte métrique, de l'alerte et du tableau de bord indispensables pour maintenir des applications sans serveur de qualité de production.
Pourquoi la surveillance sans serveur exige une approche différente
La surveillance traditionnelle repose sur des agents installés sur des machines ou conteneurs virtuels pour collecter des données CPU, mémoire et disque. Les architectures sans serveur permettent d'absorber l'infrastructure sous-jacente, de sorte que vous ne pouvez pas installer des agents ou accéder au système d'exploitation. Vous dépendez plutôt des services de surveillance qui reçoivent la télémétrie de la plate-forme elle-même. Les fonctions sont de courte durée, ne pouvant durer que millisecondes, et peuvent être étendues de zéro à des milliers d'exécutions simultanées.
Comprendre CloudWatch et Azure Monitor
Amazon CloudWatch est un service de surveillance et d'observation pour les ressources et applications AWS. Sans serveur, il collecte des métriques à partir d'AWS Lambda, API Gateway, DynamoDB, Step Functions, et d'autres services. CloudWatch Logs ingère des données de journal à partir d'exécutions de fonctions Lambda, tandis que CloudWatch Metrics fournit des métriques par défaut et personnalisées. CloudWatch Alarmes déclenche des actions basées sur des seuils métriques, et CloudWatch Logs Insights permet de requête SQL de données de journal. CloudWatch prend également en charge des tableaux de bord pour visualiser des métriques sur plusieurs comptes et Régions.
Azure Monitor est la plate-forme de surveillance unifiée des services Azure, y compris Azure Functions, Logic Apps, Event Grid et API Management. Elle collecte les paramètres de la plate-forme, les journaux d'activité et les données diagnostiques. Application Insights, une fonctionnalité d'Azure Monitor, fournit une surveillance profonde des performances des applications (APM) pour les fonctions sans serveur. Il suit les taux de demande, les temps de réponse, les taux de défaillance, les dépendances et les exceptions.
Les mesures CloudWatch sont stockées pendant 15 mois avec une granularité de rétention variable, tandis que les mesures Azure Monitor conservent 93 jours par défaut. CloudWatch Logs Insights charge chaque Go de données numérisées, tandis que Azure Monitor Log Analytics charge chaque Go ingéré et conservé. La compréhension de ces modèles de prix vous aide à optimiser les coûts tout en assurant des données suffisantes pour le dépannage.
Configuration de CloudWatch pour les applications sans serveur
La surveillance d'une application sans serveur sur AWS commence par l'activation de la log et des métriques pour les fonctions Lambda. Le service Lambda émet automatiquement un ensemble de métriques par défaut : Invocations, Erreurs, Throttles, Durée et ConcurrentExecutions. Cependant, vous devez configurer la surveillance personnalisée pour capturer des métriques spécifiques à l'entreprise et des journaux détaillés.
Étape 1: Autorisations IAM pour CloudWatch
Les fonctions Lambda nécessitent un rôle IAM avec la permission d'écrire des journaux dans les journaux CloudWatch. Joindre la politique gérée ou créer une politique personnalisée qui permet , et . Sans ces autorisations, les données de journal ne seront pas envoyées, et le débogage devient devinette.
Étape 2: Configuration des journaux de veille en nuage
Chaque invocation de Lambda produit un flux de journal nommé d'après la fonction et l'horodatage. Le groupe de log regroupe tous les flux pour une fonction. Vous pouvez définir la rétention de log pour éviter une accumulation illimitée – recommandé pour définir une politique de rétention (par exemple, 30 jours) pour se conformer à la gouvernance des données. Utilisez la logage structuré (JSON) pour faciliter la requête des données de log avec CloudWatch Logs Insights.
console.log(JSON.stringify({
requestId: context.awsRequestId,
eventType: event.httpMethod,
statusCode: 200,
durationMs: performance.now() - startTime
}));
Les journaux structurés permettent des requêtes comme .
Étape 3: Création de mesures et d'alarmes personnalisées
Par exemple, suivre le nombre d'éléments traités par exécution, latence vers les services en aval ou le nombre d'erreurs par fonction d'affaires. Les charges CloudWatch pour les mesures personnalisées, donc être sélectives. Créez des alarmes CloudWatch pour les seuils critiques : une alarme sur plus d'une minute pour les fonctions de production, ou une alarme sur pour détecter les exécutions lentes. Les alarmes peuvent déclencher des notifications SNS, invoquer une autre Lambda pour l'auto-remédiation, ou envoyer à Slack via webhook.
Étape 4: Analyse avancée des journaux avec CloudWatch Logs Insights
CloudWatch Logs Insights permet de interroger des groupes de journaux sur plusieurs fonctions. Vous pouvez identifier les goulets d'étranglement de performance en filtrant sur des invocations de haute durée, en trouvant des erreurs en cherchant des chaînes d'exception ou en mesurant la latence p95. Exemple de requête pour trouver les 10 invocations les plus lentes :
fields @timestamp, @duration, @message
| filter @duration > 2000
| sort @duration desc
| limit 10
Utilisez les résultats de la requête pour créer des tableaux de bord qui montrent les taux d'erreur, les tendances de la requête et les erreurs les plus importantes.
Configuration de l'écran Azure pour les applications sans serveur
Les fonctions Azure sont le calcul primaire sans serveur dans Azure. Par défaut, les fonctions émettent des métriques de plate-forme comme le compte d'exécution de fonction et les unités d'exécution de fonction, mais vous avez besoin d'applications Insights pour des informations plus approfondies.
Étape 1: Activer les données d'application
Pour les fonctions existantes, allez dans l'application Fonction dans le portail, sous "Paramètres" -> "Application Insights" et activez-le. Ceci permet automatiquement d'utiliser la fonction pour envoyer la télémétrie : requêtes, dépendances, exceptions et événements personnalisés.
Étape 2: Configurer les paramètres de diagnostic
Pour la télémétrie supplémentaire, activez les paramètres diagnostiques de votre application Fonction pour envoyer des journaux et des métriques dans les espaces de travail Log Analytics. Dans le portail, naviguez vers "Monitoring" -> "Paramètres diagnostiques", puis ajoutez un paramètre pour streamer les FunctionAppLogs et un espace de travail Log Analytics. Cela vous donne accès aux journaux d'exécution de requêtes aux côtés des données Application Insights en utilisant KQL.
Étape 3 : Analyser la performance avec les données d'application
Le tableau de bord Application Insights affiche les taux de demande, les temps de réponse moyens et les taux de défaillance. Utilisez la lame Performance pour identifier les opérations lentes, et la lame Faillites pour voir les exceptions et les traces de pile. Application Insights prend également en charge les mesures en direct, montrant la télémétrie en temps réel pour déboguer les corrections chaudes.
Étape 4: Mise en place d'alertes dans Azure Monitor
Créer des alertes basées sur des métriques ou des requêtes de journal. Par exemple, une alerte sur "Metric Alert" pour "Function Execution Count" quand elle tombe à zéro pendant 30 minutes, indiquant un problème de déploiement possible. Ou une "Log Alert" qui déclenche lorsque la requête retourne > 0. Les alertes peuvent envoyer des courriels, SMS ou déclencher des groupes d'action qui exécutent des livres Azure Automation ou des applications logiques pour remédier automatiquement.
Stratégies de surveillance avancées pour les sans-serveur
Traçage distribué
Les applications sans serveur sont souvent constituées de fonctions multiples, de passerelles API, de files d'attente et de bases de données. Lorsqu'une requête traverse plusieurs services, identifier la cause profonde de la latence nécessite un traçage distribué. AWS X-Ray s'intègre à CloudWatch et Lambda. Activer le traçage actif dans Lambda, et X-Ray trace les requêtes de API Gateway via Lambda et les services en aval comme DynamoDB ou SQS. Azure Monitor Application Insights fournit des diagnostics de transactions de bout en bout similaires. Vous pouvez voir une carte de toutes les dépendances et de leurs temps de réponse.
Instrumentation personnalisée
Les métriques et les journaux par défaut ne saisissent pas les informations de niveau d'entreprise. Emitez des métriques personnalisées pour les KPI spécifiques au domaine : nombre de commandes traitées, ratio de cache, sessions d'utilisateur ou performance de la requête de base de données. Sur AWS, utilisez la bibliothèque pour créer des métriques structurées avec des dimensions. Sur Azure, utilisez les API TrackEvent et TrackMetric de l'application Insights SDK dans votre code de fonction.
Détection d'anomalies
CloudWatch Metric Math permet des seuils dynamiques, mais pour une détection d'anomalie plus sophistiquée, utiliser des bandes de détection d'anomalie CloudWatch. Ces bandes s'adaptent aux modèles métriques, réduisant les faux positifs. Azure Monitor offre Smart Detection qui alerte automatiquement sur les anomalies dans les taux de défaillance, la durée et la latence de dépendance.
Surveillance des coûts
Les coûts d'ingestion des données de CloudWatch Logs peuvent augmenter pendant les périodes de trafic élevé. Réglez la rétention des journaux à 7 ou 30 jours pour la plupart des fonctions, et filtrez les journaux verbeux pour éviter un stockage inutile. Sur Azure, utilisez l'échantillonnage dans Application Insights pour réduire le volume de télémétrie pour les fonctions à haut débit. Les deux plateformes vous permettent d'exclure les niveaux de log moins importants (DEBUG) de l'ingestion. Surveillez votre facture mensuelle CloudWatch ou Azure Monitor aux côtés des mesures d'application.
Meilleures pratiques pour une observation efficace sans serveur
- Adopt log structuré[ en format JSON avec un schéma cohérent pour toutes les fonctions. Inclure les ID de requête, le temps d'exécution, l'état et les codes d'erreur.
- Utilisez des tableaux de bord centralisés qui combinent les métriques et les journaux de plusieurs services.
- Faire des alertes proactives[ pour les mesures critiques pour les entreprises (invocations zéro, taux d'erreur élevé) et les mesures opérationnelles (durée de démarrage froide, gaz).
- Identificateurs de corrélation d'implémentation pour toutes les requêtes entrantes afin de tracer les flux de bout en bout. Passez l'ID par les en-têtes HTTP, les files d'attente et les contextes de fonctions.
- Revoir et réduire le bruit[ en archiveant les vieux journaux et en supprimant les alertes non actionnables.
- Monitor cold starts de près. Dans CloudWatch, la métrique indique le temps de démarrage à froid. Dans Azure Monitor, utilisez la dimension personnalisée . Optimisez par une concordance ou gardez les fonctions au chaud.
- Intégrer avec des outils de gestion d'incident comme PagerDuty ou Opsgenie. CloudWatch et Azure Monitor peuvent transmettre des alertes à ces systèmes via des webhooks.
Comparaison de CloudWatch et de l'Azure Monitor : Principales différences
Bien que les deux plateformes offrent des capacités similaires, il existe des distinctions importantes à considérer lors du choix entre les environnements AWS et Azure sans serveur:
- Grâcité de mesure:[ Les mesures de CloudWatch sont disponibles à résolution d'une minute, avec des mesures à haute résolution à 1 seconde (coût supplémentaire).Les mesures standard de Azure Monitor sont à valeur par défaut d'une minute, mais certaines mesures peuvent être collectées à intervalles de 30 secondes avec une configuration supplémentaire.
- Log analytics:[ CloudWatch Logs Insights utilise un langage de requête similaire à SQL, tandis qu'Azure Monitor utilise KQL, qui est plus puissant pour l'analyse de séries chronologiques et se joint à plusieurs tables.
- Modèle de tarification: CloudWatch charges par métrique, par log GB ingéré, et par GB scanné par Insights. Azure Monitor charges par GB ingéré dans Log Analytics et par GB de données conservées. Pour des fonctions à forte circulation, Azure Monitor ingéré prix peut être plus prévisible si vous contrôlez le volume de log.
- Intégration avec d'autres services: CloudWatch s'intègre étroitement avec AWS X-Ray, CloudTrail et VPC Flow Logs. Azure Monitor s'intègre avec Azure Sentinel, Azure Policy et Microsoft 365 Defender.
- Support multi-cloud: Azure Monitor prend en charge les sources AWS et GCP via des connecteurs, tandis que CloudWatch est AWS-native mais peut recevoir des journaux depuis des locaux via CloudWatch Agent. Pour les architectures multi-cloud, considérez des outils tiers comme Datadog ou New Relic pour une uniformité d'observation.
Exemple de surveillance du monde réel : Débit de vérification du commerce électronique
Considérez une application sans serveur de commerce électronique sur AWS qui utilise API Gateway, Lambda, DynamoDB et SQS. Pour surveiller le flux de caisse:
- Activer le traçage X-Ray sur API Gateway et Lambda pour tracer chaque requête HTTP à travers tous les appels en aval.
- Emitez des mesures personnalisées pour le volume de commande, le taux de succès, le prix moyen et la latence de la passerelle de paiement en utilisant le format métriques intégré.
- Créez un tableau de bord CloudWatch montrant l'entonnoir de caisse : nombre de requêtes API, invocations Lambda, capacité de lecture/écriture DynamoDB et nombre d'erreurs par étape.
- Réglez les alarmes : si le taux d'erreur de commande dépasse 1% sur 5 minutes, pagez l'ingénieur de garde. Si les gaz DynamoDB se produisent plus de 10 fois, déclenchez une politique d'échelle automatique ou alertez l'équipe de base de données.
- Utilisez les journaux CloudWatch Insights pour demander des ID qui ont échoué et qui sont corrélés avec les journaux de passerelle de paiement (envoyés à CloudWatch depuis des services externes via API).
Cette surveillance proactive permet à l'équipe de détecter et de résoudre les problèmes avant que les clients ne soient touchés. La même approche s'applique à Azure en utilisant Azure Functions, Application Insights et Cosmos DB.
Conclusion
Amazon CloudWatch et Azure Monitor sont essentiels pour gérer à l'échelle des applications sans serveur. En allant au-delà de la base de données et en embrassant des mesures personnalisées, des recherches distribuées et des alertes intelligentes, vous gagnez la visibilité nécessaire pour maintenir une disponibilité et des performances élevées.Les deux plateformes offrent des fonctionnalités puissantes qui, lorsqu'elles sont configurées correctement, réduisent le temps moyen de résolution et aident à optimiser les coûts.