Wie behebe ich Setup-Probleme, wenn ich Fluent Bit mit Container Insights für Amazon EKS integriere?

Lesedauer: 4 Minute
0

Ich möchte Setup-Probleme beheben, wenn ich Fluent Bit mit Container Insights for Amazon Elastic Kubernetes Service (Amazon EKS) integriere.

Kurzbeschreibung

Fluent Bit ist ein schlanker Protokollprozessor und Forwarder, mit dem Sie Container-Protokolle in Amazon CloudWatch sammeln.

Aufgrund des geringen Ressourcenverbrauchs und der Use_Kubelet-Funktion ist es eine bewährte Methode, Fluent Bit anstelle von Fluentd (einem älteren Open-Source-Programm) zu verwenden. Weitere Informationen finden Sie unter Funktion Use_Kubelet für große Cluster aktivieren.

Damit Fluent Bit Container-Protokolle an Amazon CloudWatch Logs senden kann, müssen Sie Fluent Bit AWS-Identity-and-Access-Management-Berechtigungen (IAM) gewähren. Mit Amazon EKS gibt es zwei Möglichkeiten, IAM-Berechtigungen zu gewähren:

  • Hängen Sie der IAM-Rolle Ihrer Worker-Knoten eine Richtlinie an.
  • Verwenden Sie eine IAM-Servicekontorolle.

Wenn Sie Fluent Bit IAM-Berechtigungen gewähren, kann Fluent Bit die folgenden Aktionen ausführen:

  • logs:DescribeLogGroups
  • logs:DescribeLogStreams
  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:PutLogEvents

Zu den häufigsten Problemen gehören:

  • Fluent-Bit-Pods stürzen ab.
  • Fluent Bit sendet keine Protokolle an CloudWatch.
  • Fluent Bit-Pods geben CreateContainerConfigError zurück.

Lösung

IAM-Rolle für ein Servicekonto einrichten

Erstellen Sie eine IAM-Rolle für das Cloudwatch-Agent-Servicekonto für den Amazon-Cloudwatch-Namespace mit der von AWS verwalteten Richtlinie CloudWatchAgentServerPolicy.

1.    Führen Sie die folgenden Befehle aus, um Umgebungsvariablen einzurichten:

export CLUSTER="clustername"
export AWS_REGION="awsregion"
export AWS_ACCOUNT="awsaccountid"

Hinweis: Ersetzen Sie „clustername“,„awsregion“ und „awsaccountid“ (einschließlich der Anführungszeichen) durch Ihren eigenen Clusternamen, Ihre AWS-Region und Ihre Konto-ID.

2.    Führen Sie den folgenden eksctl-Befehl aus:

eksctl create iamserviceaccount \
    --name cloudwatch-agent \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

Weitere Informationen zu den Voraussetzungen für Container Insights finden Sie unter Voraussetzungen überprüfen.

CloudWatch-Agenten einrichten, um Cluster-Metriken zu sammeln, und Container Insights aktivieren

1.    Führen Sie den folgenden Befehl aus, um Container Insights mithilfe des Schnellstarts bereitzustellen:

ClusterName="my-cluster-name"
RegionName="my-cluster-region"
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
[[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
[[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || 
FluentBitHttpServer='On'
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-
container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-
monitoring/quickstart/cwagent-fluent-bit-quickstart.yaml | sed 's/
{{cluster_name}}/'${ClusterName}'/;s/
{{region_name}}/'${RegionName}'/;s/
{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/
{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/
{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/
{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

Hinweis: Ersetzen Sie „my-cluster-name“ und „my-cluster-region“ (einschließlich der Anführungszeichen) durch Ihren eigenen Clusternamen und Ihre AWS-Region.

Der vorherige Befehl erstellt einen Namespace, ClusterRole, ClusterRoleBinding und ConfigMap für den CloudWatch-Agenten und Fluent Bit.

2.    Führen Sie nach der Ausführung dieses Befehls den folgenden Befehl aus, um das Fluent-Bit-Servicekonto zu erstellen:

eksctl create iamserviceaccount \
    --name fluent-bit \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

3.    Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der CloudWatch-Agent die Bereitstellung durchführt:

kubectl get pods -n amazon-cloudwatch

4.    Wenn der Vorgang abgeschlossen ist, erstellt der CloudWatch-Agent die Protokollgruppe /aws/containerinsights/Cluster_Name/Performance. Anschließend sendet der CloudWatch-Agent die Leistungsprotokollereignisse an die Protokollgruppe.

Fehlerbehebung

Fluent-Bit-Pods stürzen ab

1.    Suchen Sie in den Fluent-Bit-Pod-Protokollen nach Fehlermeldungen. Führen Sie diese Befehle aus, um nach Ereignissen in Fluent-Bit-Pods zu suchen:

kubectl -n amazon-cloudwatch logs -l k8s-app=fluent-bit 

kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name

2.    Stellen Sie sicher, dass cluster-info (die in ConfigMap gespeicherte Fluent-Bit-Konfigurationsdatei) korrekt ist und keine Syntaxfehler enthält. Stellen Sie sicher, dass alle Clusternamen und Regionswerte festgelegt sind. Weitere Informationen finden Sie unter amazon-cloudwatch-container-insights auf der GitHub-Website.

Fluent Bit sendet keine Protokolle an CloudWatch

1.    Stellen Sie sicher, dass das Ausgabe-Plugin in der Fluent-Bit-Konfigurationsdatei ordnungsgemäß eingerichtet ist. Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Fehler beim Versand von Daten vorliegen, um die Fluent-Bit-Pod-Protokolle zu überprüfen:

kubectl -n amazon-cloudwatch logs fluent_pod_name

2.    Stellen Sie sicher, dass die Fluent-Bit-Pods über die erforderlichen IAM-Berechtigungen verfügen, um Protokolle an CloudWatch zu streamen. Ihre Amazon-EKS-Worker-Knoten senden aufgrund der von IAM durchgesetzten CloudWatchAgentServerPolicy-Metriken und -Protokolle an CloudWatch. Es gibt zwei Möglichkeiten, die erforderlichen IAM-Berechtigungen zu gewähren:

  • Fügen Sie den IAM-Rollen der Worker-Knoten eine Richtlinie hinzu.
  • Erstellen Sie eine IAM-Rolle für die Servicekonten des Clusters und fügen Sie ihr die Richtlinie hinzu.

Weitere Informationen finden Sie im Abschnitt Einrichten einer IAM-Rolle für ein Servicekonto.

Fluent-Bit-Pods stecken in CreateContainerConfigError fest

Wenn der Pod-Status CreateContainerConfigError lautet, führen Sie den folgenden Befehl aus, um die genaue Fehlermeldung zu erhalten:

kubectl describe pod pod_name -n amazon-cloudwatch

Suchen Sie in der Befehlsausgabe im Abschnitt Ereignisse nach einer Fehlermeldung wie der folgenden:

Error syncing pod ("fluent-bit-xxxxxxx"), skipping: failed to "StartContainer" with CreateContain
erConfigError: "configmap \"fluent-bit-config\" not found"

Wenn Sie diese Fehlermeldung sehen, haben Sie wahrscheinlich die ConfigMap für Fluent Bit (fluent-bit-config) nicht erstellt. Folgen Sie erneut den Installationsschritten, um sicherzugehen, dass Sie die ConfigMap erstellen.


Ähnliche Informationen

CloudWatch-Agenten einrichten, um Cluster-Metriken zu sammeln

Schnellstart mit dem CloudWatch-Agenten und Fluent Bit

Debug-Protokollierung aktivieren (GitHub-Website)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr