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.
Enregistrez et surveillez les fonctions Lambda C#
AWS Lambda surveille automatiquement les fonctions Lambda et envoie des entrées de journal à Amazon. CloudWatch Votre fonction Lambda est fournie avec un groupe de CloudWatch journaux Logs et un flux de journaux pour chaque instance de votre fonction. L’environnement d’exécution Lambda envoie des détails sur chaque invocation et d’autres sorties provenant du code de votre fonction au flux de journaux. Pour plus d'informations sur CloudWatch les journaux, consultezUtilisation de CloudWatch Logs avec Lambda.
Sections
- Création d’une fonction qui renvoie des journaux
- Utilisation des commandes de journalisation avancées de Lambda avec. NET
- Outils de journalisation et bibliothèques supplémentaires
- Utilisation de Powertools pour AWS Lambda (. NET) et AWS SAM pour la journalisation structurée
- Afficher les journaux dans la console Lambda
- Afficher les journaux dans la CloudWatch console
- Afficher les journaux à l'aide de AWS Command Line Interface (AWS CLI)
- Suppression de journaux
Création d’une fonction qui renvoie des journaux
Pour générer des journaux à partir de votre code de fonction, vous pouvez utiliser l'objet ILambdaLoggerstdout
oustderr
.
Le. NETruntime enregistre les REPORT
lignes START
END
, et pour chaque appel. La ligne de rapport fournit les détails suivants.
REPORTchamps de données de ligne
-
RequestId— L'identifiant de demande unique pour l'invocation.
-
Duration – Temps que la méthode de gestion du gestionnaire de votre fonction a consacré au traitement de l’événement.
-
Billed Duration : temps facturé pour l’invocation.
-
Memory Size – Quantité de mémoire allouée à la fonction.
-
Max Memory Used – Quantité de mémoire utilisée par la fonction. Lorsque les invocations partagent un environnement d'exécution, Lambda indique la mémoire maximale utilisée pour toutes les invocations. Ce comportement peut entraîner une valeur signalée plus élevée que prévu.
-
Init Duration : pour la première requête servie, temps qu’il a pris à l’exécution charger la fonction et exécuter le code en dehors de la méthode du gestionnaire.
-
XRAY TraceId— Pour les demandes suivies, l'ID de AWS X-Ray trace.
-
SegmentId— Pour les demandes tracées, l'identifiant du segment X-Ray.
-
Sampled – Pour les demandes suivies, résultat de l’échantillonnage.
Utilisation des commandes de journalisation avancées de Lambda avec. NET
Pour mieux contrôler la manière dont les journaux de vos fonctions sont capturés, traités et consommés, vous pouvez configurer les options de journalisation suivantes pour qu'elles soient prises en charge. NETtemps d'exécution :
-
Format de journal : choisissez entre le format texte brut et le JSON format structuré pour les journaux de votre fonction
-
Niveau de journalisation : pour les journaux au JSON format, choisissez le niveau de détail des journaux auxquels Lambda envoie CloudWatch, par exempleERROR, DEBUG ou INFO
-
Groupe de journaux : choisissez le groupe de CloudWatch journaux auquel votre fonction envoie les journaux
Pour plus d’informations sur ces options de journalisation et pour savoir comment configurer votre fonction pour les utiliser, consultez Configuration de contrôles de journalisation avancés pour les fonctions Lambda.
Pour utiliser le format du journal et les options de niveau de journal avec votre. NET Fonctions Lambda, consultez les instructions dans les sections suivantes.
Utilisation d'un format de JSON journal structuré avec. NET
Si vous sélectionnez le JSON format de journal de votre fonction, Lambda enverra les journaux en utilisant ILambdaLogger
-
"timestamp"
- heure à laquelle le message de journal a été généré -
"level"
- niveau de journalisation attribué au message -
"requestId"
- identifiant unique de la demande pour l’invocation de la fonction -
"traceId"
- la variable d'_X_AMZN_TRACE_ID
environnement -
"message"
- contenu du message de journal
L'ILambdaLogger
instance peut ajouter des paires clé-valeur supplémentaires, par exemple lors de la journalisation des exceptions. Vous pouvez également fournir vos propres paramètres supplémentaires, comme décrit dans la sectionParamètres du journal fournis par le client.
Note
Si votre code utilise déjà une autre bibliothèque de journalisation pour produire des journaux au JSON format, assurez-vous que le format de journal de votre fonction est défini sur du texte brut. Si vous définissez le format du journal sur, vos sorties de journal JSON seront codées deux fois.
L'exemple de commande de journalisation suivant montre comment écrire un message de journal avec le niveauINFO
.
Exemple . NETcode de journalisation
context.Logger.LogInformation("Fetching cart from database");
Vous pouvez également utiliser une méthode de journalisation générique qui prend le niveau de journalisation comme argument, comme indiqué dans l'exemple suivant.
context.Logger.Log(LogLevel.Information, "Fetching cart from database");
La sortie du journal par ces exemples d'extraits de code serait capturée dans CloudWatch Logs comme suit :
Exemple JSONenregistrement du journal
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Information",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "Fetching cart from database"
}
Note
Si vous configurez le format de journal de votre fonction pour qu'il utilise du texte brut plutôt que du texte brutJSON, le niveau de journal capturé dans le message suit la convention de Microsoft qui consiste à utiliser une étiquette à quatre caractères. Par exemple, un niveau de journalisation de Debug
est représenté dans le message sous la formedbug
.
Lorsque vous configurez votre fonction pour utiliser des journaux JSON formatés, le niveau de journal capturé dans le journal utilise l'étiquette complète, comme indiqué dans l'exemple d'enregistrement de JSON journal.
Si vous n'attribuez aucun niveau à la sortie de votre journal, Lambda lui attribuera automatiquement le niveau. INFO
Enregistrement des exceptions dans JSON
Lorsque vous utilisez la JSON journalisation structurée avecILambdaLogger
, vous pouvez enregistrer les exceptions dans votre code, comme indiqué dans l'exemple suivant.
Exemple utilisation de la journalisation des exceptions
try { connection.ExecuteQuery(query); } catch(Exception e) { context.Logger.LogWarning(e, "Error executing query"); }
Le format de journal généré par ce code est illustré dans l'exemple suivantJSON. Notez que la message
propriété dans le JSON est renseignée à l'aide de l'argument message fourni dans l'LogWarning
appel, tandis que la errorMessage
propriété provient de la Message
propriété de l'exception elle-même.
Exemple JSONenregistrement du journal
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Warning",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "Error executing query",
"errorType": "System.Data.SqlClient.SqlException",
"errorMessage": "Connection closed",
"stackTrace": ["<call exception.StackTrace>"]
}
Si le format de journalisation de votre fonction est défini surJSON, Lambda produit également des messages de journal JSON formatés lorsque votre code génère une exception non détectée. L'exemple d'extrait de code et de message de journal suivants montre comment les exceptions non détectées sont enregistrées.
Exemple code d'exception
throw new ApplicationException("Invalid data");
Exemple JSONenregistrement du journal
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Error",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "Invalid data",
"errorType": "System.ApplicationException",
"errorMessage": "Invalid data",
"stackTrace": ["<call exception.StackTrace>"]
}
Paramètres du journal fournis par le client
Avec les messages de journal JSON au format -formaté, vous pouvez fournir des paramètres de journal supplémentaires et les inclure dans le journal. message
L'exemple d'extrait de code suivant montre une commande permettant d'ajouter deux paramètres fournis par l'utilisateur et étiquetés et. retryAttempt
uri
Dans l'exemple, la valeur de ces paramètres provient des uriDestination
arguments retryAttempt
et transmis à la commande de journalisation.
Exemple JSONcommande de journalisation avec paramètres supplémentaires
context.Logger.LogInformation("Starting retry {retryAttempt} to make GET request to {uri}", retryAttempt, uriDestination);
Le message de journal généré par cette commande est illustré dans l'exemple suivantJSON.
Exemple JSONenregistrement du journal
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Information",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "Starting retry 1 to make GET request to http://example.com/",
"retryAttempt": 1,
"uri": "http://example.com/"
}
Astuce
Vous pouvez également utiliser des propriétés positionnelles plutôt que des noms lorsque vous spécifiez des paramètres supplémentaires. Par exemple, la commande de journalisation de l'exemple précédent peut également être écrite comme suit :
context.Logger.LogInformation("Starting retry {0} to make GET request to {1}", retryAttempt, uriDestination);
Notez que lorsque vous fournissez des paramètres de journalisation supplémentaires, Lambda les capture en tant que propriétés de premier niveau dans l'enregistrement du JSON journal. Cette approche diffère de certaines approches populaires. NETdes bibliothèques de journalisation telles que Serilog
celles qui capturent des paramètres supplémentaires dans un objet enfant distinct.
Si l'argument que vous fournissez pour un paramètre supplémentaire est un objet complexe, Lambda utilise par défaut la ToString()
méthode pour fournir la valeur. Pour indiquer qu'un argument doit être JSON sérialisé, utilisez le @
préfixe comme indiqué dans l'extrait de code suivant. Dans cet exemple, User
il s'agit d'un objet doté de LastName
propriétés FirstName
et.
Exemple JSONcommande de journalisation avec JSON objet sérialisé
context.Logger.LogInformation("User {@user} logged in", User);
Le message de journal généré par cette commande est illustré dans l'exemple suivantJSON.
Exemple JSONenregistrement du journal
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Information",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "User {@user} logged in",
"user":
{
"FirstName": "John",
"LastName": "Doe"
}
}
Si l'argument d'un paramètre supplémentaire est un tableau ou implémente IList
ouIDictionary
, alors Lambda ajoute l'argument au message de JSON journal sous forme de tableau, comme indiqué dans l'exemple d'enregistrement de JSON journal suivant. Dans cet exemple, {users}
prend un IList
argument contenant des instances de la User
propriété au même format que dans l'exemple précédent. Lambda le IList
convertit en tableau, chaque valeur étant créée à l'aide de la ToString
méthode.
Exemple JSONenregistrement de journal avec un IList
argument
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Information",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "{users} have joined the group",
"users":
[
"Rosalez, Alejandro",
"Stiles, John"
]
}
Vous pouvez également JSON sérialiser la liste en utilisant le @
préfixe dans votre commande de journalisation. Dans l'exemple d'enregistrement de JSON journal suivant, la users
propriété est JSON sérialisée.
Exemple JSONenregistrement de journal avec un argument JSON sérialisé IList
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Information",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "{@users} have joined the group",
"users":
[
{
"FirstName": "Alejandro",
"LastName": "Rosalez"
},
{
"FirstName": "John",
"LastName": "Stiles"
}
]
}
Utilisation du filtrage au niveau du journal avec. NET
En configurant le filtrage au niveau des journaux, vous pouvez choisir de n'envoyer que les journaux d'un certain niveau de détail ou inférieur à CloudWatch Logs. Pour savoir comment configurer le filtrage de niveau journal de votre fonction, consultez Filtrage au niveau du journal.
AWS Lambda Pour filtrer vos messages de journal par niveau de journal, vous pouvez utiliser des journaux JSON formatés ou utiliser le. NETConsole
méthodes pour générer des messages de journal. Pour créer des journaux JSON formatés, configurez le type de journal de votre fonction en fonction de l'ILambdaLogger
instance JSON et utilisez-la.
Avec les journaux JSON au format -formaté, Lambda filtre les sorties de vos journaux en utilisant la paire clé-valeur « niveau » contenue dans l'JSONobjet décrit dans. Utilisation d'un format de JSON journal structuré avec. NET
Si vous utilisez le. NETConsole
méthodes pour écrire des messages dans CloudWatch Logs, Lambda applique les niveaux de journalisation à vos messages comme suit :
-
Console. WriteLine méthode - Lambda applique un niveau de journalisation de
INFO
-
Méthode Console.Error - Lambda applique un niveau de journalisation de
ERROR
Lorsque vous configurez votre fonction pour utiliser le filtrage au niveau des journaux, vous devez sélectionner parmi les options suivantes le niveau de journaux que Lambda doit envoyer à Logs. CloudWatch Notez le mappage des niveaux de journalisation utilisés par Lambda avec les niveaux Microsoft standard utilisés par le. NETILambdaLogger
.
Niveau de log Lambda | Niveau Microsoft équivalent | Utilisation standard |
---|---|---|
TRACE(le plus détaillé) | Tracer | Les informations les plus précises utilisées pour tracer le chemin d’exécution de votre code |
DEBUG | Débogage | Informations détaillées pour le débogage du système |
INFO | Informations | Messages qui enregistrent le fonctionnement normal de votre fonction |
WARN | Avertissement | Messages relatifs à des erreurs potentielles susceptibles d’entraîner un comportement inattendu si elles ne sont pas traitées |
ERROR | Erreur | Messages concernant les problèmes qui empêchent le code de fonctionner comme prévu |
FATAL(moindre détail) | Critique | Messages relatifs à des erreurs graves entraînant l’arrêt du fonctionnement de l’application |
Lambda envoie des journaux correspondant au niveau de détail sélectionné et inférieur à. CloudWatch Par exemple, si vous configurez un niveau de journalisation deWARN, Lambda enverra des journaux correspondant aux niveaux WARNERROR, etFATAL.
Outils de journalisation et bibliothèques supplémentaires
Outils électriques pour AWS Lambda (. NET
Capturez les champs clés du contexte Lambda, du démarrage à froid et des structures enregistrant la sortie sous JSON
Journaliser les événements d’invocation Lambda lorsque cela est demandé (désactivé par défaut)
Imprimer tous les journaux uniquement pour un pourcentage d’invocations via l’échantillonnage des journaux (désactivé par défaut)
Ajouter des clés supplémentaires au journal structuré à tout moment
Utilisez un formateur de journal personnalisé (Bring Your Own Formatter) pour générer les journaux dans une structure compatible avec la journalisation de votre organisation RFC
Utilisation de Powertools pour AWS Lambda (. NET) et AWS SAM pour la journalisation structurée
Suivez les étapes ci-dessous pour télécharger, créer et déployer un exemple d'application Hello World C# avec Powertools intégrés pour AWS Lambda (. NEThello world
.
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
. NET8
-
AWS SAM CLIversion 1.75 ou ultérieure. Si vous possédez une ancienne version du AWS SAM CLI, consultez la section Mise à niveau du AWS SAM CLI.
Déployer un exemple d' AWS SAM application
-
Initialisez l'application à l'aide du TypeScript modèle Hello World.
sam init --app-template hello-world-powertools-dotnet --name sam-app --package-type Zip --runtime dotnet6 --no-tracing
-
Créez l’application.
cd sam-app && sam build
-
Déployez l’application.
sam deploy --guided
-
Suivez les invites à l’écran. Appuyez sur
Enter
pour accepter les options par défaut fournies dans l’expérience interactive.Note
Car l'autorisation n'a HelloWorldFunction peut-être pas été définie, est-ce que ça va ? , assurez-vous de participer
y
. -
Obtenez le code URL de l'application déployée :
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Appelez le API point de terminaison :
curl -X GET
<URL_FROM_PREVIOUS_STEP>
En cas de succès, vous obtiendrez cette réponse :
{"message":"hello world"}
-
Pour obtenir les journaux de la fonction, exécutez sam logs. Pour en savoir plus, consultez Utilisation des journaux dans le Guide du développeur AWS Serverless Application Model .
sam logs --stack-name sam-app
La sortie du journal se présente comme suit :
2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:27.988000 INIT_START Runtime Version: dotnet:6.v13 Runtime Version ARN: arn:aws:lambda:ap-southeast-2::runtime:699f346a05dae24c58c45790bc4089f252bf17dae3997e79b17d939a288aa1ec 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:28.229000 START RequestId: bed25b38-d012-42e7-ba28-f272535fb80e Version: $LATEST 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:29.259000 2023-02-20T14:15:29.201Z bed25b38-d012-42e7-ba28-f272535fb80e info {"_aws":{"Timestamp":1676902528962,"CloudWatchMetrics":[{"Namespace":"sam-app-logging","Metrics":[{"Name":"ColdStart","Unit":"Count"}],"Dimensions":[["FunctionName"],["Service"]]}]},"FunctionName":"sam-app-HelloWorldFunction-haKIoVeose2p","Service":"PowertoolsHelloWorld","ColdStart":1} 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.479000 2023-02-20T14:15:30.479Z bed25b38-d012-42e7-ba28-f272535fb80e info {"ColdStart":true,"XrayTraceId":"1-63f3807f-5dbcb9910c96f50742707542","CorrelationId":"d3d4de7f-4ccc-411a-a549-4d67b2fdc015","FunctionName":"sam-app-HelloWorldFunction-haKIoVeose2p","FunctionVersion":"$LATEST","FunctionMemorySize":256,"FunctionArn":"arn:aws:lambda:ap-southeast-2:123456789012:function:sam-app-HelloWorldFunction-haKIoVeose2p","FunctionRequestId":"bed25b38-d012-42e7-ba28-f272535fb80e","Timestamp":"2023-02-20T14:15:30.4602970Z","Level":"Information","Service":"PowertoolsHelloWorld","Name":"AWS.Lambda.Powertools.Logging.Logger","Message":"Hello world API - HTTP 200"} 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.599000 2023-02-20T14:15:30.599Z bed25b38-d012-42e7-ba28-f272535fb80e info {"_aws":{"Timestamp":1676902528922,"CloudWatchMetrics":[{"Namespace":"sam-app-logging","Metrics":[{"Name":"ApiRequestCount","Unit":"Count"}],"Dimensions":[["Service"]]}]},"Service":"PowertoolsHelloWorld","ApiRequestCount":1} 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.680000 END RequestId: bed25b38-d012-42e7-ba28-f272535fb80e 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.680000 REPORT RequestId: bed25b38-d012-42e7-ba28-f272535fb80e Duration: 2450.99 ms Billed Duration: 2451 ms Memory Size: 256 MB Max Memory Used: 74 MB Init Duration: 240.05 ms XRAY TraceId: 1-63f3807f-5dbcb9910c96f50742707542 SegmentId: 16b362cd5f52cba0
-
Il s'agit d'un API point de terminaison public accessible via Internet. Nous vous recommandons de supprimer le point de terminaison après un test.
sam delete
Gestion de la conservation des journaux
Les groupes de journaux ne sont pas supprimés automatiquement quand vous supprimez une fonction. Pour éviter de stocker les journaux indéfiniment, supprimez le groupe de journaux ou configurez une période de conservation après laquelle les journaux CloudWatch sont automatiquement supprimés. Pour configurer la conservation des journaux, ajoutez ce qui suit à votre AWS SAM modèle :
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7
Afficher les journaux dans la console Lambda
Vous pouvez utiliser la console Lambda pour afficher la sortie du journal après avoir invoqué une fonction Lambda.
Si votre code peut être testé à partir de l’éditeur Code intégré, vous trouverez les journaux dans les résultats d’exécution. Lorsque vous utilisez la fonctionnalité de test de console pour invoquer une fonction, vous trouverez Sortie du journal dans la section Détails.
Afficher les journaux dans la CloudWatch console
Vous pouvez utiliser la CloudWatch console Amazon pour consulter les journaux de toutes les invocations de fonctions Lambda.
Pour afficher les journaux sur la CloudWatch console
-
Ouvrez la page Groupes de journaux
sur la CloudWatch console. -
Choisissez le groupe de journaux pour votre fonction (
your-function-name
/aws/lambda/). -
Choisissez un flux de journaux.
Chaque flux de journal correspond à une instance de votre fonction. Un flux de journaux apparaît lorsque vous mettez à jour votre fonction Lambda et lorsque des instances supplémentaires sont créées pour traiter plusieurs invocations simultanées. Pour trouver les journaux d'un appel spécifique, nous vous recommandons d'instrumenter votre fonction avec. AWS X-Ray X-Ray enregistre des détails sur la demande et le flux de journaux dans le suivi.
Afficher les journaux à l'aide de AWS Command Line Interface (AWS CLI)
AWS CLI Il s'agit d'un outil open source qui vous permet d'interagir avec les AWS services à l'aide de commandes dans votre interface de ligne de commande. Pour effectuer les étapes décrites dans cette section, vous devez disposer de la AWS CLI version 2.
Vous pouvez utiliser AWS CLI pour récupérer les journaux d’une invocation à l’aide de l’option de commande --log-type
. La réponse inclut un champ LogResult
qui contient jusqu’à 4 Ko de journaux codés en base64 provenant de l’invocation.
Exemple récupérer un ID de journal
L’exemple suivant montre comment récupérer un ID de journal à partir du champ LogResult
d’une fonction nommée my-function
.
aws lambda invoke --function-name my-function out --log-type Tail
Vous devriez voir la sortie suivante:
{
"StatusCode": 200,
"LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
"ExecutedVersion": "$LATEST"
}
Exemple décoder les journaux
Dans la même invite de commandes, utilisez l’utilitaire base64
pour décoder les journaux. L’exemple suivant montre comment récupérer les journaux encodés en base64 pour my-function
.
aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
L'cli-binary-formatoption est obligatoire si vous utilisez AWS CLI la version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez aws configure set cli-binary-format raw-in-base64-out
. Pour plus d’informations, consultez les options de ligne de commande globales AWS CLI prises en charge dans le Guide de l’utilisateur AWS Command Line Interface version 2.
Vous devriez voir la sortie suivante :
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB
L’utilitaire base64
est disponible sous Linux, macOS et Ubuntu sous Windowsbase64 -D
.
Exemple Script get-logs.sh
Dans la même invite de commandes, utilisez le script suivant pour télécharger les cinq derniers événements de journalisation. Le script utilise sed
pour supprimer les guillemets du fichier de sortie et attend 15 secondes pour permettre la mise à disposition des journaux. La sortie comprend la réponse de Lambda, ainsi que la sortie de la commande get-log-events
.
Copiez le contenu de l’exemple de code suivant et enregistrez-le dans votre répertoire de projet Lambda sous get-logs.sh
.
L'cli-binary-formatoption est obligatoire si vous utilisez AWS CLI la version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez aws configure set cli-binary-format raw-in-base64-out
. Pour plus d’informations, consultez les options de ligne de commande globales AWS CLI prises en charge dans le Guide de l’utilisateur AWS Command Line Interface version 2.
#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/
my-function
--log-stream-namestream1
--limit 5
Exemple macOS et Linux (uniquement)
Dans la même invite de commandes, les utilisateurs macOS et Linux peuvent avoir besoin d’exécuter la commande suivante pour s’assurer que le script est exécutable.
chmod -R 755 get-logs.sh
Exemple récupérer les cinq derniers événements de journal
Dans la même invite de commande, exécutez le script suivant pour obtenir les cinq derniers événements de journalisation.
./get-logs.sh
Vous devriez voir la sortie suivante:
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
{
"events": [
{
"timestamp": 1559763003171,
"message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n",
"ingestionTime": 1559763003309
},
{
"timestamp": 1559763003173,
"message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...",
"ingestionTime": 1559763018353
},
{
"timestamp": 1559763003173,
"message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n",
"ingestionTime": 1559763018353
},
{
"timestamp": 1559763003218,
"message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n",
"ingestionTime": 1559763018353
},
{
"timestamp": 1559763003218,
"message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n",
"ingestionTime": 1559763018353
}
],
"nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795",
"nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080"
}
Suppression de journaux
Les groupes de journaux ne sont pas supprimés automatiquement quand vous supprimez une fonction. Pour éviter de stocker des journaux indéfiniment, supprimez le groupe de journaux ou configurez une période de conservation à l’issue de laquelle les journaux sont supprimés automatiquement.