Konfiguration von CloudWatch Protokollgruppen - 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 von CloudWatch Protokollgruppen

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 Befehle CreateFunctionund UpdateFunctionConfigurationLambda API und 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 Protokollstream-Benennungsformat für benutzerdefinierte Protokollgruppen folgt dieser Benennungskonvention:

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 Befehl update-function-configuration, 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 nodejs24.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, fügt Lambda diese Berechtigung der Rolle unter folgenden Bedingungen hinzu:

  • Das Serviceziel ist auf CloudWatch Logs gesetzt

  • Die Ausführungsrolle Ihrer Funktion ist nicht berechtigt, Logs in Logs (das Standardziel) hochzuladen CloudWatch

Anmerkung

Lambda fügt keine Put-Berechtigungen für Amazon S3- oder Firehose-Protokollziele 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.

CloudWatch Protokollierung für Lambda Managed Instances

Bei der Verwendung von Lambda Managed Instances gibt es zusätzliche Überlegungen zum Senden von Protokollen an CloudWatch Logs:

VPC-Netzwerkanforderungen

Lambda Managed Instances werden auf kundeneigenen EC2 Instances innerhalb Ihrer VPC ausgeführt. Um CloudWatch Logs an Logs und Traces an X-Ray zu senden, müssen Sie sicherstellen, dass diese von Ihrer VPC aus routingfähig AWS APIs sind. Sie haben mehrere Möglichkeiten:

  • AWS PrivateLink (empfohlen): Wird verwendet AWS PrivateLink, um VPC-Endpunkte für CloudWatch Logs und X-Ray-Dienste zu erstellen. Dadurch können Ihre Instances privat auf diese Dienste zugreifen, ohne dass ein Internet-Gateway oder NAT-Gateway erforderlich ist. Weitere Informationen finden Sie unter Verwenden von CloudWatch Protokollen mit VPC-Endpunkten der Schnittstelle.

  • NAT-Gateway: Konfigurieren Sie ein NAT-Gateway, um ausgehenden Internetzugang von Ihren privaten Subnetzen aus zu ermöglichen.

  • Internet Gateway: Stellen Sie für öffentliche Subnetze sicher, dass für Ihre VPC ein Internet-Gateway konfiguriert ist.

Wenn CloudWatch Logs oder X-Ray nicht von Ihrer VPC aus routingfähig APIs sind, werden Ihre Funktionsprotokolle und Traces nicht zugestellt.

Gleichzeitige Aufrufe und Protokollzuweisung

Ausführungsumgebungen für Lambda Managed Instances können mehrere Aufrufe gleichzeitig verarbeiten. Wenn mehrere Aufrufe gleichzeitig ausgeführt werden, werden ihre Protokolleinträge im selben Protokollstream verschachtelt. Um Protokolle von gleichzeitigen Aufrufen effektiv zu filtern und zu analysieren, sollten Sie sicherstellen, dass jeder Protokolleintrag die Anforderungs-ID enthält. AWS

Wir empfehlen einen der folgenden Ansätze:

  • Verwenden Sie standardmäßige Lambda-Laufzeitlogger (empfohlen): Die von Lambda Managed Runtimes bereitgestellten Standard-Logging-Bibliotheken enthalten automatisch die Anforderungs-ID in jedem Protokolleintrag.

  • Implementieren Sie strukturierte JSON-Protokollierung: Wenn Sie eine benutzerdefinierte Laufzeit erstellen oder eine benutzerdefinierte Protokollierung benötigen, implementieren Sie Protokolle im JSON-Format, die die Anforderungs-ID in jedem Eintrag enthalten. Lambda Managed Instances unterstützen nur das JSON-Protokollformat. Nehmen Sie das requestId Feld in Ihre JSON-Logs auf, um die Filterung nach Aufrufen zu ermöglichen:

    { "timestamp": "2025-01-15T10:30:00.000Z", "level": "INFO", "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "message": "Processing request" }

Mit der Zuordnung der Anfrage-ID können Sie CloudWatch Log-Log-Log-Einträge für einen bestimmten Aufruf mithilfe von CloudWatch Logs Insights-Abfragen filtern. Beispiel:

fields @timestamp, @message | filter requestId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890" | sort @timestamp asc

Weitere Informationen zu den Protokollierungsanforderungen für Lambda Managed Instances finden Sie unterGrundlegendes zur Ausführungsumgebung von Lambda Managed Instances.