Journalisation et statistiques pour AWS Lambda - AWS Conseils prescriptifs

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Journalisation et statistiques pour AWS Lambda

Lambda élimine le besoin de gérer et de surveiller les serveurs pour vos charges de travail et fonctionne automatiquement avec CloudWatch les métriques et les CloudWatch journaux sans autre configuration ni instrumentation du code de votre application. Cette section vous aide à comprendre les caractéristiques de performance des systèmes utilisés par Lambda et l'influence de vos choix de configuration sur les performances. Il vous aide également à enregistrer et à surveiller vos fonctions Lambda afin d'optimiser les performances et de diagnostiquer les problèmes au niveau de l'application.

Journalisation des fonctions Lambda

Lambda diffuse automatiquement la sortie standard et les messages d'erreur standard d'une fonction Lambda vers CloudWatch Logs, sans avoir besoin de pilotes de journalisation. Lambda approvisionne également automatiquement les conteneurs qui exécutent votre fonction Lambda et les configure pour générer des messages de journal dans des flux de journal distincts.

Les appels ultérieurs de votre fonction Lambda peuvent réutiliser le même conteneur et le générer dans le même flux de journal. Lambda peut également provisionner un nouveau conteneur et envoyer l'invocation dans un nouveau flux de log.

Lambda crée automatiquement un groupe de journaux lorsque votre fonction Lambda est invoquée pour la première fois. Les fonctions Lambda peuvent avoir plusieurs versions et vous pouvez choisir la version que vous souhaitez exécuter. Tous les journaux des appels de la fonction Lambda sont stockés dans le même groupe de journaux. Le nom ne peut pas être modifié et est au /aws/lambda/<YourLambdaFunctionName> format. Un flux de journal distinct est créé dans le groupe de journaux pour chaque instance de fonction Lambda. Lambda dispose d'une convention de dénomination standard pour les flux de journaux qui utilise un YYYY/MM/DD/[<FunctionVersion>]<InstanceId> format. Le InstanceId est généré par AWS pour identifier l'instance de fonction Lambda.

Nous vous recommandons de formater vos messages de journal au format JSON, car vous pouvez les interroger plus facilement avec CloudWatch Logs Insights. Ils peuvent également être filtrés et exportés plus facilement. Vous pouvez utiliser une bibliothèque de journalisation pour simplifier ce processus ou créer vos propres fonctions de gestion des journaux. Nous vous recommandons d'utiliser une bibliothèque de journalisation pour faciliter le formatage et la classification des messages de journal. Par exemple, si votre fonction Lambda est écrite en Python, vous pouvez utiliser le module de journalisation Python pour enregistrer les messages et contrôler le format de sortie. Lambda utilise nativement la bibliothèque de journalisation Python pour les fonctions Lambda écrites en Python, et vous pouvez récupérer et personnaliser l'enregistreur dans votre fonction Lambda. AWS Labs a créé la boîte à AWS Lambda outils pour développeurs Powertools for Python afin de faciliter l'enrichissement des messages de journal avec des données clés telles que les démarrages à froid. La boîte à outils est disponible pour Python, Java, Typescript et .NET.

Une autre bonne pratique consiste à définir le niveau de sortie du journal à l'aide d'une variable et à l'ajuster en fonction de l'environnement et de vos besoins. Le code de votre fonction Lambda, en plus des bibliothèques utilisées, peut générer une grande quantité de données de journal en fonction du niveau de sortie du journal. Cela peut avoir un impact sur vos coûts de journalisation et affecter les performances.

Lambda vous permet de définir des variables d'environnement pour l'environnement d'exécution de votre fonction Lambda sans mettre à jour votre code. Par exemple, vous pouvez créer une variable d'LAMBDA_LOG_LEVELenvironnement qui définit le niveau de sortie du journal que vous pouvez récupérer à partir de votre code. L'exemple suivant tente de récupérer une variable d'LAMBDA_LOG_LEVELenvironnement et d'utiliser la valeur pour définir le résultat de journalisation. Si la variable d'environnement n'est pas définie, elle prend par défaut le INFO niveau.

import logging from os import getenv logger = logging.getLogger() log_level = getenv("LAMBDA_LOG_LEVEL", "INFO") level = logging.getLevelName(log_level) logger.setLevel(level)

Envoi de journaux vers d'autres destinations depuis CloudWatch

Vous pouvez envoyer des journaux vers d'autres destinations (par exemple, Amazon OpenSearch Service ou une fonction Lambda) en utilisant des filtres d'abonnement. Si vous n'utilisez pas Amazon OpenSearch Service, vous pouvez utiliser une fonction Lambda pour traiter les journaux et les envoyer au AWS service de votre choix à l'aide du. AWS SDKs

Vous pouvez également utiliser SDKs des destinations de journal en dehors du AWS Cloud dans votre fonction Lambda pour envoyer directement des instructions de journal à la destination de votre choix. Si vous choisissez cette option, nous vous recommandons de prendre en compte l'impact de la latence, du temps de traitement supplémentaire, de la gestion des erreurs et des nouvelles tentatives, ainsi que du couplage de la logique opérationnelle à votre fonction Lambda.

Métriques de la fonction Lambda

Lambda vous permet d'exécuter votre code sans gérer ni dimensionner les serveurs, ce qui élimine pratiquement le fardeau des audits et des diagnostics au niveau du système. Cependant, il est toujours important de comprendre les indicateurs de performance et d'appel au niveau du système pour vos fonctions Lambda. Cela vous permet d'optimiser la configuration des ressources et d'améliorer les performances du code. La surveillance et la mesure efficaces des performances peuvent améliorer l'expérience utilisateur et réduire vos coûts en dimensionnant correctement vos fonctions Lambda. Généralement, les charges de travail exécutées sous forme de fonctions Lambda comportent également des métriques au niveau de l'application qui doivent être capturées et analysées. Lambda prend directement en charge le format de métrique intégré pour faciliter la capture des métriques au niveau de l'application. CloudWatch

Métriques au niveau du système

Lambda s'intègre automatiquement à CloudWatch Metrics et fournit un ensemble de métriques standard pour vos fonctions Lambda. Lambda fournit également un tableau de bord de surveillance distinct pour chaque fonction Lambda avec ces métriques. Les deux indicateurs importants que vous devez surveiller sont les erreurs et les erreurs d'invocation. Comprendre les différences entre les erreurs d'appel et les autres types d'erreur vous aide à diagnostiquer et à prendre en charge les déploiements Lambda.

Les erreurs d'invocation empêchent l'exécution de votre fonction Lambda. Ces erreurs se produisent avant l'exécution de votre code. Vous ne pouvez donc pas implémenter de gestion des erreurs dans votre code pour les identifier. Vous devez plutôt configurer des alarmes pour vos fonctions Lambda qui détectent ces erreurs et avertissent les responsables des opérations et des charges de travail. Ces erreurs sont souvent liées à une erreur de configuration ou d'autorisation et peuvent survenir à la suite d'une modification de votre configuration ou de vos autorisations. Les erreurs d'invocation peuvent déclencher une nouvelle tentative, ce qui entraîne plusieurs invocations de votre fonction.

Une fonction Lambda invoquée avec succès renvoie une réponse HTTP 200 même si une exception est déclenchée par la fonction. Vos fonctions Lambda doivent implémenter le traitement des erreurs et déclencher des exceptions afin que la Errors métrique capture et identifie les échecs d'exécution de votre fonction Lambda. Vous devez renvoyer une réponse formatée à partir de vos appels de fonction Lambda qui inclut des informations permettant de déterminer si l'exécution a échoué complètement, partiellement ou s'est déroulée avec succès.

CloudWatch fournit des informations CloudWatch Lambda que vous pouvez activer pour une fonction Lambda individuelle. Lambda Insights collecte, agrège et résume les métriques au niveau du système (par exemple, le temps processeur, la mémoire, l'utilisation du disque et du réseau). Lambda Insights collecte, agrège et résume également les informations de diagnostic (par exemple, les démarrages à froid et les arrêts des opérateurs Lambda) pour vous aider à isoler et à résoudre rapidement les problèmes.

Lambda Insights utilise le format métrique intégré pour transmettre automatiquement des informations de performance au groupe de /aws/lambda-insights/ journaux avec un préfixe de nom de flux de journal basé sur le nom de votre fonction Lambda. Ces événements du journal des performances créent CloudWatch des métriques qui constituent la base des CloudWatch tableaux de bord automatiques. Nous vous recommandons d'activer Lambda Insights pour les tests de performance et les environnements de production. Parmi les indicateurs supplémentaires créés par Lambda Insights, citons ceux memory_utilization qui permettent de dimensionner correctement les fonctions Lambda afin d'éviter de payer pour une capacité inutile.

Métriques d'application

Vous pouvez également créer et capturer vos propres métriques d'application à CloudWatch l'aide du format de métrique intégré. Vous pouvez tirer parti des bibliothèques AWS fournies pour le format métrique intégré afin de créer et d'émettre des instructions de format métrique intégré CloudWatch. La fonction de CloudWatch journalisation Lambda intégrée est configurée pour traiter et extraire des instructions au format métrique intégré correctement formatées.