Unterstützung für die Verbesserung dieser Seite beitragen
Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.
AWS-Fargate-Protokollierung für Ihren Cluster starten
Amazon EKS auf Fargate bietet einen integrierten Log-Router basierend auf Fluent Bit. Dies bedeutet, dass Sie einen Fluent-Bit-Container nicht explizit als Sidecar ausführen, sondern Amazon für Sie ausführen. Alles, was Sie tun müssen, ist den Log-Router zu konfigurieren. Die Konfiguration erfolgt über ein dediziertes ConfigMap, das die folgenden Kriterien erfüllen muss:
-
Benannte
aws-logging -
Erstellt in einem dedizierten Namespace namens
aws-observability -
Mehr als 5 300 Zeichen sind nicht zulässig.
Sobald Sie die ConfigMap erstellt haben, erkennt Amazon EKS in Fargate sie automatisch und konfiguriert den Protokollrouter damit. Fargate verwendet eine Version von AWS für Fluent Bit, eine Upstream-kompatible Distribution von Fluent Bit, die von AWS verwaltet wird. Weitere Informationen finden Sie unter AWS für Fluent Bit auf
Mit dem Log-Router können Sie die Bandbreite der Services von AWS für Protokoll-Analysen und -Speicherung nutzen. Sie können Protokolle von Fargate direkt an Amazon CloudWatch, Amazon OpenSearch Service streamen. Außerdem können Sie Protokolle über Amazon Kinesis Data Firehose
-
Ein vorhandenes Fargate-Profil, das einen vorhandenen Kubernetes-Namespace angibt, in dem Sie Fargate-Pods bereitstellen. Weitere Informationen finden Sie unter Schritt 3: Fargate Profil für Ihren Cluster erstellen.
-
Eine vorhandene Fargate-Pod-Ausführungsrolle. Weitere Informationen finden Sie unter Schritt 2: Fargate-Pod-Ausführungsrolle erstellen.
Router-Konfiguration protokollieren
Wichtig
Damit Protokolle erfolgreich veröffentlicht werden können, muss von der VPC, in der sich Ihr Cluster befindet, Netzwerkzugriff auf das Protokollziel bestehen. Dies betrifft vor allem Benutzer, die Ausgangsregeln für ihre VPC anpassen. Ein Beispiel für die Verwendung von CloudWatch finden Sie unter Verwendung von CloudWatch-Protokollen mit Schnittstellen-VPC-Endpunkten im Benutzerhandbuch zu Amazon CloudWatch Logs.
Ersetzen Sie in den folgenden Schritten jedes Beispielwert durch Ihre eigenen Werte.
-
Erstellen Sie einen dedizierten Kubernetes-Namespace namens
aws-observability.-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
aws-observability-namespace.yamlauf Ihrem Computer. Der Wert fürnamemussaws-observabilitysein und das Labelaws-observability: enabledist erforderlich.kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled -
Erstellen Sie den Namespace.
kubectl apply -f aws-observability-namespace.yaml
-
-
Erstellen Sie ein
ConfigMapmit einemFluent Conf-Datenwert, um Container-Logs an ein Ziel zu versenden. Fluent Conf ist Fluent Bit, eine schnelle und leichte Konfigurationssprache für den Protokollprozessor, die verwendet wird, um Container-Protokolle an ein Protokollziel Ihrer Wahl weiterzuleiten. Weitere Informationen finden Sie unter Konfigurationsdateiin der Fluent-Bit-Dokumentation. Wichtig
In einer typischen
Fluent Confsind die HauptabschnitteService,Input,FilterundOutputenthalten. Der Fargate-Protokoll-Router akzeptiert jedoch nur:-
Die Abschnitte
FilterundOutput. -
Ein
Parser-Abschnitt.
Wenn Sie andere Abschnitte angeben, werden diese abgelehnt.
Der Fargate-Protokollrouter verwaltet die Abschnitte
ServiceundInput. Es verfügt über den folgenden AbschnittInput, der nicht geändert werden kann und in IhremConfigMapnicht benötigt wird. Sie können daraus jedoch Erkenntnisse gewinnen, z. B. die Speicherpuffergrenze und das für Protokolle angewendete Tag.[INPUT] Name tail Buffer_Max_Size 66KB DB /var/log/flb_kube.db Mem_Buf_Limit 45MB Path /var/log/containers/*.log Read_From_Head On Refresh_Interval 10 Rotate_Wait 30 Skip_Long_Lines On Tag kube.*Berücksichtigen Sie beim Erstellen des
ConfigMap, die folgenden Regeln, die Fargate verwendet, um Felder zu validieren:-
[FILTER],[OUTPUT], und[PARSER]sollen unter jedem entsprechenden Schlüssel angegeben werden.[FILTER]muss beispielsweise unterfilters.confliegen. Sie können ein oder mehrere[FILTER]in derfilters.confhaben. Die Abschnitte[OUTPUT]und[PARSER]sollten sich auch unter den entsprechenden Schlüssel befinden. Durch die Angabe mehrerer[OUTPUT]-Abschnitte können Sie Ihre Protokolle gleichzeitig an verschiedene Ziele weiterleiten. -
Fargate validiert die erforderlichen Schlüssel für jeden Abschnitt.
Nameundmatchsind für jedes[FILTER]und[OUTPUT]erforderlich.Nameundformatwerden jeweils für jeden[PARSER]benötigt. Bei den Schlüssel wird nicht zwischen Groß- und Kleinschreibung unterschieden. -
Umgebungsvariablen wie
${ENV_VAR}sind imConfigMapnicht erlaubt. -
Die Einrückung muss für die Direktive oder das Schlüssel-Wert-Paar innerhalb von
filters.conf,output.confundparsers.confgleich sein. Schlüssel-Wert-Paare müssen stärker eingerückt werden als Direktiven. -
Fargate validiert gegen die folgenden unterstützten Filter:
grep,parser,record_modifier,rewrite_tag,throttle,nest,modify, undkubernetes. -
Fargate validiert mit der folgenden unterstützten Ausgabe:
es,firehose,kinesis_firehose,cloudwatch,cloudwatch_logs, undkinesis. -
Mindestens ein unterstütztes
Output-Plugin muss imConfigMapbereitgestellt werden, um die Protokollierung zu ermöglichen.FilterundParsersind nicht erforderlich, um die Protokollierung zu aktivieren.Sie können Fluent Bit auch auf Amazon EC2 mit der gewünschten Konfiguration ausführen, um alle Probleme zu beheben, die sich aus der Validierung ergeben. Erstellen Sie Ihr
ConfigMapmit einem der folgenden Beispiele.Wichtig
Die Amazon-EKS-Fargate-Protokollierung unterstützt keine dynamische Konfiguration einer
ConfigMap. Alle Änderungen an eineConfigMapwerden nur auf neue Pods angewendet. Änderungen werden nicht auf vorhandene Pods angewendet.Erstellen Sie anhand des Beispiels ein
ConfigMapfür Ihr gewünschtes Protokollziel.Anmerkung
Sie können auch Amazon Kinesis Data Streams als Protokollziel verwenden. Stellen Sie bei der Nutzung von Kinesis Data Streams sicher, dass der Pod-Ausführungsrolle die Berechtigung
kinesis:PutRecordserteilt wurde. Weitere Informationen finden Sie unter Berechtigungenfür Amazon Kinesis Data Streams im offiziellen Handbuch zu Fluent Bit.
-
-
Richten Sie Berechtigungen für die Fargate-Pod-Ausführungsrolle ein, um Protokolle an Ihr Ziel zu senden.
-
Laden Sie die IAM-Richtlinie für Ihr Ziel auf Ihren Computer herunter.
-
Erstellen Sie eine IAM-Richtlinie aus der heruntergeladenen Richtliniendatei.
aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.json -
Hängen Sie die IAM-Richtlinie an die Pod-Ausführungsrolle an, die für Ihr Fargate-Profil angegeben ist, mit dem folgenden Befehl. Ersetzen Sie
111122223333durch Ihre Konto-ID. Ersetzen SieAmazonEKSFargatePodExecutionRoledurch Ihre Pod-Ausführungsrolle (weitere Informationen finden Sie unter Schritt 2: Fargate-Pod-Ausführungsrolle erstellen).aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-nameAmazonEKSFargatePodExecutionRole
-
Support von Kubernetes-Filtern
Mit dem Fluent-Bit-Kubernetes-Filter können Sie Kubernetes-Metadaten zu Ihren Protokolldateien hinzufügen. Weitere Informationen über den Filter finden Sie unter Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL300s
Wichtig
-
Kube_URL,Kube_CA_File,Kube_Token_Command, undKube_Token_Filesind Konfigurationsparameter im Servicebesitz und dürfen nicht angegeben werden. Amazon-EKS-Fargate füllt diese Werte aus. -
Kube_Meta_Cache_TTList die Zeit, in der Fluent Bit wartet, bis es mit dem API-Server für die neuesten Metadaten kommuniziert. WennKube_Meta_Cache_TTLnicht angegeben wird, dann hängt Amazon EKS Fargate einen Standardwert von 30 Minuten an, um die Belastung des API-Servers zu verringern.
So übermitteln Sie Fluent-Bit-Prozessprotokolle an Ihr Konto
Sie können Fluent-Bit-Prozessprotokolle optional mit den folgenden ConfigMap an Amazon CloudWatch senden. Für den Versand von Fluent Bit-Prozessprotokollen an CloudWatch fallen zusätzliche Kosten für die Protokollaufnahme und Speicherung an. Ersetzen Sie den region-code durch die AWS-Region, in der sich Ihr Cluster befindet.
kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: # Configuration files: server, input, filters and output # ====================================================== flb_log_cw: "true" # Ships Fluent Bit process logs to CloudWatch. output.conf: | [OUTPUT] Name cloudwatch Match kube.* regionregion-codelog_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
Die Protokolle befinden sich in CloudWatch in derselben AWS-Region wie der Cluster. Der Name der Protokollgruppe lautet
und der Name des Fluent-Bit-Logstreams lautet my-cluster-fluent-bit-logsfluent-bit-.podname-pod-namespace
Anmerkung
-
Die Prozessprotokolle werden nur ausgeliefert, wenn der Fluent-Bit-Prozess erfolgreich gestartet wird. Wenn beim Starten von Fluent Bit ein Fehler auftritt, werden die Prozessprotokolle verpasst. Sie können nur Prozessprotokolle an CloudWatch senden.
-
Um Versandprozessprotokolle auf Ihr Konto zu debuggen, können Sie die vorherigen
ConfigMapanwenden, um die Prozessprotokolle zu erhalten. Dass Fluent Bit nicht gestartet werden kann, liegt normalerweise daran, dass IhrConfigMapbeim Starten nicht von Fluent Bit analysiert oder akzeptiert wird.
So beenden Sie die Übermittlung von Fluent-Bit-Prozessprotokollen
Für den Versand von Fluent Bit-Prozessprotokollen an CloudWatch fallen zusätzliche Kosten für die Protokollaufnahme und Speicherung an. Gehen Sie wie folgt vor, um Prozessprotokolle in einem vorhandenen ConfigMap-Setup auszuschließen.
-
Suchen Sie die CloudWatch-Protokollgruppe, die automatisch für die Fluent-Bit-Prozessprotokolle Ihres Amazon-EKS-Clusters erstellt wurde, nachdem Sie die Fargate-Protokollierung aktiviert haben. Es folgt dem Format
.my-cluster-fluent-bit-logs -
Löschen Sie die vorhandenen CloudWatch-Protokollstreams, die für die Prozessprotokolle der einzelnen Pods in der CloudWatch-Protokollgruppe erstellt wurden.
-
Bearbeiten Sie die
ConfigMapund stellen Sieflb_log_cw: "false"ein. -
Starten Sie alle vorhandenen Pods im Cluster neu.
Testanwendung
-
Stellen Sie einen Beispiel-Pod bereit.
-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
sample-app.yamlauf Ihrem Computer.apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace:same-namespace-as-your-fargate-profilespec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80 -
Wenden Sie das Manifest auf den Cluster an.
kubectl apply -f sample-app.yaml
-
-
Zeigen Sie die NGINX-Protokolle mit den Zielen an, die Sie im
ConfigMap.
Größenüberlegungen
Wir empfehlen Ihnen, für den Protokoll-Router bis zu 50 MB Speicher einzuplanen. Wenn Sie erwarten, dass Ihre Anwendung Protokolle mit sehr hohem Durchsatz generiert, sollten Sie bis zu 100 MB einplanen.
Fehlersuche
Um zu überprüfen, ob das Protokollierungs-Feature aus irgendeinem Grund aktiviert oder deaktiviert ist, z. B. ein ungültiges ConfigMap, und warum es ungültig ist, überprüfen Sie Ihre Pod-Ereignisse mit kubectl describe pod . Die Ausgabe kann Pod-Ereignisse enthalten, die klarstellen, ob die Protokollierung aktiviert ist oder nicht, wie die folgende Beispielausgabe.pod-name
[...] Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found
Die Pod-Ereignisse sind kurzlebig mit einem Zeitraum, der von den Einstellungen abhängt. Sie können die Annotationen eines Pods auch mit kubectl describe pod anzeigen. In der Pod-Annotation finden Sie Informationen darüber, ob die Protokollierungs-Feature aktiviert oder deaktiviert ist, und den Grund.pod-name