Direkt zum Inhalt

Warum werden meine Amazon-ECS-Container-Protokolle nicht an CloudWatch Logs übermittelt?

Lesedauer: 3 Minute
0

Meine Amazon Elastic Container Service (Amazon ECS)-Container-Protokolle werden nicht wie erwartet in Amazon CloudWatch Logs angezeigt.

Lösung

Den awslogs-Protokolltreiber ändern

Füge den Parameter logConfiguration beim awslogs-Protokolltreiber in deiner Aufgabendefinition hinzu. Für Amazon ECS-Aufgaben mit mehreren Containern konfiguriere den Parameter logConfiguration für jeden Container.

Wenn du einen Starttyp für Amazon Elastic Compute Cloud (Amazon EC2) hast, aktualisiere deine Amazon ECS-Container-Instance auf Version 1.9.0 oder höher.

Wenn deine Container-Instance das für Amazon ECS optimierte Amazon Machine Image (AMI) nicht verwendet, führe die folgende Umgebungsvariable aus, um den Container-Agenten zu starten:

ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

Hinweis: Gib den Protokolltreiber awslogs auf der Container-Instance an.

Installing the Amazon ECS container agent (Den Amazon-ECS-Container-Agent installieren)

Die erforderlichen IAM-Rollenberechtigungen hinzufügen

AWS Fargate-Starttyp

Hänge die Richtlinie AmazonECSTaskExecutionRolePolicy an deine Amazon ECS-Rolle zur Ausführung von AWS Identity and Access Management (IAM)-Aufgaben an. Die Richtlinie umfasst die erforderlichen Berechtigungen logs:CreateLogStream und logs:PutLogEvents. Oder erstelle eine benutzerdefinierte IAM-Richtlinie und füge die erforderlichen Berechtigungen hinzu.

Amazon EC2-Startaufgaben ohne Aufgabenausführung (IAM-Rolle)

Hänge die Richtlinie AmazonEC2ContainerServiceforEC2Role an die IAM-Rolle der Container-Instance an. Die Richtlinie enthält die erforderlichen Berechtigungen logs:CreateLogStream und logs:PutLogEvents. Oder erstelle eine benutzerdefinierte IAM-Richtlinie und füge die erforderlichen Berechtigungen hinzu.

Amazon EC2-Startaufgaben mit IAM-Rolle zur Aufgabenausführung

Aktualisiere für die Container-Agent-Konfiguration den Parameter ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE auf true.

Hinweis: Der Standardwert für den Container-Agent-Parameter ist auf für Amazon ECS optimierten AMIs mit Version 1.16.0-1 oder höher true und unter Windows false.

Die Definition der Aufgabenkonfiguration überprüfen

Wenn die in deiner Aufgabendefinition angegebene Protokollgruppe nicht in CloudWatch Logs vorhanden ist, können keine Protokolle übermittelt werden. Der Protokolltreiber awslogs erstellt die Protokollgruppe nicht automatisch, es sei denn, du setzt awslogs-create-group auf true.

Um zu überprüfen, ob die Protokollgruppe vorhanden ist, führe die folgenden Schritte aus:

  1. Öffne die CloudWatch-Konsole.
  2. Wähle im Navigationsbereich Protokolle und dann Protokollgruppen aus.
  3. Suche nach dem in deiner Aufgabendefinition angegebenen Namen der Protokollgruppe.
  4. Wenn die Protokollgruppe nicht existiert, wähle Protokollgruppe erstellen.
  5. Gib den Namen der Protokollgruppe ein, der mit deiner Aufgabendefinition übereinstimmt.

Füge alternativ "awslogs-create-group": "true" zum Block options in der logConfiguration deiner Aufgabendefinition hinzu, um dem Protokolltreiber zu erlauben, die Protokollgruppe automatisch zu erstellen.

Hinweis: Deine IAM-Richtlinie muss die Berechtigung logs:CreateLogGroup enthalten, bevor du awslogs-create-group verwendest. Weitere Informationen findest du unter Amazon ECS task execution IAM role (IAM-Rolle zur Ausführung von Amazon ECS-Aufgaben).

Die Netzwerkkonfiguration überprüfen

Wenn deine Aufgabe den Protokolltreiber awslogs in einer Amazon Virtual Private Cloud (Amazon VPC) ohne Internet-Gateway verwendet, erstelle einen Schnittstellen-VPC-Endpunkt für CloudWatch Logs. Wähle com.amazonaws.Region.logs als Service.

Die Konfiguration auf Protokollebene des Containers überprüfen

Der Protokolltreiber awslogs leitet die Streams STDOUT und STDERR I/O von Docker an CloudWatch Logs weiter.

Um deine Protokolle zu konfigurieren, aktualisiere deine Anwendung so, dass die Protokolle an die Streams STDOUT und STDERR I/O gesendet werden. Konfiguriere dann während des Container-Builds die Protokollebene der Anwendung über eine Umgebungsvariable oder eine Konfigurationsdatei.

Weitere Informationen

Monitoring tools for Amazon ECS (Überwachungstools für Amazon ECS)

Wie behebe ich fehlende Container-Protokolle für Amazon ECS oder Amazon EKS?

Preventing log loss with non-blocking mode in the AWSLogs container log driver (Protokollverlust durch nicht blockierenden Modus im AWSLogs Container-Protokolltreiber verhindern)

PutAccountSetting

AWS OFFICIALAktualisiert vor 6 Monaten