Fargate-Protokollierung
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. Amazon übernimmt die Ausführung für Sie. 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
Sobald Sie die ConfigMap
erstellt haben, erkennt Amazon EKS auf 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
Mit dem Log-Router können Sie die Bandbreite der Dienste von AWS für Protokoll-Analysen und -Speicherung nutzen. Sie können Protokolle von Fargate direkt an Amazon CloudWatch, Amazon OpenSearch Service streamen. Sie können Protokolle auch über Amazon Kinesis Data Firehose an Ziele wie Amazon S3, Amazon Kinesis Data Streams und Partnerwerkzeuge streamen.
Voraussetzungen
-
Ein vorhandenes Fargate-Profil, das einen vorhandenen Kubernetes-Namespace angibt, in dem Sie Fargate-Pods bereitstellen. Weitere Informationen finden Sie unter Erstellen eines Fargate-Profils für Ihren Cluster.
-
Eine vorhandene Fargate-Pod-Ausführungsrolle. Weitere Informationen finden Sie unter Erstellen einer Fargate-pod-Ausführungsrolle.
Router-Konfiguration protokollieren
So konfigurieren Sie den Protokollrouter
Ersetzen Sie in den folgenden Schritten jede
durch Ihre eigenen Werte.example-value
-
Erstellen Sie einen dedizierten Kubernetes-Namespace mit dem Namen
aws-observability
.-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
auf Ihrem Computer. Der Wert füraws-observability-namespace
.yamlname
mussaws-observability
sein und das Labelaws-observability: enabled
ist 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
ConfigMap
mit 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 Containerprotokolle an ein Protokollziel Ihrer Wahl weiterzuleiten. Weitere Informationen finden Sie unter Configuration File(Konfigurationsdatei) in der Fluent Bit-Dokumentation. Wichtig In einer typischen
Fluent Conf
sind die HauptabschnitteService
,Input
,Filter
undOutput
enthalten. Der Fargate-Protokoll-Router akzeptiert jedoch nur:-
Die Abschnitte
Filter
undOutput
und verwaltet die AbschnitteService
undInput
selbst. -
Ein
Parser
-Abschnitt.
Wenn Sie einen anderen Abschnitt als
Filter
,Output
, undParser
angeben, werden die Abschnitte abgelehnt.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.conf
liegen. Sie können ein oder mehrere[FILTER]
in derfilters.conf
haben. 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.
Name
undmatch
sind für jedes[FILTER]
und[OUTPUT]
erforderlich.Name
undformat
werden jeweils für jeden[PARSER]
benötigt. Bei den Schlüssel wird nicht zwischen Groß- und Kleinschreibung unterschieden. -
Umgebungsvariablen wie
${ENV_VAR}
sind imConfigMap
nicht erlaubt. -
Die Einrückung muss für die Direktive oder das Schlüssel-Wert-Paar innerhalb von
filters.conf
,output.conf
undparsers.conf
gleich 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 imConfigMap
bereitgestellt werden, um die Protokollierung zu ermöglichen.Filter
undParser
sind 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
ConfigMap
mit einem der folgenden Beispiele.Wichtig Die Amazon-EKS-Fargate-Protokollierung unterstützt keine dynamische Konfiguration von
ConfigMaps
. Alle Änderungen anConfigMaps
werden nur auf neue Pods angewendet. Änderungen werden nicht auf vorhandene Pods angewendet.Erstellen Sie anhand des Beispiels ein
ConfigMap
für Ihr gewünschtes Protokollziel. -
-
Erstellen Sie eine IAM-Richtlinie aus der Richtliniendatei, die Sie in einem vorherigen Schritt heruntergeladen haben.
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
durch Ihre Konto-ID. Ersetzen Sie111122223333
durch Ihre Pod-Ausführungsrolle (weitere Informationen finden Sie unter Erstellen einer Fargate-pod-Ausführungsrolle). Wenn sich Ihr Cluster in den AWS-Regionen AWS GovCloud (USA Ost) oder AWS GovCloud (USA West) befindet, ersetzen SieAmazonEKSFargatePodExecutionRole
arn:aws:
durcharn:aws-us-gov:
.aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy
\ --role-nameAmazonEKSFargatePodExecutionRole
Kubernetes-Filter-Support
Diese Funktion erfordert die folgende minimale Kubernetes-Version und Plattformebene oder höher.
Kubernetes-Version | Plattformebene |
---|---|
1.22 und höher | eks.1 |
1.21 | eks.3 |
1.20 | eks.3 |
1.19 | eks.7 |
1.18 | eks.9 |
Der Fluent Bit-Kubernetes-Filter ermöglicht es Ihnen, Kubernetes-Metadaten zu Ihren Protokolldateien hinzuzufü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_TTL
300
s
-
Kube_URL
,Kube_CA_File
,Kube_Token_Command
, undKube_Token_File
sind Konfigurationsparameter im Dienstbesitz und dürfen nicht angegeben werden. Amazon-EKS-Fargate füllt diese Werte aus. -
Kube_Meta_Cache_TTL
ist die Zeit, in der Fluent Bit wartet, bis es mit dem API-Server für die neuesten Metadaten kommuniziert. WennKube_Meta_Cache_TTL
nicht angegeben wird, dann hängt Amazon-EKS-Fargate einen Standardwert von 30 Minuten an, um die Belastung des API-Servers zu verringern.
Fluent Bit-Prozessprotokolle an Ihr Konto senden
Sie können Fluent Bit-Prozessprotokolle mit der folgenden ConfigMap
an Amazon CloudWatch senden. Ersetzen Sie
durch die AWS-Region, in der sich Ihr Cluster befindet.region-code
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.* region
region-code
log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
Die Protokolle befinden sich in der AWS-Region, in der sich der Cluster unter CloudWatch befindet. Der Name der Protokollgruppe lautet
und der Name des Fluent Bit-Logstreams lautet my-cluster
-fluent-bit-logsfluent-bit-
.podname
-pod-namespace
-
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 Fehler beim Senden von Prozessprotokollen an Ihr Konto zu beheben, können Sie die vorherige
ConfigMap
verwenden, um die Prozessprotokolle abzurufen. Dass Fluent Bit nicht gestartet werden kann, liegt normalerweise daran, dass IhreConfigMap
beim Starten nicht von Fluent Bit analysiert oder akzeptiert wird.
Testanwendung
-
Stellen Sie einen Beispiel-Pod bereit.
-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
auf Ihrem Computer.sample-app
.yamlapiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace:
same-namespace-as-your-fargate-profile
spec: 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.
Fehlerbehebung
Um zu überprüfen, ob die Protokollierungsfunktion 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
. Die Ausgabe kann Pod-Ereignisse enthalten, die klarstellen, ob die Protokollierung aktiviert ist oder nicht, wie die folgende Beispielausgabe.kubectl describe pod
pod_name
... Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND kubernetes.io/psp: eks.privileged ... 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 Anmerkungen eines Pods auch mit
anzeigen. In der Pod-Anmerkung finden Sie Informationen darüber, ob die Protokollierungsfunktion aktiviert oder deaktiviert ist, und den Grund.kubectl describe pod
pod-name