Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
C#-Lambda-Funktionen protokollieren und überwachen
AWS Lambda überwacht automatisch Lambda-Funktionen und sendet Protokolleinträge an Amazon CloudWatch. Ihre Lambda-Funktion enthält eine CloudWatch Logs-Log-Gruppe und einen Log-Stream für jede Instanz Ihrer Funktion. Die Lambda-Laufzeitumgebung sendet Details zu den einzelnen Aufrufen an den Protokollstream und leitet Protokolle und andere Ausgaben aus dem Code Ihrer Funktion weiter. Weitere Informationen zu CloudWatch Logs finden Sie unterVerwendung von CloudWatch-Protokollen mit Lambda.
Sections
- Erstellen einer Funktion, die Protokolle zurückgibt
- Verwenden von erweiterten Lambda-Protokollierungssteuerelementen mit. NET
- Zusätzliche Protokollierungswerkzeuge und Bibliotheken
- Verwenden von Powertools für (. AWS Lambda NET) und AWS SAM für strukturiertes Logging
- Anzeigen von Protokollen in der Lambda-Konsole
- Protokolle in der CloudWatch Konsole anzeigen
- Logs mit dem Befehl () anzeigen AWS Command Line InterfaceAWS CLI
- Löschen von Protokollen
Erstellen einer Funktion, die Protokolle zurückgibt
Um Logs aus Ihrem Funktionscode auszugeben, können Sie das ILambdaLoggerstdout
oder schreibtstderr
.
Das. NETRuntime protokolliert die REPORT
Zeilen START
END
, und für jeden Aufruf. Die Berichtszeile enthält die folgenden Details.
REPORTZeilen-Datenfelder
-
RequestId— Die eindeutige Anforderungs-ID für den Aufruf.
-
Dauer – Die Zeit, die die Handler-Methode Ihrer Funktion mit der Verarbeitung des Ereignisses verbracht hat.
-
Fakturierte Dauer – Die für den Aufruf fakturierte Zeit.
-
Speichergröße – Die der Funktion zugewiesene Speichermenge.
-
Max. verwendeter Speicher – Die Speichermenge, die von der Funktion verwendet wird. Wenn Aufrufe eine Ausführungsumgebung gemeinsam nutzen, meldet Lambda den maximalen Speicherverbrauch für alle Aufrufe. Dieses Verhalten kann zu einem höheren als erwarteten gemeldeten Wert führen.
-
Initialisierungsdauer – Für die erste Anfrage die Zeit, die zur Laufzeit zum Laden der Funktion und Ausführen von Code außerhalb der Handler-Methode benötigt wurde.
-
XRAY TraceId— Bei verfolgten Anfragen die AWS X-Ray Trace-ID.
-
SegmentId— Für verfolgte Anfragen die X-Ray-Segment-ID.
-
Stichprobe – Bei verfolgten Anforderungen das Stichprobenergebnis.
Verwenden von erweiterten Lambda-Protokollierungssteuerelementen mit. NET
Um Ihnen mehr Kontrolle darüber zu geben, wie die Protokolle Ihrer Funktionen erfasst, verarbeitet und verwendet werden, können Sie die folgenden Protokollierungsoptionen für unterstützt konfigurieren. NETLaufzeiten:
-
Protokollformat — wählen Sie zwischen Klartext und strukturiertem JSON Format für die Logs Ihrer Funktion
-
Protokollebene — für Logs im JSON Format wählen Sie die Detailebene der Logs, an die Lambda sendet CloudWatch, wieERROR,DEBUG, oder INFO
-
Protokollgruppe — wählen Sie die CloudWatch Protokollgruppe aus, an die Ihre Funktion Logs sendet
Weitere Informationen zu diesen Protokollierungsoptionen und Anweisungen zur Konfiguration Ihrer Funktion für deren Verwendung finden Sie unter Konfigurieren erweiterter Protokollierungsoptionen für Lambda-Funktionen.
Um die Optionen für das Protokollformat und die Protokollebene mit Ihrem zu verwenden. NET Lambda-Funktionen finden Sie in den Anleitungen in den folgenden Abschnitten.
Verwenden des strukturierten JSON Protokollformats mit. NET
Wenn Sie das Protokollformat Ihrer Funktion auswählenJSON, sendet Lambda die Protokollausgabe ILambdaLogger
-
"timestamp"
– die Uhrzeit, zu der die Protokollmeldung generiert wurde -
"level"
– die der Meldung zugewiesene Protokollebene -
"requestId"
– die eindeutige Anforderungs-ID für den Funktionsaufruf -
"traceId"
– Die Umgebungsvariable_X_AMZN_TRACE_ID
-
"message"
– der Inhalt der Protokollmeldung
Die ILambdaLogger
-Instanz kann zusätzliche Schlüssel-Wert-Paare hinzufügen, beispielsweise beim Protokollieren von Ausnahmen. Sie können auch Ihre eigenen zusätzlichen Parameter angeben, wie im Abschnitt Vom Kunden bereitgestellte Protokollparameter beschrieben.
Anmerkung
Wenn Ihr Code bereits eine andere Logging-Bibliothek verwendet, um Logs im JSON -Format zu erzeugen, stellen Sie sicher, dass das Logformat Ihrer Funktion auf Klartext gesetzt ist. Wenn Sie das Protokollformat auf setzen, JSON werden Ihre Protokollausgaben doppelt codiert.
Der folgende Beispiel-Logging-Befehl zeigt, wie Sie eine Protokollnachricht mit dem Level INFO
schreiben.
Beispiel . NETLogging-Code
context.Logger.LogInformation("Fetching cart from database");
Sie können auch eine generische Protokollebene verwenden, die die Protokollebene als Argument verwendet, wie im folgenden Beispiel gezeigt.
context.Logger.Log(LogLevel.Information, "Fetching cart from database");
Die Protokollausgabe dieser Beispielcodefragmente würde wie folgt in CloudWatch Logs erfasst:
Beispiel JSONProtokolldatensatz
{
"timestamp": "2023-09-07T01:30:06.977Z",
"level": "Information",
"requestId": "8f711428-7e55-46f9-ae88-2a65d4f85fc5",
"traceId": "1-6408af34-50f56f5b5677a7d763973804",
"message": "Fetching cart from database"
}
Anmerkung
Wenn Sie das Protokollformat Ihrer Funktion so konfigurieren, dass statt Klartext verwendet wirdJSON, folgt die in der Nachricht erfasste Protokollebene der Microsoft-Konvention, eine vierstellige Bezeichnung zu verwenden. Die Protokollebene von Debug
wird in der Nachricht beispielsweise als dbug
dargestellt.
Wenn Sie Ihre Funktion für die Verwendung JSON formatierter Protokolle konfigurieren, verwendet die im Protokoll erfasste Protokollebene die vollständige Bezeichnung, wie im JSON Beispielprotokolldatensatz gezeigt.
Wenn Sie Ihrer Protokollausgabe keine Ebene zuweisen, weist Lambda ihr automatisch die Ebene INFO zu.
Ausnahmen protokollieren in JSON
Wenn Sie die strukturierte JSON Protokollierung mit verwendenILambdaLogger
, können Sie Ausnahmen in Ihrem Code protokollieren, wie im folgenden Beispiel gezeigt.
Beispiel Verwendung der Ausnahmeprotokollierung
try { connection.ExecuteQuery(query); } catch(Exception e) { context.Logger.LogWarning(e, "Error executing query"); }
Das von diesem Code ausgegebene Protokollformat wird im folgenden Beispiel gezeigtJSON. Beachten Sie, dass die message
Eigenschaft in der mithilfe des im LogWarning
Aufruf angegebenen Nachrichtenarguments aufgefüllt JSON wird, während die errorMessage
Eigenschaft aus der Message
Eigenschaft der Ausnahme selbst stammt.
Beispiel JSONProtokolldatensatz
{
"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>"]
}
Wenn das Protokollierungsformat Ihrer Funktion auf gesetzt istJSON, gibt Lambda auch Protokollnachrichten im JSON -Format aus, wenn Ihr Code eine nicht abgefangene Ausnahme auslöst. Der folgende Beispielcodeausschnitt und die Protokollnachricht zeigen, wie nicht abgefangene Ausnahmen protokolliert werden.
Beispiel Ausnahmecode
throw new ApplicationException("Invalid data");
Beispiel JSONProtokolldatensatz
{
"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>"]
}
Vom Kunden bereitgestellte Protokollparameter
Mit JSON -formatierten Protokollnachrichten können Sie zusätzliche Protokollparameter angeben und diese in das Protokoll aufnehmen. message
Der folgende Codeausschnitt zeigt einen Befehl zum Hinzufügen von zwei vom Benutzer angegebenen Parametern mit der Bezeichnung retryAttempt
und uri
. Im Beispiel stammt der Wert dieser Parameter aus den Argumenten retryAttempt
und uriDestination
, die an den Protokollierungsbefehl übergeben wurden.
Beispiel JSONLogging-Befehl mit zusätzlichen Parametern
context.Logger.LogInformation("Starting retry {retryAttempt} to make GET request to {uri}", retryAttempt, uriDestination);
Die von diesem Befehl ausgegebene Protokollnachricht wird im folgenden Beispiel gezeigtJSON.
Beispiel JSONProtokolldatensatz
{
"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/"
}
Tipp
Sie können bei der Angabe zusätzlicher Parameter auch Positionseigenschaften anstelle von Namen verwenden. Beispielsweise könnte der Protokollierungsbefehl im vorherigen Beispiel auch wie folgt geschrieben werden:
context.Logger.LogInformation("Starting retry {0} to make GET request to {1}", retryAttempt, uriDestination);
Beachten Sie, dass Lambda, wenn Sie zusätzliche Protokollierungsparameter angeben, diese als Eigenschaften der obersten Ebene im JSON Protokolldatensatz erfasst. Dieser Ansatz unterscheidet sich von einigen gängigen. NETLogging-Bibliotheken wieSerilog
, die zusätzliche Parameter in einem separaten untergeordneten Objekt erfassen.
Wenn das Argument, das Sie für einen zusätzlichen Parameter angeben, ein komplexes Objekt ist, verwendet Lambda standardmäßig die ToString()
-Methode, um den Wert bereitzustellen. Um anzugeben, dass ein Argument JSON serialisiert werden soll, verwenden Sie das @
Präfix, wie im folgenden Codeausschnitt gezeigt. In diesem Beispiel ist User
ein Objekt mit den Eigenschaften FirstName
und LastName
.
Beispiel JSONLogging-Befehl mit serialisiertem Objekt JSON
context.Logger.LogInformation("User {@user} logged in", User);
Die von diesem Befehl ausgegebene Protokollnachricht wird im folgenden Beispiel JSON gezeigt.
Beispiel JSONProtokolldatensatz
{
"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"
}
}
Wenn das Argument für einen zusätzlichen Parameter ein Array ist IList
oder implementiertIDictionary
, fügt Lambda das Argument der JSON Protokollnachricht als Array hinzu, wie im folgenden JSON Beispielprotokolldatensatz gezeigt. In diesem Beispiel nimmt {users}
ein IList
-Argument entgegen, das Instanzen der User
-Eigenschaft mit demselben Format wie im vorherigen Beispiel enthält. Lambda wandelt dieses IList
in ein Array um, wobei jeder Wert mit der ToString
-Methode erstellt wird.
Beispiel JSONProtokolldatensatz mit einem Argument 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":
[
"Rosalez, Alejandro",
"Stiles, John"
]
}
Sie können die Liste auch JSON serialisieren, indem Sie das @
Präfix in Ihrem Logging-Befehl verwenden. Im folgenden JSON Beispielprotokolldatensatz ist die users
Eigenschaft JSON serialisiert.
Beispiel JSONProtokolldatensatz mit einem JSON serialisierten Argument 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"
}
]
}
Filterung auf Protokollebene mit verwenden. NET
Durch die Konfiguration der Filterung auf Protokollebene können Sie festlegen, dass nur Protokolle mit einer bestimmten Detailebene oder niedriger an CloudWatch Logs gesendet werden. Informationen zur Konfiguration der Filterung auf Protokollebene für Ihre Funktion finden Sie unter Filterung auf Protokollebene.
AWS Lambda Um Ihre Protokollnachrichten nach Protokollebene zu filtern, können Sie entweder JSON formatierte Protokolle verwenden oder die. NETConsole
Methoden zur Ausgabe von Protokollnachrichten. Um JSON formatierte Protokolle zu erstellen, konfigurieren Sie den Protokolltyp Ihrer Funktion auf JSON und verwenden Sie die ILambdaLogger
Instanz.
Bei Protokollen JSON im -Format filtert Lambda Ihre Protokollausgaben anhand des Schlüsselwertpaars „level“ in dem unter beschriebenen JSON Objekt. Verwenden des strukturierten JSON Protokollformats mit. NET
Wenn Sie das verwenden. NETConsole
Methoden zum Schreiben von Nachrichten in CloudWatch Logs, Lambda wendet Log-Levels wie folgt auf Ihre Nachrichten an:
-
Konsole. WriteLine method - Lambda wendet ein Log-Level von
INFO
-
Console.Error-Methode – Lambda wendet eine Protokollebene von
ERROR
an
Wenn Sie Ihre Funktion so konfigurieren, dass sie Filterung auf Protokollebene verwendet, müssen Sie aus den folgenden Optionen für die Protokollebene auswählen, die Lambda an Logs senden soll. CloudWatch Beachten Sie die Zuordnung der von Lambda verwendeten Protokollebenen zu den von Lambda verwendeten Microsoft-Standardstufen. NETILambdaLogger
.
Lambda-Protokollebene | Äquivalente Microsoft-Ebene | Standardnutzung |
---|---|---|
TRACE(am detailliertesten) | Trace | Die detailliertesten Informationen, die verwendet werden, um den Ausführungspfad Ihres Codes nachzuverfolgen |
DEBUG | Debuggen | Detaillierte Informationen für das System-Debugging |
INFO | Informationen | Meldungen, die den normalen Betrieb Ihrer Funktion erfassen |
WARN | Warnung | Meldungen über mögliche Fehler, die zu unerwartetem Verhalten führen können, wenn sie nicht behoben werden |
ERROR | Fehler | Meldungen über Probleme, die verhindern, dass der Code wie erwartet funktioniert |
FATAL(am wenigsten detailliert) | Kritisch | Meldungen über schwerwiegende Fehler, die dazu führen, dass die Anwendung nicht mehr funktioniert |
Lambda sendet Protokolle mit der ausgewählten Detailebene und niedriger bis CloudWatch. Wenn Sie beispielsweise eine Protokollebene von konfigurierenWARN, sendet Lambda ProtokolleWARN, die den FATAL StufenERROR, und entsprechen.
Zusätzliche Protokollierungswerkzeuge und Bibliotheken
Elektrowerkzeuge für AWS Lambda (. NET
Erfassen Sie wichtige Felder aus dem Lambda-Kontext, Kaltstart und strukturieren Sie die Logging-Ausgabe als JSON
Protokollieren Sie Ereignisse von Lambda-Aufrufen, wenn Sie dazu aufgefordert werden (standardmäßig deaktiviert)
Alle Protokolle nur für einen bestimmten Prozentsatz der Aufrufe über Protokollstichproben drucken (standardmäßig deaktiviert)
Fügen Sie dem strukturierten Protokoll zu einem beliebigen Zeitpunkt zusätzliche Schlüssel hinzu
Verwenden Sie einen benutzerdefinierten Protokollformatierer (Bring Your Own Formatter), um Protokolle in einer Struktur auszugeben, die mit der Protokollierung Ihrer Organisation kompatibel ist RFC
Verwenden von Powertools für (. AWS Lambda NET) und AWS SAM für strukturiertes Logging
Gehen Sie wie folgt vor, um eine Hello World C#-Beispielanwendung mit integrierten Powertools für AWS Lambda (herunterzuladen, zu erstellen und bereitzustellen. NEThello world
-Nachricht zurück.
Voraussetzungen
Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
-
. NET8
-
AWS SAM CLIVersion 1.75 oder höher. Wenn Sie eine ältere Version von haben AWS SAM CLI, finden Sie weitere Informationen unter Aktualisieren von. AWS SAM CLI
Stellen Sie eine AWS SAM Beispielanwendung bereit
-
Initialisieren Sie die Anwendung mithilfe der Hello TypeScript World-Vorlage.
sam init --app-template hello-world-powertools-dotnet --name sam-app --package-type Zip --runtime dotnet6 --no-tracing
-
Entwickeln Sie die App.
cd sam-app && sam build
-
Stellen Sie die Anwendung bereit.
sam deploy --guided
-
Folgen Sie den Anweisungen auf dem Bildschirm. Um die im interaktiven Erlebnis bereitgestellten Standardoptionen zu akzeptieren, drücken Sie
Enter
.Anmerkung
Für ist HelloWorldFunction möglicherweise keine Autorisierung definiert. Ist das in Ordnung? , stellen Sie sicher, dass Sie eintreten
y
. -
Rufen Sie URL die bereitgestellte Anwendung ab:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Rufen Sie den API Endpunkt auf:
curl -X GET
<URL_FROM_PREVIOUS_STEP>
Wenn der Link erfolgreich ausgeführt wurde, sehen Sie die folgende Antwort:
{"message":"hello world"}
-
Führen Sie sam logs aus, um die Protokolle für die Funktion abzurufen. Weitere Informationen finden Sie unter Arbeiten mit Protokollen im AWS Serverless Application Model -Entwicklerhandbuch.
sam logs --stack-name sam-app
Das Ergebnis sieht folgendermaßen aus:
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
-
Dies ist ein öffentlicher API Endpunkt, auf den über das Internet zugegriffen werden kann. Es wird empfohlen, dass Sie den Endpunkt nach dem Testen löschen.
sam delete
Verwalten der Protokollaufbewahrung
Wenn Sie eine Funktion löschen, werden Protokollgruppen nicht automatisch gelöscht. Um zu vermeiden, dass Protokolle auf unbestimmte Zeit gespeichert werden, löschen Sie die Protokollgruppe oder konfigurieren Sie eine Aufbewahrungsfrist, nach deren Ablauf die Protokolle CloudWatch automatisch gelöscht werden. Um die Aufbewahrung von Protokollen einzurichten, fügen Sie Ihrer AWS SAM Vorlage Folgendes hinzu:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7
Anzeigen von Protokollen in der Lambda-Konsole
Sie können die Lambda-Konsole verwenden, um die Protokollausgabe nach dem Aufrufen einer Lambda-Funktion anzuzeigen.
Wenn Ihr Code über den eingebetteten Code-Editor getestet werden kann, finden Sie Protokolle in den Ausführungsergebnissen. Wenn Sie das Feature Konsolentest verwenden, um eine Funktion aufzurufen, finden Sie die Protokollausgabe im Abschnitt Details.
Protokolle in der CloudWatch Konsole anzeigen
Sie können die CloudWatch Amazon-Konsole verwenden, um Protokolle für alle Lambda-Funktionsaufrufe anzuzeigen.
Um Protokolle auf der Konsole anzuzeigen CloudWatch
-
Öffnen Sie die Seite Protokollgruppen
auf der CloudWatch Konsole. -
Wählen Sie die Protokollgruppe für Ihre Funktion (
your-function-name
/aws/lambda/). -
Wählen Sie eine Protokollstream aus.
Jeder Protokoll-Stream entspricht einer Instance Ihrer Funktion. Ein Protokollstream wird angezeigt, wenn Sie Ihre Lambda-Funktion aktualisieren, und wenn zusätzliche Instances zum Umgang mit mehreren gleichzeitigen Aufrufen erstellt werden. Um Logs für einen bestimmten Aufruf zu finden, empfehlen wir, Ihre Funktion mit zu instrumentieren. AWS X-Ray X-Ray erfasst Details zu der Anforderung und dem Protokollstream in der Trace.
Logs mit dem Befehl () anzeigen AWS Command Line InterfaceAWS CLI
Das AWS CLI ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können. Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie AWS CLI Version 2.
Sie können die AWS CLI verwenden, um Protokolle für einen Aufruf mit der --log-type
-Befehlsoption abzurufen. Die Antwort enthält das Feld LogResult
, das bis zu 4 KB base64-verschlüsselte Protokolle aus dem Aufruf enthält.
Beispiel eine Log-ID abrufen
Das folgende Beispiel zeigt, wie eine Protokoll-ID aus dem LogResult
-Feld für eine Funktion namens my-function
abgerufen wird.
aws lambda invoke --function-name my-function out --log-type Tail
Die Ausgabe sollte folgendermaßen aussehen:
{
"StatusCode": 200,
"LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
"ExecutedVersion": "$LATEST"
}
Beispiel entschlüsseln der Protokolle
Verwenden Sie in derselben Eingabeaufforderung das base64
-Dienstprogramm, um die Protokolle zu entschlüsseln. Das folgende Beispiel zeigt, wie Base64-codierte Logs für abgerufen werde 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
Die cli-binary-format Option ist erforderlich, wenn Sie AWS CLI Version 2 verwenden. Um dies zur Standardeinstellung zu machen, führen Sie aws configure set cli-binary-format raw-in-base64-out
aus. Weitere Informationen finden Sie unter Von AWS CLI unterstützte globale Befehlszeilenoptionen im AWS Command Line Interface -Benutzerhandbuch für Version 2.
Die Ausgabe sollte folgendermaßen aussehen:
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
Das base64
-Dienstprogramm ist unter Linux, macOS und Ubuntu auf Windowsbase64 -D
verwenden.
Beispiel get-logs.sh-Skript
Verwenden Sie in derselben Eingabeaufforderung das folgende Skript, um die letzten fünf Protokollereignisse herunterzuladen. Das Skript verwendet sed
zum Entfernen von Anführungszeichen aus der Ausgabedatei und wechselt 15 Sekunden lang in den Ruhezustand, um Zeit einzuräumen, damit Protokolle verfügbar werden können. Die Ausgabe enthält die Antwort von Lambda und die get-log-events
Ausgabe des Befehls.
Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie es in Ihrem Lambda-Projektverzeichnis unter get-logs.sh
.
Die cli-binary-format Option ist erforderlich, wenn Sie AWS CLI Version 2 verwenden. Um dies zur Standardeinstellung zu machen, führen Sie aws configure set cli-binary-format raw-in-base64-out
aus. Weitere Informationen finden Sie unter Von AWS CLI unterstützte globale Befehlszeilenoptionen im AWS Command Line Interface -Benutzerhandbuch für 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
Beispiel macOS und Linux (nur diese Systeme)
In derselben Eingabeaufforderung müssen macOS- und Linux-Benutzer möglicherweise den folgenden Befehl ausführen, um sicherzustellen, dass das Skript ausführbar ist.
chmod -R 755 get-logs.sh
Beispiel die letzten fünf Protokollereignisse abrufen
Führen Sie an derselben Eingabeaufforderung das folgende Skript aus, um die letzten fünf Protokollereignisse abzurufen.
./get-logs.sh
Die Ausgabe sollte folgendermaßen aussehen:
{
"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"
}
Löschen von Protokollen
Wenn Sie eine Funktion löschen, werden Protokollgruppen nicht automatisch gelöscht. Um das unbegrenzte Speichern von Protokollen zu vermeiden, löschen Sie die Protokollgruppe oder konfigurieren Sie eine Aufbewahrungszeitraum nach dem Protokolle automatisch gelöscht werden.