Direkt zum Inhalt

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

Lesedauer: 3 Minute
0

Ich kann die Container-Protokolle für meine Amazon Elastic Container Service (Amazon ECS)-Aufgabe oder meinen Amazon Elastic Kubernetes Service (Amazon EKS)-Pod nicht finden.

Kurzbeschreibung

Wenn dir Container-Protokolle für Amazon ECS oder Amazon EKS fehlen, liegt möglicherweise ein Problem mit der Host-Instance vor. Oder, wenn die containerisierte Anwendung nicht an den richtigen Ort schreibt, sind die Protokolle möglicherweise für den Docker-Daemon nicht sichtbar.

Im Folgenden findest du häufige Szenarien, in denen die containerisierte Anwendung einige oder alle der Protokolle nicht schreibt:

  • Du führst den Befehl docker logs yourContainerName auf einer Container-Instance in Amazon ECS aus.
  • Du verwendest den awslogs-Protokolltreiber für eine Aufgabe in Amazon ECS.
  • Du führst den Befehl kubectl logs yourPodName für einen Amazon EKS-Cluster aus.

Lösung

Fehler in den Protokollen für die Amazon ECS-Aufgaben beheben

Sich vergewissern, dass die Aufgabe korrekt konfiguriert ist

  • Überprüfe die Protokollkonfiguration für den Container, der die Protokolle enthält. Der Protokolltreiber wird durch den logConfiguration-Parameter im Abschnitt zur Container-Definition der ECS-Aufgabendefinition festgelegt. Protokolltreiber werden pro Container festgelegt. Wenn die ECS-Aufgabe mehrere Containerdefinitionen hat, überprüfe, ob die Protokollkonfiguration für die Container mit den Protokollen korrekt ist.
  • Überprüfe die Aufgabenbereinigungskonfiguration für die Container-Instance. Der Amazon ECS-Container-Agent entfernt automatisch Protokolldateien, um freien Speicherplatz zurückzugewinnen. Um die Protokolldateien länger auf der Container-Instance aufzubewahren, reduziere die Häufigkeit der Aufgabenbereinigung.

Die CloudWatch-Protokolle überprüfen

Wenn die Aufgaben den awslogs-Protokolltreiber verwenden, werden die Protokolle an Amazon CloudWatch Logs gestreamt. Diese Protokolle werden nie in die Container-Instance geschrieben. Der Befehl docker logs yourContainerName gibt die folgende Fehlermeldung zurück: "Error response from daemon: configured logging driver does not support reading."

Die richtigen Berechtigungen gewähren

Damit die Starttypen von Amazon Elastic Compute Cloud (Amazon EC2) zu CloudWatch Logs gestreamt werden können, gewähre der IAM-Rolle der Container-Instance Berechtigungen.

Damit die Starttypen von AWS Fargate zu CloudWatch Logs gestreamt werden können, gewähre der von derAufgabe verwendeten IAM-Aufgabenrolle Berechtigungen.

Wenn die Protokolle immer noch fehlen, führe die Schritte im Abschnitt Problembehandlung im Anwendungscontainer aus.

Probleme mit den Protokollen für die Kubernetes-Pods auf Amazon EKS beheben

Führe den folgenden kubectl-Befehl aus, um die aus dem Container eines Pods generierten Protokolldateien zurückzugeben:

kubectl logs yourPodName

Hinweis: Das Kubelet entfernt automatisch Protokolldateien, nachdem ein Pod beendet wurde. Weitere Informationen findest du auf der Kubernetes-Website unter Garbage Collection ungenutzter Container und Images. Um diese Protokolldateien länger auf einem Worker-Knoten aufzubewahren, konfiguriere das Kubelet so, dass die Garbage Collection seltener ausgeführt wird.

Wenn die Protokolle immer noch fehlen, führe die Schritte im Abschnitt Problembehandlung im Anwendungscontainer aus.

Problembehandlung im Anwendungscontainer

Führe die folgenden Aufgaben aus, um Probleme mit dem Anwendungscontainer zu beheben:

  • Stelle die Anwendung während des Container-Builds auf das richtige Protokollebene ein.
    Hinweis: Die Anwendung erfordert möglicherweise, dass du die Protokollierung über eine Umgebungsvariable oder in einer Konfigurationsdatei einrichtest.
  • Mach die Anwendung zum ENTRYPOINT des Containers. Weitere Informationen findest du unter ENTRYPOINT auf der Docker Docs-Website.
    Hinweis: Der ENTRYPOINT im Dockerfile ist der Prozess, bei dem die Streams STDOUT und STDERR I/O protokolliert werden. Weitere Informationen findest du unter Container-Protokolle anzeigen auf der Docker Docs-Website.
  • Erstelle den Container mit Anwendungsprotokolldateien, die mit STDOUT und STDERR verknüpft sind. Oder konfiguriere die Anwendung so, dass sie sich direkt bei /proc/1/fd/1 (stdout) und /proc/1/fd/2 (stderr) anmeldet. Beispiele findest du unter den offiziellen Container-Images von nginx und httpd auf der Docker Hub-Website.
    Hinweis: Wenn es der Anwendungsfall zulässt, mache den Bewerbungsprozess zum übergeordneten Prozess im Container. Wenn der Container ein Shell-Skript als ENTRYPOINT verwendet, konfiguriere das Skript so, dass die Container-Daten zur Laufzeit initialisiert werden.
AWS OFFICIALAktualisiert vor einem Jahr