Konfiguration erweiterter Protokollierungssteuerungen für Lambda-Funktionen - AWS Lambda

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.

Konfiguration erweiterter Protokollierungssteuerungen für Lambda-Funktionen

Um Ihnen mehr Kontrolle darüber zu geben, wie die Protokolle Ihrer Funktionen erfasst, verarbeitet und verwendet werden, bietet Lambda folgende Konfigurationsoptionen für die Protokollierung:

  • Protokollformat — wählen Sie zwischen einfachem Text und strukturiertem JSON Format für die Logs Ihrer Funktion

  • Protokollebene — Wählen Sie für JSON strukturierte Logs 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 zur Konfiguration erweiterter Protokollierungssteuerungen finden Sie in den folgenden Abschnitten:

Konfiguration JSON und Protokollformate im Klartext-Format

Das Erfassen Ihrer Protokollausgaben als JSON Schlüsselwertpaare erleichtert das Suchen und Filtern beim Debuggen Ihrer Funktionen. Mit JSON formatierten Protokollen können Sie Ihren Protokollen auch Tags und Kontextinformationen hinzufügen. Das kann Ihnen bei der automatisierten Analyse großer Mengen von Protokolldaten helfen. Sofern Ihr Entwicklungsworkflow nicht auf vorhandenen Tools basiert, die Lambda-Protokolle im Klartext verarbeiten, empfehlen wir Ihnen, das JSON für Ihr Protokollformat auszuwählen.

Für alle von Lambda verwalteten Laufzeiten können Sie wählen, ob die Systemprotokolle Ihrer Funktion in unstrukturiertem Klartext oder in einem CloudWatch Format an Logs gesendet werden sollen. JSON Systemprotokolle sind die von Lambda generierten Protokolle und werden manchmal auch als Plattformereignisprotokolle bezeichnet.

Wenn Sie für unterstützte Laufzeiten eine der unterstützten integrierten Protokollierungsmethoden verwenden, kann Lambda auch die Anwendungsprotokolle Ihrer Funktion (die Protokolle, die Ihr Funktionscode generiert) in strukturiertem JSON Format ausgeben. Wenn Sie das Protokollformat Ihrer Funktion für diese Laufzeiten konfigurieren, gilt die von Ihnen ausgewählte Konfiguration sowohl für System- als auch für Anwendungsprotokolle.

Wenn Ihre Funktion für unterstützte Laufzeiten eine unterstützte Protokollierungsbibliothek oder -methode verwendet, müssen Sie keine Änderungen an Ihrem vorhandenen Code vornehmen, damit Lambda Logs strukturiert erfassen kann. JSON

Anmerkung

Durch die Verwendung der JSON Protokollformatierung werden zusätzliche Metadaten hinzugefügt und Protokollnachrichten als JSON Objekte codiert, die eine Reihe von Schlüsselwertpaaren enthalten. Aus diesem Grund kann die Größe der Protokollmeldungen Ihrer Funktion zunehmen.

Unterstützte Laufzeiten und Protokollierungsmethoden

Lambda unterstützt derzeit die Option, JSON strukturierte Anwendungsprotokolle für die folgenden Laufzeiten auszugeben.

Laufzeit Unterstützte Versionen
Java Alle Java-Laufzeiten außer Java 8 auf Amazon Linux 1
Node.js Node.js 16 und höher
Python Python 3.8 und höher

Damit Lambda die Anwendungsprotokolle Ihrer Funktion CloudWatch in strukturiertem JSON Format senden kann, muss Ihre Funktion die folgenden integrierten Protokollierungstools zur Ausgabe von Protokollen verwenden:

  • Java – der LambdaLogger-Logger oder Log4j2.

  • Node.js – die Konsolenmethoden console.trace, console.debug, console.log, console.info, console.error und console.warn

  • Python – die logging-Standard-Python-Bibliothek

Weitere Hinweise zur Verwendung erweiterter Protokollierungsoptionen mit unterstützten Laufzeiten finden Sie unter Protokollieren und Überwachen von Java-Lambda-Funktionen, Lambda-Funktionen von Node.js protokollieren und überwachen und Python-Lambda-Funktionen protokollieren und überwachen.

Für andere verwaltete Lambda-Laufzeiten unterstützt Lambda derzeit nur nativ die Erfassung von Systemprotokollen in strukturiertem Format. JSON Sie können jedoch weiterhin Anwendungsprotokolle in strukturiertem JSON Format zu jeder Laufzeit erfassen, indem Sie Protokollierungstools wie Powertools für AWS Lambda die Ausgabe formatierter Protokollausgaben verwenden. JSON

Standardprotokollformate

Derzeit ist das Standard-Protokollformat für alle Lambda-Laufzeiten das Klartextformat.

Wenn Sie bereits Logging-Bibliotheken wie Powertools verwenden AWS Lambda , um Ihre Funktionsprotokolle im JSON strukturierten Format zu generieren, müssen Sie Ihren Code nicht ändern, wenn Sie die Protokollformatierung auswählenJSON. Lambda codiert keine Protokolle, die bereits JSON codiert sind, doppelt, sodass die Anwendungsprotokolle Ihrer Funktion weiterhin wie zuvor erfasst werden.

JSONFormat für Systemprotokolle

Wenn Sie das Protokollformat Ihrer Funktion als konfigurierenJSON, wird jedes Systemprotokollelement (Plattformereignis) als JSON Objekt erfasst, das Schlüsselwertpaare mit den folgenden Schlüsseln enthält:

  • "time" – die Uhrzeit, zu der die Protokollmeldung generiert wurde

  • "type" – die Art des Ereignisses, das protokolliert wird

  • "record" – der Inhalt der Protokollausgabe

Das Format des "record"-Werts hängt von der Art des protokollierten Ereignisses ab. Weitere Informationen finden Sie unter Telemetrieobjekttypen API Event. Weitere Hinweise zu den Protokollebenen, die Systemprotokollereignissen zugewiesen sind, finden Sie unter Zuordnung von Ereignissen auf Systemprotokollebene.

Zum Vergleich zeigen die folgenden beiden Beispiele dieselbe Protokollausgabe sowohl im Klartext- als auch im strukturierten JSON Format. Beachten Sie, dass Systemprotokollereignisse in den meisten Fällen mehr Informationen enthalten, wenn sie im JSON Format ausgegeben werden, als wenn sie im Klartext ausgegeben werden.

Beispiel Klartext:
2024-03-13 18:56:24.046000 fbe8c1 INIT_START Runtime Version: python:3.12.v18 Runtime Version ARN: arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0
Beispiel strukturiertJSON:
{ "time": "2024-03-13T18:56:24.046Z", "type": "platform.initStart", "record": { "initializationType": "on-demand", "phase": "init", "runtimeVersion": "python:3.12.v18", "runtimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0" } }
Anmerkung

Das sendet Zugreifen auf Echtzeit-Telemetriedaten für Erweiterungen mithilfe der Telemetrie API immer Plattformereignisse wie START und REPORT im JSON Format aus. Die Konfiguration des Formats der Systemprotokolle, an die Lambda sendet, CloudWatch hat keinen Einfluss auf das Verhalten der Lambda-TelemetrieAPI.

JSONFormat für Anwendungsprotokolle

Wenn Sie das Protokollformat Ihrer Funktion als konfigurieren, werden AnwendungsprotokollausgabenJSON, die mit unterstützten Protokollierungsbibliotheken und -methoden geschrieben wurden, als JSON Objekt erfasst, das Schlüssel-Wert-Paare mit den folgenden Schlüsseln enthält.

  • "timestamp" – die Uhrzeit, zu der die Protokollmeldung generiert wurde

  • "level" – die der Meldung zugewiesene Protokollebene

  • "message" – der Inhalt der Protokollmeldung

  • "requestId" (Python und Node.js) oder "AWSrequestId" (Java) – die eindeutige Anforderungs-ID für den Funktionsaufruf

Abhängig von der Laufzeit- und Protokollierungsmethode, die Ihre Funktion verwendet, kann dieses JSON Objekt auch zusätzliche Schlüsselpaare enthalten. Wenn Ihre Funktion beispielsweise in Node.js console Methoden verwendet, um Fehlerobjekte mit mehreren Argumenten zu protokollieren, enthält das JSON Objekt zusätzliche Schlüssel-Wert-Paare mit den Schlüsseln errorMessageerrorType, undstackTrace. Weitere Informationen zu JSON formatierten Protokollen in verschiedenen Lambda-Laufzeiten finden Sie unterPython-Lambda-Funktionen protokollieren und überwachen, undLambda-Funktionen von Node.js protokollieren und überwachen. Protokollieren und Überwachen von Java-Lambda-Funktionen

Anmerkung

Der Schlüssel, den Lambda für den Zeitstempelwert verwendet, unterscheidet sich für Systemprotokolle und für Anwendungsprotokolle. Bei Systemprotokollen verwendet Lambda den Schlüssel, "time" um die Konsistenz mit der Telemetrie API aufrechtzuerhalten. Bei Anwendungsprotokollen folgt Lambda den Konventionen der unterstützten Laufzeiten und verwendet "timestamp".

Zum Vergleich zeigen die folgenden beiden Beispiele dieselbe Protokollausgabe sowohl im Klartext- als auch im strukturierten JSON Format.

Beispiel Klartext:
2024-10-27T19:17:45.586Z 79b4f56e-95b1-4643-9700-2807f4e68189 INFO some log message
Beispiel strukturiertJSON:
{ "timestamp":"2024-10-27T19:17:45.586Z", "level":"INFO", "message":"some log message", "requestId":"79b4f56e-95b1-4643-9700-2807f4e68189" }

Festlegen des Protokollformats Ihrer Funktion

Um das Protokollformat für Ihre Funktion zu konfigurieren, können Sie die Lambda-Konsole oder die AWS Command Line Interface (AWS CLI) verwenden. Sie können das Protokollformat einer Funktion auch mit den API Befehlen CreateFunctionund UpdateFunctionConfigurationLambda, der Ressource AWS Serverless Application Model (AWS SAM) AWS: :Serverless: :Function und der Ressource: :Lambda AWS CloudFormation AWS: :Function konfigurieren.

Das Ändern des Protokollformats Ihrer Funktion hat keine Auswirkungen auf bestehende Protokolle, die in Logs gespeichert sind. CloudWatch Nur neue Protokolle verwenden das aktualisierte Format.

Wenn Sie das Protokollformat Ihrer Funktion auf ändern JSON und die Protokollebene nicht festlegen, setzt Lambda die Anwendungsprotokollebene und die Systemprotokollebene Ihrer Funktion automatisch aufINFO. Dies bedeutet, dass Lambda nur Protokollausgaben der Stufe INFO und niedriger an CloudWatch Logs sendet. Weitere Informationen zur Filterung auf Anwendungs- und Systemprotokollebene finden Sie unter Filterung auf Protokollebene

Anmerkung

Wenn für Python-Laufzeiten das Protokollformat Ihrer Funktion auf Klartext gesetzt ist, ist die Standardeinstellung auf Protokollebene. WARN Das bedeutet, dass Lambda nur Protokollausgaben der Stufe WARN und niedriger an CloudWatch Logs sendet. Wenn Sie das Protokollformat Ihrer Funktion ändern, JSON ändert sich dieses Standardverhalten. Weitere Informationen zur Protokollierung in Python finden Sie unter Python-Lambda-Funktionen protokollieren und überwachen.

Bei Funktionen von Node.js, die eingebettete Protokolle im metrischen Format (EMF) ausgeben, kann eine Änderung des Protokollformats Ihrer Funktion in dazu JSON führen, CloudWatch dass Ihre Metriken nicht erkannt werden können.

Wichtig

Wenn Ihre Funktion Powertools for AWS Lambda (TypeScript) oder die EMF Open-Source-Clientbibliotheken zur Ausgabe von EMF Protokollen verwendet, aktualisieren Sie Ihre Powertools und EMFBibliotheken auf die neuesten Versionen, um sicherzustellen, dass Ihre Protokolle weiterhin korrekt analysiert werden CloudWatch können. Wenn Sie zum JSON Protokollformat wechseln, empfehlen wir Ihnen außerdem, Tests durchzuführen, um die Kompatibilität mit den eingebetteten Metriken Ihrer Funktion sicherzustellen. Weitere Hinweise zu den Funktionen von node.js, die EMF Logs ausgeben, finden Sie unterVerwendung von eingebetteten Clientbibliotheken im metrischen Format (EMF) mit strukturierten JSON Protokollen.

So konfigurieren Sie das Protokollformat einer Funktion (Konsole)
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Auswählen einer Funktion

  3. Wählen Sie auf der Konfigurationsseite der Funktion die Option Überwachungs- und Betriebstools aus.

  4. Wählen Sie im Bereich Protokollierungskonfiguration die Option Bearbeiten aus.

  5. Wählen Sie unter Protokollinhalt für Protokollformat entweder Text oder aus JSON.

  6. Wählen Sie Save (Speichern) aus.

So ändern Sie das Protokollformat einer vorhandenen Funktion (AWS CLI)
  • Verwenden Sie den update-function-configurationBefehl, um das Protokollformat einer vorhandenen Funktion zu ändern. Legen Sie die LogFormat-Option in LoggingConfig entweder auf JSON oder Text fest.

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogFormat=JSON
So legen Sie das Protokollformat fest, wenn Sie eine Funktion erstellen (AWS CLI)
  • Um das Protokollformat zu konfigurieren, wenn Sie eine neue Funktion erstellen, verwenden Sie die --logging-config Option im Befehl create-function. Legen Sie LogFormat auf JSON oder Text fest. Mit dem folgenden Beispielbefehl wird eine Funktion Node.js erstellt, die Logs strukturiert ausgibt. JSON

    Wenn Sie beim Erstellen einer Funktion kein Protokollformat angeben, verwendet Lambda das Standardprotokollformat für die von Ihnen ausgewählte Laufzeitversion. Informationen zu den Standard-Protokollierungsformaten finden Sie unter Standardprotokollformate.

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs20.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogFormat=JSON

Filterung auf Protokollebene

Lambda kann die Protokolle Ihrer Funktion filtern, sodass nur Protokolle mit einer bestimmten Detailebene oder niedriger an CloudWatch Logs gesendet werden. Sie können die Filterung auf Protokollebene separat für die Systemprotokolle Ihrer Funktion (die von Lambda generierten Protokolle) und Anwendungsprotokolle (die von Ihrem Funktionscode generierten Protokolle) konfigurieren.

Für Unterstützte Laufzeiten und Protokollierungsmethoden müssen Sie keine Änderungen an Ihrem Funktionscode vornehmen, damit Lambda die Anwendungsprotokolle Ihrer Funktion filtert.

Für alle anderen Laufzeiten und Protokollierungsmethoden muss Ihr Funktionscode Protokollereignisse in stdout oder stderr als JSON formatierte Objekte ausgeben, die ein Schlüssel-Wert-Paar mit dem Schlüssel enthalten. "level" Lambda interpretiert beispielsweise die folgende Ausgabe stdout als DEBUG Level-Log.

print('{"level": "debug", "msg": "my debug log", "timestamp": "2024-11-02T16:51:31.587199Z"}')

Wenn das "level" Wertfeld ungültig ist oder fehlt, weist Lambda der Protokollausgabe das Level INFO zu. Damit Lambda das Zeitstempelfeld verwenden kann, müssen Sie die Uhrzeit im gültigen RFC3339-Zeitstempelformat angeben. Wenn Sie keinen gültigen Zeitstempel angeben, weist Lambda dem Protokoll die Ebene zu INFO und fügt einen Zeitstempel für Sie hinzu.

Halten Sie sich bei der Benennung des Zeitstempelschlüssels an die Benennungskonventionen der Laufzeit, die Sie verwenden. Lambda unterstützt die meisten gängigen Namenskonventionen, die von den verwalteten Laufzeiten verwendet werden. Zum Beispiel in Funktionen, die den verwenden. NETLaufzeit, Lambda erkennt den Schlüssel"Timestamp".

Anmerkung

Um die Filterung auf Protokollebene verwenden zu können, muss Ihre Funktion für die Verwendung des JSON Protokollformats konfiguriert sein. Derzeit ist das Standard-Protokollformat für alle verwalteten Lambda-Laufzeiten das Klartextformat. Informationen zur Konfiguration des Protokollformats Ihrer Funktion finden Sie JSON unter. Festlegen des Protokollformats Ihrer Funktion

Bei Anwendungsprotokollen (den durch Ihren Funktionscode generierten Protokollen) können Sie zwischen den folgenden Protokollebenen wählen.

Protokollebene Standardnutzung
TRACE(am detailliertesten) Die detailliertesten Informationen, die verwendet werden, um den Ausführungspfad Ihres Codes nachzuverfolgen
DEBUG Detaillierte Informationen für das System-Debugging
INFO Meldungen, die den normalen Betrieb Ihrer Funktion erfassen
WARN Meldungen über mögliche Fehler, die zu unerwartetem Verhalten führen können, wenn sie nicht behoben werden
ERROR Meldungen über Probleme, die verhindern, dass der Code wie erwartet funktioniert
FATAL(am wenigsten detailliert) Meldungen über schwerwiegende Fehler, die dazu führen, dass die Anwendung nicht mehr funktioniert

Wenn Sie eine Protokollebene auswählen, sendet Lambda Protokolle auf dieser Ebene und niedriger an CloudWatch Logs. Wenn Sie beispielsweise die Anwendungsprotokollebene einer Funktion auf festlegenWARN, sendet Lambda keine Protokollausgaben auf den DEBUG Ebenen INFO und. Die Standardebene des Anwendungsprotokolls für die Protokollfilterung istINFO.

Wenn Lambda die Anwendungsprotokolle Ihrer Funktion filtert, wird Protokollnachrichten ohne Stufe die Protokollebene zugewiesen. INFO

Für Systemprotokolle (die vom Lambda-Service generierten Protokolle) können Sie zwischen den folgenden Protokollebenen wählen.

Protokollebene Verwendung
DEBUG(am detailliertesten) Detaillierte Informationen für das System-Debugging
INFO Meldungen, die den normalen Betrieb Ihrer Funktion erfassen
WARN(am wenigsten detailliert) Meldungen über mögliche Fehler, die zu unerwartetem Verhalten führen können, wenn sie nicht behoben werden

Wenn Sie eine Protokollebene auswählen, sendet Lambda Protokolle auf dieser Ebene und niedriger. Wenn Sie beispielsweise die Systemprotokollebene einer Funktion auf setzenINFO, sendet Lambda keine Protokollausgaben auf dieser DEBUG Ebene.

Standardmäßig setzt Lambda die Systemprotokollebene aufINFO. Mit dieser Einstellung sendet "start" und "report" protokolliert Lambda automatisch Nachrichten an CloudWatch. Um mehr oder weniger detaillierte Systemprotokolle zu erhalten, ändern Sie die Protokollebene auf DEBUG oderWARN. Eine Liste der Protokollebenen, denen Lambda verschiedene Systemprotokollereignisse zuordnet, finden Sie unter Zuordnung von Ereignissen auf Systemprotokollebene.

Konfigurieren der Filterung auf Protokollebene

Um die Filterung auf Anwendungs- und Systemprotokollebene für Ihre Funktion zu konfigurieren, können Sie die Lambda-Konsole oder die AWS Command Line Interface () verwenden.AWS CLI Sie können die Protokollebene einer Funktion auch mithilfe der API Befehle CreateFunctionund UpdateFunctionConfigurationLambda, der Ressource AWS Serverless Application Model (AWS SAM) AWS: :Serverless: :Function und der Ressource: :Lambda AWS CloudFormation AWS: :Function konfigurieren.

Beachten Sie, dass, wenn Sie die Protokollebene Ihrer Funktion in Ihrem Code festlegen, diese Einstellung Vorrang vor allen anderen von Ihnen konfigurierten Einstellungen auf Protokollebene hat. Wenn Sie beispielsweise die logging setLevel() Python-Methode verwenden, um die Protokollierungsebene Ihrer Funktion auf festzulegenINFO, hat diese Einstellung Vorrang vor einer EinstellungWARN, die Sie mit der Lambda-Konsole konfigurieren.

So konfigurieren Sie die Anwendungs- oder Systemprotokollebene (Konsole) einer vorhandenen Funktion
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie eine Funktion aus.

  3. Wählen Sie auf der Konfigurationsseite der Funktion die Option Überwachungs- und Betriebstools aus.

  4. Wählen Sie im Bereich Protokollierungskonfiguration die Option Bearbeiten aus.

  5. Unter Protokollinhalt ist für Protokollformat die Option Ensure JSONausgewählt.

  6. Wählen Sie mit den Optionsfeldern die gewünschte Anwendungsprotokollebene und die gewünschte Systemprotokollebene für Ihre Funktion aus.

  7. Wählen Sie Save (Speichern) aus.

So konfigurieren Sie die Anwendungs- oder Systemprotokollebene einer vorhandenen Funktion (AWS CLI)
  • Verwenden Sie den update-function-configurationBefehl, um die Anwendungs- oder Systemprotokollebene einer vorhandenen Funktion zu ändern. Verwenden Sie--logging-config, SystemLogLevel um auf einen von DEBUGINFO, oder zu setzenWARN. Legen Sie ApplicationLogLevel auf DEBUG, INFO, WARN, ERROR oder FATAL fest.

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN
So konfigurieren Sie die Filterung auf Protokollebene beim Erstellen einer Funktion
  • Um die Filterung auf Protokollebene zu konfigurieren, wenn Sie eine neue Funktion erstellen, verwenden Sie, --logging-config um die ApplicationLogLevel Tasten SystemLogLevel und im Befehl create-function festzulegen. Legen Sie SystemLogLevel auf DEBUG, INFO oder WARN fest. Legen Sie ApplicationLogLevel auf DEBUG, INFO, WARN, ERROR oder FATAL fest.

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs20.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN

Zuordnung von Ereignissen auf Systemprotokollebene

Für von Lambda generierte Protokollereignisse auf Systemebene ist in der folgenden Tabelle die Protokollebene definiert, die jedem Ereignis zugewiesen ist. Weitere Informationen zu den in der Tabelle aufgeführten Ereignissen finden Sie unter Lambda-Telemetrie-Schemareferenz API Event

Ereignisname Bedingung Zugewiesene Protokollebene
initStart runtimeVersion ist gesetzt INFO
initStart runtimeVersion ist nicht gesetzt DEBUG
initRuntimeDone status=success DEBUG
initRuntimeDone status!=success WARN
initReport initializationType=Schnappstart INFO
initReport initializationType! =Schnellstart DEBUG
initReport status!=success WARN
restoreStart runtimeVersion ist gesetzt INFO
restoreStart runtimeVersion ist nicht gesetzt DEBUG
restoreRuntimeDone status=success DEBUG
restoreRuntimeDone status!=success WARN
restoreReport status=success INFO
restoreReport status!=success WARN
start - INFO
runtimeDone status=success DEBUG
runtimeDone status!=success WARN
report status=success INFO
report status!=success WARN
extension state=success INFO
extension state!=success WARN
logSubscription - INFO
telemetrySubscription - INFO
logsDropped - WARN
Anmerkung

Die Zugreifen auf Echtzeit-Telemetriedaten für Erweiterungen mithilfe der Telemetrie API gibt immer den vollständigen Satz von Plattformereignissen aus. Die Konfiguration der Ebene der Systemprotokolle, an die Lambda sendet, CloudWatch hat keinen Einfluss auf das Verhalten der Lambda-TelemetrieAPI.

Filterung auf Anwendungsprotokollebene mit benutzerdefinierten Laufzeiten

Wenn Sie die Filterung auf Anwendungsprotokollebene für Ihre Funktion konfigurieren, legt Lambda hinter den Kulissen die Anwendungsprotokollebene in der Laufzeit mithilfe der Umgebungsvariable AWS_LAMBDA_LOG_LEVEL fest. Lambda legt auch das Protokollformat Ihrer Funktion mithilfe der Umgebungsvariable AWS_LAMBDA_LOG_FORMAT fest. Sie können diese Variablen verwenden, um erweiterte Lambda-Protokollierungsoptionen in eine benutzerdefinierte Laufzeit zu integrieren.

Um Protokollierungseinstellungen für eine Funktion konfigurieren zu können, die eine benutzerdefinierte Laufzeit mit der Lambda-Konsole und Lambda verwendet AWS CLI APIs, konfigurieren Sie Ihre benutzerdefinierte Laufzeit so, dass sie den Wert dieser Umgebungsvariablen überprüft. Anschließend können Sie die Logger Ihrer Laufzeit gemäß dem von Ihnen ausgewählten Protokollformat und den von Ihnen ausgewählten Protokollebenen konfigurieren.

Konfiguration von Protokollgruppen CloudWatch

Standardmäßig wird CloudWatch automatisch eine Protokollgruppe erstellt, die nach Ihrer Funktion benannt ist, wenn sie /aws/lambda/<function name> zum ersten Mal aufgerufen wird. Um Ihre Funktion so zu konfigurieren, dass Protokolle an eine bestehende Protokollgruppe gesendet werden, oder um eine neue Protokollgruppe für Ihre Funktion zu erstellen, können Sie die Lambda-Konsole oder die AWS CLI verwenden. Sie können benutzerdefinierte Protokollgruppen auch mithilfe der API Befehle CreateFunctionund UpdateFunctionConfigurationLambda sowie der Ressource AWS Serverless Application Model (AWS SAM) AWS: :Serverless: :Function konfigurieren.

Sie können mehrere Lambda-Funktionen so konfigurieren, dass sie Protokolle an dieselbe CloudWatch Protokollgruppe senden. Beispielsweise könnten Sie eine einzelne Protokollgruppe verwenden, um Protokolle für alle Lambda-Funktionen zu speichern, aus denen eine bestimmte Anwendung besteht. Wenn Sie eine benutzerdefinierte Protokollgruppe für eine Lambda-Funktion verwenden, enthalten die von Lambda erstellten Protokollstreams den Funktionsnamen und die Funktionsversion. Dadurch wird sichergestellt, dass die Zuordnung zwischen Protokollmeldungen und Funktionen erhalten bleibt, auch wenn Sie dieselbe Protokollgruppe für mehrere Funktionen verwenden.

Das Log-Stream-Benennungsformat für benutzerdefinierte Protokollgruppen folgt dieser Konvention:

YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]

Beachten Sie, dass bei der Konfiguration einer benutzerdefinierten Protokollgruppe der Name, den Sie für Ihre Protokollgruppe auswählen, den Benennungsregeln für CloudWatch Protokolle entsprechen muss. Darüber hinaus dürfen benutzerdefinierte Protokollgruppennamen nicht mit der Zeichenfolge aws/ beginnen. Wenn Sie eine benutzerdefinierte Protokollgruppe erstellen, die mit aws/ beginnt, kann Lambda die Protokollgruppe nicht erstellen. Aus diesem Grund werden die Protokolle Ihrer Funktion nicht an gesendet CloudWatch.

So ändern Sie die Protokollgruppe einer Funktion (Konsole)
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie eine Funktion aus.

  3. Wählen Sie auf der Konfigurationsseite der Funktion die Option Überwachungs- und Betriebstools aus.

  4. Wählen Sie im Bereich Protokollierungskonfiguration die Option Bearbeiten aus.

  5. Wählen Sie im Bereich Protokollgruppe für CloudWatch Protokollgruppe die Option Benutzerdefiniert aus.

  6. Geben Sie unter Benutzerdefinierte Protokollgruppe den Namen der CloudWatch Protokollgruppe ein, an die Ihre Funktion Protokolle senden soll. Wenn Sie den Namen einer vorhandenen Protokollgruppe eingeben, verwendet Ihre Funktion diese Gruppe. Wenn keine Protokollgruppe mit dem von Ihnen eingegebenen Namen existiert, erstellt Lambda eine neue Protokollgruppe für Ihre Funktion mit diesem Namen.

So ändern Sie die Protokollgruppe einer Funktion (AWS CLI)
  • Verwenden Sie den update-function-configurationBefehl, um die Protokollgruppe einer vorhandenen Funktion zu ändern.

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogGroup=myLogGroup
So geben Sie eine benutzerdefinierte Protokollgruppe an, wenn Sie eine Funktion erstellen (AWS CLI)
  • Um eine benutzerdefinierte Protokollgruppe anzugeben, wenn Sie eine neue Lambda-Funktion mit dem erstellen AWS CLI, verwenden Sie die --logging-config Option. Mit dem folgenden Beispielbefehl wird eine Node.js-Lambda-Funktion erstellt, die Protokolle an eine Protokollgruppe mit dem Namen myLogGroup sendet.

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs20.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogGroup=myLogGroup

Berechtigungen für die Ausführungsrolle

Damit Ihre Funktion Logs an CloudWatch Logs senden kann, muss sie über die Logs: PutLogEvents -Berechtigung verfügen. Wenn Sie die Protokollgruppe Ihrer Funktion mithilfe der Lambda-Konsole konfigurieren und Ihre Funktion diese Berechtigung nicht besitzt, fügt Lambda sie standardmäßig der Ausführungsrolle der Funktion hinzu. Wenn Lambda diese Berechtigung hinzufügt, erteilt es der Funktion die Erlaubnis, Protokolle an jede CloudWatch Logs-Protokollgruppe zu senden.

Um zu verhindern, dass Lambda die Ausführungsrolle der Funktion automatisch aktualisiert, damit Sie diese stattdessen manuell bearbeiten, erweitern Sie Berechtigungen und deaktivieren Sie Erforderliche Berechtigungen hinzufügen.

Wenn Sie die Protokollgruppe Ihrer Funktion mithilfe von konfigurieren AWS CLI, fügt Lambda die logs:PutLogEvents Berechtigung nicht automatisch hinzu. Fügen Sie die Berechtigung zur Ausführungsrolle Ihrer Funktion hinzu, falls noch nicht geschehen. Diese Berechtigung ist in der AWSLambdaBasicExecutionRoleverwalteten Richtlinie enthalten.