Fluent Bit è un processore e server di inoltro di registro rapido e leggero che consente di raccogliere dati delle applicazioni e registri da origini diverse, unificarli e inviarli a più destinazioni. Distribuire l'estensione TKG per Fluent Bit per raccogliere e inoltrare i registri dei cluster Tanzu Kubernetes alla destinazione desiderata.

Prerequisiti dell'estensione

In questo argomento viene descritto come eseguire la distribuzione dell'estensione TKG v1.3.1 per Fluent Bit. Prima di distribuire l'estensione, attenersi ai requisiti seguenti.

Distribuzione dell'estensione Fluent Bit

L'estensione TKG per Fluent Bit installa un contenitore Fluent Bit nel cluster. Per ulteriori informazioni su questo contenitore, vedere https://fluentbit.io/.
Container Tipo di risorsa Repliche Descrizione
Fluent Bit DaemonSet 6 Agente di raccolta dei registri, aggregatore e server di inoltro
L'estensione è configurata per estrarre i container dal registro pubblico di VMware all'indirizzo https://projects.registry.vmware.com/. Se si utilizza un registro privato, modificare l'URL dell'endpoint nei file dei valori dei dati e di configurazione delle estensioni in modo che corrispondano. Per una descrizione dei i campi e delle opzioni, vedere Configurazione dell'estensione Bit Fluent.
  1. Verificare di aver completato tutti i prerequisiti dell'estensione. Vedere Prerequisiti dell'estensione.
  2. Passare alla directory con l'estensione Fluent Bit.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. Creare lo spazio dei nomi tanzu-system-logging, l'account del servizio Fluent Bit e gli oggetti ruolo.
    kubectl apply -f namespace-role.yaml
  4. Decidere la destinazione del registro da utilizzare per Fluent Bit. Gli output supportati includono Elasticsearch, HTTP,Kafka, Splunk e Syslog. Per ulteriori informazioni, vedere https://docs.fluentbit.io/manual/pipeline/outputs.
  5. Creare un file dei valori dei dati Fluent Bit per la destinazione di registro desiderata copiando uno dei file <LOG_BACKEND>/fluent-bit-data-values.example.yaml.
    È disponibile un file di valori di dati di esempio per ogni destinazione di registro supportata. L'esempio fornisce la configurazione minima per la destinazione del registro.
    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. Configurare l'estensione Fluent Bit compilando <LOG_BACKEND>/fluent-bit-data-values.yaml. Per una descrizione dei i campi e delle opzioni, vedere Configurazione dell'estensione Bit Fluent.
    Ad esempio, la configurazione syslog Fluent Bit richiede i valori seguenti:
    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>"
    Un file di valori dei dati compilato per il syslog Fluent Bit potrebbe avere la seguente configurazione:
    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. Creare un segreto Fluent Bit con valori dei dati per la destinazione del registro.
    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 viene creato nello spazio dei nomi tanzu-system-logging. Eseguire la verifica utilizzando il comando seguente:
    kubectl get secrets -n tanzu-system-logging
  8. Distribuire l'app Fluent Bit.
    kubectl apply -f fluent-bit-extension.yaml

    Al completamento, viene visualizzato il messaggio app.kappctrl.k14s.io/fluent-bit created.

  9. Controllare lo stato dell'app Fluent Bit.
    kubectl get app fluent-bit -n tanzu-system-logging
    Al completamento, lo stato deve passare da Reconciling a Reconcile succeeded. Se lo stato è Reconcile failed, vedere Risoluzione dei problemi relativi alla distribuzione di Fluent Bit.
  10. Visualizzare lo stato dettagliato sull'app.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. Verificare il DeamonSet di Fluent Bit.
    kubectl get daemonsets -n tanzu-system-logging
    Al completamento, dovrebbe essere presente quanto segue:
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

Risoluzione dei problemi relativi alla distribuzione di Fluent Bit

Se la distribuzione o la riconciliazione non riesce, eseguire kubectl get pods -A per visualizzare lo stato del pod. I pod di fluent-bit devono essere Running. Se lo stato di un pod è ImagePullBackOff o ImageCrashLoopBackOff, non è possibile estrarre l'immagine del container. Controllare l'URL del registro nei valori dei dati e nei file YAML dell'estensione e assicurarsi che sia corretto.

Controllare i registri del contenitore, in cui name-XXXX è il nome univoco del pod che è possibile visualizzare quando si esegue kubectl get pods -A:
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

Aggiornamento dell'estensione Fluent Bit

Aggiornare l'estensione Fluent Bit distribuita in un cluster Tanzu Kubernetes.

  1. Ottenere i valori dei dati di Fluent Bit dal segreto.
    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. Aggiornare i valori dei dati di Fluent Bit in fluent-bit-data-values.yaml. Vedere Configurazione dell'estensione Bit Fluent.
  3. Aggiornare il segreto dei valori dei dati di Fluent Bit.
    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-
    
    L'estensione Fluent Bit verrà riconciliata di nuovo con i valori dei dati precedenti.
    Nota: Per impostazione predefinita, kapp-controller sincronizzerà le app ogni 5 minuti. L'aggiornamento dovrebbe essere applicato in 5 minuti al massimo. Se si desidera che l'aggiornamento venga applicato immediatamente, impostare syncPeriod in fluent-bit-extension.yaml su un valore inferiore e applicare l'estensione Fluent Bit mediante kubectl apply -f fluent-bit-extension.yaml.
  4. Controllare lo stato dell'estensione.
    kubectl get app fluent-bit -n tanzu-system-logging
  5. Visualizzare lo stato dettagliato e risolvere i problemi.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. Risolvere i problemi se necessario. Vedere Risoluzione dei problemi relativi alla distribuzione di Fluent Bit.

Eliminare l'estensione Fluent Bit

Eliminare l'estensione Fluent Bi da un cluster Tanzu Kubernetes.
Nota: Completare i passaggi nell'ordine indicato. Non eliminare lo spazio dei nomi, l'account del servizio e gli oggetti ruolo prima che l'app Fluent Bit venga eliminata completamente. In caso contrario, possono verificarsi errori di sistema.
  1. Passare alla directory con l'estensione Fluent Bit.
    cd extensions/logging/fluent-bit/
  2. Eliminare l'app Fluent Bit.
    kubectl delete app fluent-bit -n tanzu-system-logging

    Risultato previsto: app.kappctrl.k14s.io "fluent-bit" deleted.

  3. Verificare che l'app Fluent Bit sia eliminata.
    kubectl get app fluent-bit -n tanzu-system-logging

    Risultato previsto: apps.kappctrl.k14s.io "fluent-bit" not found.

  4. Eliminare lo spazio dei nomi tanzu-system-logging, l'account del servizio di estensione Fluent Bit e gli oggetti ruolo.
    kubectl delete -f namespace-role.yaml

Upgrade dell'estensione Bit Fluent

Se è già stata distribuita un'estensione Fluent Bit, è possibile eseguire l'upgrade alla versione più recente.
  1. Esportare la mappa di configurazione di Fluent Bit.
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. Eliminare la distribuzione esistente di Fluent Bit. Vedere Eliminare l'estensione Fluent Bit.
  3. Distribuire l'estensione Fluent Bit più recente. Vedere Distribuzione dell'estensione Fluent Bit.

Configurazione dell'estensione Bit Fluent

I valori di configurazione sono impostati in extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml.
Tabella 1. Configurazioni dell'estensione Fluent Bit
Parametro Descrizione Tipo Predefinito
logging.namespace Spazio dei nomi in cui verrà distribuito Fluent Bit stringa tanzu-system-logging
logging.service_account_name Nome dell'account del servizio Fluent Bit stringa fluent-bit
logging.cluster_role_name Nome del ruolo cluster che concede le autorizzazioni get, watch e list a Fluent Bit stringa fluent-bit-read
logging.image.name Nome dell'immagine Fluent Bit stringa fluent-bit
logging.image.tag Tag immagine Fluent Bit. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v1.6.9_vmware.1
logging.image.repository Posizione del repository con l'immagine Fluent Bit. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg
logging.image.pullPolicy Criterio di pull dell'immagine bit Fluent stringa IfNotPresent
logging.update_strategy Aggiornare la strategia da utilizzare durante l'aggiornamento di DaemonSet stringa RollingUpdate
tkg.cluster_name Nome del cluster Tanzu Kubernetes stringa Null (parametro obbligatorio)
tkg.instance_name Nome definito dall'utente dell'istanza di TKG, condiviso dal cluster supervisore e tutti i cluster Tanzu Kubernetes in una sola distribuzione. È possibile utilizzare qualsiasi nome correlato all'installazione di. stringa Null (parametro obbligatorio)
Nota: Questo campo è obbligatorio ma arbitrario. Si tratta di un nome che compare nei registri.
fluent_bit.log_level Livello di registro da utilizzare per Fluent Bit stringa info
fluent_bit.output_plugin Impostare il back-end in cui Fluent Bit deve scaricare le informazioni che raccoglie stringa Null (parametro obbligatorio)
fluent_bit.elasticsearch.host Indirizzo IP o nome host dell'istanza di Elasticsearch di destinazione stringa Null (parametro obbligatorio quando output_plugin è Elasticsearch)
fluent_bit.elasticsearch.port Porta TCP dell'istanza di Elasticsearch di destinazione numero intero Null (parametro obbligatorio quando output_plugin è Elasticsearch)
fluent_bit.elasticsearch.buffer_size Specificare le dimensioni del buffer utilizzate per leggere la risposta dal servizio Elasticsearch. Imposta come illimitato se False stringa False
fluent_bit.elasticsearch.tls Specificare l'impostazione predefinita per TLS per Elasticsearch stringa Disattivato
fluent_bit.unifka.broker_service_name Singolo di più elenchi di Kafka Brokers, ad es. 192.168.1.3:9092 stringa Null (parametro obbligatorio quando output_plugin è kafka)
fluent_bit.unfka.topic_name Voce singola o elenco di argomenti separati da (,) che Fluent Bit utilizzerà per inviare messaggi a Kafka stringa Null (parametro obbligatorio quando output_plugin è kafka)
fluent_bit.splunk.host Indirizzo IP o nome host del server Splunk di destinazione stringa Null (parametro obbligatorio quando output_plugin è splunk)
fluent_bit.splunk.port Porta TCP del server Splunk di destinazione numero intero Null (parametro obbligatorio quando output_plugin è splunk)
fluent_bit.splunk.token Specificare il token di autenticazione per l'interfaccia dell'agente di raccolta eventi HTTP stringa Null (parametro obbligatorio quando output_plugin è splunk)
fluent_bit.http.host Indirizzo IP o nome host del server HTTP di destinazione stringa Null (parametro obbligatorio quando output_plugin è http)
fluent_bit.http.port Porta TCP del server HTTP di destinazione numero intero Null (parametro obbligatorio quando output_plugin è http)
fluent_bit.http.mode Specificare un URI HTTP per il server Web di destinazione stringa Null (parametro obbligatorio quando output_plugin è http)
fluent_bit.http.header_key_value Coppia chiave/valore intestazione HTTP. È possibile impostare più intestazioni stringa Null (parametro obbligatorio quando output_plugin è http)
fluent_bit.http.format Specificare il formato dei dati da utilizzare nel corpo della richiesta HTTP stringa Null (parametro obbligatorio quando output_plugin è http)
fluent_bit.syslog.host Dominio o indirizzo IP del server syslog remoto stringa Null (parametro obbligatorio quando output_plugin è syslog)
fluent_bit.syslog.port Porta TCP o UDP del server syslog remoto numero intero Null (parametro obbligatorio quando output_plugin è syslog)
fluent_bit.syslog.mode Specificare il tipo di trasporto da TCP, UDP e TLS stringa Null (parametro obbligatorio quando output_plugin è syslog)
fluent_bit.syslog.format Specificare il formato dei dati da utilizzare nel corpo della richiesta HTTP stringa Null (parametro obbligatorio quando output_plugin è syslog)
host_path.volume_1 Percorso della directory dal file system del nodo host al pod per il volume 1 stringa /var/log
host_path.volume_2 Percorso della directory dal file system del nodo host al pod per il volume 2 stringa /var/lib/docker/containers
host_path.volume_3 Percorso della directory dal file system del nodo host al pod per il volume 3 stringa /run/log
systemd.path Percorso della directory Systemd journal stringa /var/log/journal