In diesem Thema wird beschrieben, wie Sie die TKG-Erweiterung v1.3.1 für Fluent Bit bereitstellen. Fluent Bit ist ein schneller, schlanker Protokollprozessor sowie eine schnelle Protokollweiterleitungsfunktion, mit der Sie Anwendungsdaten und -protokolle aus verschiedenen Quellen erfassen, vereinheitlichen und an mehrere Ziele senden können. Stellen Sie die TKG-Erweiterung für Fluent Bit zur Erfassung und Weiterleitung von Tanzu Kubernetes-Clusterprotokollen am gewünschten Ziel bereit.

Voraussetzungen für die Erweiterung

Beachten Sie die folgenden Anforderungen, bevor Sie die TKG-Erweiterung v1.3.1 für Fluent Bit bereitstellen.

Bereitstellen der Fluent Bit-Erweiterung

Die TKG-Erweiterung für Fluent Bit installiert einen Fluent Bit-Container auf dem Cluster. Weitere Informationen über diesen Container finden Sie unter https://fluentbit.io/.
Container Ressourcentyp Replikate Beschreibung
Fluent Bit DaemonSet 6 Protokoll-Collector, Aggregator, Weiterleitungsfunktion
Die Erweiterung ist so konfiguriert, dass die Container aus der öffentlichen VMware-Registrierung unter https://projects.registry.vmware.com/ abgerufen werden. Wenn Sie eine private Registrierung verwenden, müssen Sie die Endpoint-URL in den Datenwerten und Erweiterungskonfigurationsdateien entsprechend ändern. Unter Konfigurieren der Fluent Bit-Erweiterung finden Sie eine Beschreibung der Felder und Optionen.
  1. Überprüfen Sie, ob die Voraussetzungen für die Erweiterung erfüllt sind. Weitere Informationen finden Sie unter Voraussetzungen für die Erweiterung.
  2. Wechseln Sie in das Verzeichnis für die Fluent Bit-Erweiterung.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. Erstellen Sie den tanzu-system-logging-Namespace, das Fluent Bit-Dienstkonto und die Rollenobjekte.
    kubectl apply -f namespace-role.yaml
  4. Geben Sie das für Fluent Bit zu verwendende Protokollziel an. Zu den unterstützten Ausgaben gehören Elasticsearch, HTTP, Kafka, Splunk und Syslog. Weitere Informationen hierzu finden Sie unter https://docs.fluentbit.io/manual/pipeline/outputs.
  5. Erstellen Sie eine Datei mit Fluent Bit-Datenwerten für Ihr ausgewähltes Protokollziel, indem Sie eine der <LOG_BACKEND>/fluent-bit-data-values.example.yaml-Dateien kopieren.
    Für jedes unterstützte Protokollziel gibt es eine Beispieldatei mit Datenwerten. Im Beispiel wird die Mindestkonfiguration für dieses Protokollziel angegeben.
    cp elasticsearch/fluent-bit-data-values.yaml.example elasticsearch/fluent-bit-data-values.yaml
    cp http/fluent-bit-data-values.yaml.example http/fluent-bit-data-values.yaml
    cp kafka/fluent-bit-data-values.yaml.example kafka/fluent-bit-data-values.yaml
    cp splunk/fluent-bit-data-values.yaml.example splunk/fluent-bit-data-values.yaml
    cp syslog/fluent-bit-data-values.yaml.example syslog/fluent-bit-data-values.yaml
  6. Konfigurieren Sie die Fluent Bit-Erweiterung, indem Sie die Datei <LOG_BACKEND>/fluent-bit-data-values.yaml befüllen. Unter Konfigurieren der Fluent Bit-Erweiterung finden Sie eine Beschreibung der Felder und Optionen.
    Die Fluent Bit-Syslog-Konfiguration benötigt beispielsweise folgende Werte:
    logging:
      image:
        repository: projects.registry.vmware.com/tkg # Public registry
    tkg:
      instance_name: "<TKG_INSTANCE_NAME>" #mandatory but arbitrary; appears in logs
      cluster_name: "<CLUSTER_NAME>" #name of the target tkgs cluster
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "<SYSLOG_HOST>"
        port: "<SYSLOG_PORT>"
        mode: "<SYSLOG_MODE>"
        format: "<SYSLOG_FORMAT>"
    Eine aufgefüllte Datenwertedatei für Fluent Bit-Syslog könnte die folgende Konfiguration aufweisen:
    logging:
      image:
        repository: projects.registry.vmware.com/tkg
    tkg:
      instance_name: "tkgs-cluster-1"
      cluster_name: "tkgs-cluster-1"
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "10.192.175.59"
        port: "514"
        mode: "tcp"
        format: "rfc5424"
  7. Erstellen Sie einen geheimen Fluent Bit-Schlüssel mit Datenwerten für Ihr Protokollziel.
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=elasticsearch/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=kafka/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=splunk/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=http/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=syslog/fluent-bit-data-values.yaml -n tanzu-system-logging
    secret/fluent-bit-data-values wird im Namespace tanzu-system-logging erstellt. Verwenden Sie für die Überprüfung den folgenden Befehl:
    kubectl get secrets -n tanzu-system-logging
  8. Stellen Sie die Fluent Bit-App bereit.
    kubectl apply -f fluent-bit-extension.yaml

    Bei Erfolg sollte app.kappctrl.k14s.io/fluent-bit created angezeigt werden.

  9. Überprüfen Sie den Status der Fluent Bit-App.
    kubectl get app fluent-bit -n tanzu-system-logging
    Bei Erfolg sollte sich der Status von Reconciling in Reconcile succeeded ändern. Wenn der Status Reconcile failed lautet, finden Sie weitere Informationen unter Fehlerbehebung bei der Fluent Bit-Bereitstellung.
  10. Zeigen Sie detaillierte Statusinformationen über die App an.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. Überprüfen Sie das Fluent Bit-DaemonSet.
    kubectl get daemonsets -n tanzu-system-logging
    Bei Erfolg sollte Folgendes angezeigt werden:
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

Fehlerbehebung bei der Fluent Bit-Bereitstellung

Wenn die Bereitstellung oder der Abgleich fehlschlägt, führen Sie kubectl get pods -A aus, um den Pod-Status anzuzeigen. Die fluent-bit-Pods sollten den Status Running aufweisen. Wenn der Pod-Status ImagePullBackOff oder ImageCrashLoopBackOff lautet, konnte das Container-Image nicht abgerufen werden. Überprüfen Sie die Registrierungs-URL in den Datenwerten und den YAML-Dateien der Erweiterung und achten Sie darauf, dass sie korrekt sind.

Überprüfen Sie die Containerprotokolle, wobei name-XXXX der eindeutige Pod-Name ist, der beim Ausführen von kubectl get pods -A angezeigt wird:
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

Aktualisieren der Fluent Bit-Erweiterung

Aktualisieren Sie die auf einem Tanzu Kubernetes-Cluster bereitgestellte Fluent Bit-Erweiterung.

  1. Rufen Sie die Fluent Bit-Datenwerte vom geheimen Schlüssel ab.
    kubectl get secret fluent-bit-data-values -n tanzu-system-logging -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > fluent-bit-data-values.yaml
    
  2. Aktualisieren Sie die Fluent Bit-Datenwerte in fluent-bit-data-values.yaml. Weitere Informationen finden Sie unter Konfigurieren der Fluent Bit-Erweiterung.
  3. Aktualisieren Sie den geheimen Schlüssel mit den Fluent Bit-Datenwerten.
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=fluent-bit-data-values.yaml -n tanzu-system-logging -o yaml --dry-run | kubectl replace -f-
    
    Die Fluent Bit-Erweiterung wird erneut mit den oben genannten Datenwerten abgeglichen.
    Hinweis: Standardmäßig synchronisiert kapp-controller die Apps alle 5 Minuten. Das Update sollte in 5 Minuten oder weniger wirksam werden. Wenn das Update sofort wirksam werden soll, ändern Sie syncPeriod in fluent-bit-extension.yaml in einen niedrigeren Wert und wenden Sie die Fluent Bit-Erweiterung mithilfe der kubectl apply -f fluent-bit-extension.yaml an.
  4. Überprüfen Sie den Zustand der Erweiterung.
    kubectl get app fluent-bit -n tanzu-system-logging
  5. Zeigen Sie den detaillierten Zustand an und führen Sie eine Fehlerbehebung durch.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. Beheben Sie gegebenenfalls Fehler. Weitere Informationen finden Sie unter Fehlerbehebung bei der Fluent Bit-Bereitstellung.

Löschen der Fluent Bit-Erweiterung

Löschen Sie die Fluent Bit-Erweiterung aus einem Tanzu Kubernetes-Cluster.
Hinweis: Führen Sie die Schritte der Reihe nach aus. Löschen Sie den Namespace, das Dienstkonto und die Rollenobjekte nicht, bevor die Fluent Bit-App vollständig gelöscht wurde. Dies kann zu Systemfehlern führen.
  1. Wechseln Sie in das Verzeichnis für die Fluent Bit-Erweiterung.
    cd extensions/logging/fluent-bit/
  2. Löschen Sie die Fluent Bit-App.
    kubectl delete app fluent-bit -n tanzu-system-logging

    Erwartetes Ergebnis: app.kappctrl.k14s.io "fluent-bit" deleted.

  3. Stellen Sie sicher, dass die Fluent Bit-App gelöscht wurde.
    kubectl get app fluent-bit -n tanzu-system-logging

    Erwartetes Ergebnis: apps.kappctrl.k14s.io "fluent-bit" not found.

  4. Löschen Sie den tanzu-system-logging-Namespace, das Fluent Bit-Erweiterungsdienstkonto und die Rollenobjekte.
    kubectl delete -f namespace-role.yaml

Upgrade der Fluent Bit-Erweiterung

Wenn Sie eine vorhandene Fluent Bit-Erweiterung bereitgestellt haben, können Sie sie auf die neueste Version aktualisieren.
  1. Exportieren Sie die Fluent Bit-Configmap.
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. Löschen Sie die vorhandene Fluent Bit-Bereitstellung. Weitere Informationen hierzu finden Sie unter Löschen der Fluent Bit-Erweiterung.
  3. Stellen Sie die neueste Fluent Bit-Erweiterung bereit. Weitere Informationen hierzu finden Sie unter Bereitstellen der Fluent Bit-Erweiterung.

Konfigurieren der Fluent Bit-Erweiterung

Die Konfigurationswerte werden in extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml festgelegt.
Tabelle 1. Konfiguration der Fluent Bit-Erweiterung
Parameter Beschreibung Typ Standard
logging.namespace Namespace, in dem Fluent Bit bereitgestellt wird string tanzu-system-logging
logging.service_account_name Name des Fluent Bit-Dienstkontos string fluent-bit
logging.cluster_role_name Name der Clusterrolle, die Fluent Bit „Get“-, „Watch“- und „List“-Berechtigungen gewährt string fluent-bit-read
logging.image.name Name des Fluent Bit-Images string fluent-bit
logging.image.tag Fluent Bit-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. string v1.6.9_vmware.1
logging.image.repository Speicherort des Repositorys mit dem Fluent Bit-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). string projects.registry.vmware.com/tkg
logging.image.pullPolicy Pull-Richtlinie des Fluent Bit-Images string IfNotPresent
logging.update_strategy Update-Strategie, die bei der DaemonSet-Aktualisierung verwendet werden soll string RollingUpdate
tkg.cluster_name Name des Tanzu Kubernetes-Clusters string Null (Obligatorischer Parameter)
tkg.instance_name Benutzerdefinierter Name der TKG-Instanz, der vom Supervisor-Cluster und allen Tanzu Kubernetes-Clustern in einer Bereitstellung gemeinsam genutzt wird. Sie können einen beliebigen Namen im Zusammenhang mit der Installation verwenden. string Null (Obligatorischer Parameter)
Hinweis: Dieses Feld ist obligatorisch, aber beliebig. Es handelt sich um einen Namen, der in den Protokollen angezeigt wird.
fluent_bit.log_level Zu verwendende Protokollebene für Fluent Bit string Info
fluent_bit.output_plugin Legen Sie das Backend fest, an das Fluent Bit die erfassten Informationen übermitteln soll string Null (Obligatorischer Parameter)
fluent_bit.elasticsearch.host IP-Adresse oder Hostname der Elasticsearch-Zielinstanz string Null (obligatorischer Parameter, wenn output_plugin eine elastische Suche ist)
fluent_bit.elasticsearch.port TCP-Port der Elasticsearch-Zielinstanz integer Null (obligatorischer Parameter, wenn output_plugin eine elastische Suche ist)
fluent_bit.elasticsearch.buffer_size Geben Sie die Puffergröße an, die zum Lesen der Antwort des Elasticsearch-Diensts verwendet wird. Wird auf „Unbegrenzt“ festgelegt, wenn „False“ string False
fluent_bit.elasticsearch.tls Geben Sie die Standardeinstellung für TLS für Elasticsearch an string Aus
fluent_bit.kafka.broker_service_name Eine aus mehreren Listen mit Kafka-Brokern, z. B.: 192.168.1.3:9092 string Null (obligatorischer Parameter, wenn output_plugin Kafka ist)
fluent_bit.kafka.topic_name Ein einzelner Eintrag oder eine Liste von Themen, die durch (,) getrennt sind, die Fluent Bit zum Senden von Nachrichten an Kafka vrwendet string Null (obligatorischer Parameter, wenn output_plugin Kafka ist)
fluent_bit.splunk.host IP-Adresse oder Hostname des Splunk-Zielservers string Null (obligatorischer Parameter, wenn output_plugin Splunk ist)
fluent_bit.splunk.port TCP-Port des Splunk-Zielservers integer Null (obligatorischer Parameter, wenn output_plugin Splunk ist)
fluent_bit.splunk.token Angabe des Authentifizierungstokens für die HTTP Event Collector-Schnittstelle string Null (obligatorischer Parameter, wenn output_plugin Splunk ist)
fluent_bit.http.host IP-Adresse oder Hostname des HTTP-Zielservers string Null (obligatorischer Parameter, wenn output_plugin http ist)
fluent_bit.http.port TCP-Port des HTTP-Zielservers integer Null (obligatorischer Parameter, wenn output_plugin http ist)
fluent_bit.http.mode Angabe einer HTTP-URI für den Zielwebserver string Null (obligatorischer Parameter, wenn output_plugin http ist)
fluent_bit.http.header_key_value Schlüssel/Wert-Paar des HTTP-Headers. Es können mehrere Kopfzeilen festgelegt werden string Null (obligatorischer Parameter, wenn output_plugin http ist)
fluent_bit.http.format Geben Sie das Datenformat an, das im Textkörper der HTTP-Anforderung verwendet werden soll string Null (obligatorischer Parameter, wenn output_plugin http ist)
fluent_bit.syslog.host Domäne oder IP-Adresse des Remote-Syslog-Servers string Null (obligatorischer Parameter, wenn output_plugin Syslog ist)
fluent_bit.syslog.port TCP- oder UDP-Port des Remote-Syslog-Servers integer Null (obligatorischer Parameter, wenn output_plugin Syslog ist)
fluent_bit.syslog.mode Angabe des Transporttyps von TCP, UDP und TLS string Null (obligatorischer Parameter, wenn output_plugin Syslog ist)
fluent_bit.syslog.format Geben Sie das Datenformat an, das im Textkörper der HTTP-Anforderung verwendet werden soll string Null (obligatorischer Parameter, wenn output_plugin Syslog ist)
host_path.volume_1 Verzeichnispfad vom Dateisystem des Hostknotens in den Pod, für Volume 1 string /var/log
host_path.volume_2 Verzeichnispfad vom Dateisystem des Hostknotens in den Pod, für Volume 2 string /var/lib/docker/containers
host_path.volume_3 Verzeichnispfad vom Dateisystem des Hostknotens in den Pod, für Volume 3 string /run/log
systemd.path Pfad zum Systemd-Journalverzeichnis string /var/log/journal