O Fluent Bit é um processador e encaminhador de log rápido e leve que permite coletar dados e logs de aplicativos de diferentes origens, unificá-los e enviá-los para vários destinos. Implante a extensão TKG para o bit fluente para coletar e encaminhar Tanzu Kubernetes logs do cluster para o destino de sua escolha.

Pré-requisitos de extensão

Este tópico descreve como implantar a extensão TKG v1.3.1 para o bit fluente. Siga os seguintes requisitos antes de implantar a extensão.

Implantar a extensão de bits fluente

A extensão TKG para o bit fluente instala um contêiner de bit fluente no cluster. Para obter mais informações sobre este contêiner, consulte https://fluentbit.io/.
Container Tipo de Recurso Réplicas Descrição
Bit fluente DaemonSet 6 Coletor de log, agregador, encaminhador
A extensão está configurada para receber os contêineres do registro público VMware em https://projects.registry.vmware.com/. Se você estiver usando um registro privado, altere a URL do endpoint nos valores de dados e nos arquivos de configurações de extensão para corresponder. Consulte Configurar a extensão de bits fluente para obter uma descrição dos campos e opções.
  1. Verifique se você concluiu cada um dos pré-requisitos de extensão. Consulte o Pré-requisitos de extensão.
  2. Altere o diretório para a extensão de bit fluente.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. Crie o namespace tanzu-system-logging e a conta de serviço e os objetos de função de bits fluentes.
    kubectl apply -f namespace-role.yaml
  4. Decida qual destino de log usar para o bit fluente. As saídas com suporte incluem Elasticsearch, HTTP, Kafka, Splunk e Syslog. Consulte https://docs.fluentbit.io/manual/pipeline/outputs para obter mais informações.
  5. Crie um arquivo de valores de dados de bits fluentes para o destino de log escolhido copiando um dos arquivos <LOG_BACKEND>/fluent-bit-data-values.example.yaml.
    Há um arquivo de valores de dados de exemplo para cada destino de log com suporte. O exemplo fornece a configuração mínima para esse destino de log.
    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. Configure a extensão de bits fluente preenchendo o <LOG_BACKEND>/fluent-bit-data-values.yaml. Consulte Configurar a extensão de bits fluente para obter uma descrição dos campos e opções.
    Por exemplo, a configuração do syslog de bits fluidos requer os seguintes valores:
    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>"
    Um arquivo de valores de dados preenchido para o syslog de bits fluidos pode ter a seguinte configuração:
    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. Crie um segredo de bit fluente com valores de dados para o destino do log.
    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
    O secret/fluent-bit-data-values é criado no namespace tanzu-system-logging. Verifique usando o seguinte comando:
    kubectl get secrets -n tanzu-system-logging
  8. Implemente o aplicativo de bits fluente.
    kubectl apply -f fluent-bit-extension.yaml

    Se for bem-sucedido, você verá app.kappctrl.k14s.io/fluent-bit created.

  9. Verifique o status do aplicativo de bits fluente.
    kubectl get app fluent-bit -n tanzu-system-logging
    Em caso de sucesso, o status deve mudar de Reconciling para Reconcile succeeded. Se o status for Reconcile failed, consulte Solução de problemas de implantação de bits fluentes.
  10. Visualize o status detalhado no aplicativo.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. Verifique o DeamonSet de bits fluentes.
    kubectl get daemonsets -n tanzu-system-logging
    Em caso de sucesso, você deve ver o seguinte:
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

Solução de problemas de implantação de bits fluentes

Se a implantação ou a reconciliação falhar, execute kubectl get pods -A para exibir o status do pod. Os pods de fluent-bit devem ser Running. Se um status de pod for ImagePullBackOff ou ImageCrashLoopBackOff, a imagem do contêiner não poderá ser extraída. Verifique a URL do registro nos valores de dados e nos arquivos YAML de extensão e certifique-se de que eles sejam precisos.

Verifique os logs do contêiner, onde name-XXXX é o nome do pod exclusivo que você pode ver ao executar kubectl get pods -A:
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

Atualizar a extensão de bits fluente

Atualize a extensão de bit fluente que é implantada em um cluster do Tanzu Kubernetes.

  1. Obtenha valores de dados de bits fluentes do segredo.
    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. Atualize os valores de dados de bits fluentes em fluent-bit-data-values.yaml. Consulte o Configurar a extensão de bits fluente.
  3. Atualize o segredo dos valores de dados de bits fluentes.
    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-
    
    A extensão de bit fluente será reconciliada novamente com os valores de dados acima.
    Observação: Por padrão, o kapp-controller sincronizará os aplicativos a cada 5 minutos. A atualização deve entrar em vigor em 5 minutos ou menos. Se você quiser que a atualização entre em vigor imediatamente, altere syncPeriod em fluent-bit-extension.yaml para um valor menor e aplique a extensão de bit fluente usando kubectl apply -f fluent-bit-extension.yaml.
  4. Verifique o status da extensão.
    kubectl get app fluent-bit -n tanzu-system-logging
  5. Visualize o status detalhado e solucione problemas.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. Solucione problemas, se necessário. Consulte o Solução de problemas de implantação de bits fluentes.

Excluir a extensão de bits fluente

Exclua a extensão de bit fluente de um cluster Tanzu Kubernetes.
Observação: Conclua as etapas em ordem. Não exclua o namespace, a conta de serviço e os objetos de função antes que o aplicativo de bits fluente seja totalmente excluído. Isso pode levar a erros do sistema.
  1. Altere o diretório para a extensão de bit fluente.
    cd extensions/logging/fluent-bit/
  2. Exclua o aplicativo de bits fluentes.
    kubectl delete app fluent-bit -n tanzu-system-logging

    Resultado esperado: app.kappctrl.k14s.io "fluent-bit" deleted.

  3. Verifique se o aplicativo de bits fluente foi excluído.
    kubectl get app fluent-bit -n tanzu-system-logging

    Resultado esperado: apps.kappctrl.k14s.io "fluent-bit" not found.

  4. Exclua o namespace tanzu-system-logging e a conta de serviço e os objetos de função de extensão de bits fluentes.
    kubectl delete -f namespace-role.yaml

Atualizar a extensão de bits fluente

Se você tiver uma extensão de bits fluente implantada, poderá atualizá-la para a versão mais recente.
  1. Exporte o configmap de bits fluentes.
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. Exclua a implantação de bit fluente existente. Consulte o Excluir a extensão de bits fluente.
  3. Implante a extensão de bits mais recente. Consulte o Implantar a extensão de bits fluente.

Configurar a extensão de bits fluente

Os valores de configuração para estão definidos em extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml.
Tabela 1. Configurações de extensão de bits fluentes
Parâmetro Descrição Tipo Padrão
logging.namespace Namespace onde o bit fluente será implantado cadeia de caracteres tanzu-system-logging
logging.service_account_name Nome da conta de serviço de bits fluentes cadeia de caracteres fluente-bit
logging.cluster_role_name Nome da função de cluster que concede permissões para obter, observar e listar o bit fluente cadeia de caracteres fluent-bit-read
logging.image.name Nome da imagem de bits fluentes cadeia de caracteres fluente-bit
logging.image.tag Tag de imagem de bit fluente. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v1.6.9_vmware.1
logging.image.repository Localização do repositório com a imagem de bits fluentes. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg
logging.image.pullPolicy Política de recebimento de imagem de bit fluente cadeia de caracteres IfNotPresent
logging.update_strategy Estratégia de atualização a ser usada ao atualizar o DaemonSet cadeia de caracteres RollingUpdate
tkg.cluster_name Nome do cluster Tanzu Kubernetes cadeia de caracteres Nulo (parâmetro obrigatório)
tkg.instance_name Nome definido pelo usuário da instância do TKG, compartilhado pelo Cluster Supervisor e todos os clusters Tanzu Kubernetes em uma implantação. Você pode usar qualquer nome relacionado à instalação. cadeia de caracteres Nulo (parâmetro obrigatório)
Observação: Este campo é obrigatório, mas arbitrário. É um nome que aparece nos logs.
fluent_bit.log_level Nível de log a ser usado para o bit fluente cadeia de caracteres informação
fluent_bit.output_plugin Defina o back-end para o qual o bit fluente deve liberar as informações coletadas cadeia de caracteres Nulo (parâmetro obrigatório)
fluent_bit.elasticsearch.host Endereço IP ou nome do host da instância de destino do Elasticsearch cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é pesquisa elástica)
fluent_bit.elasticsearch.port Porta TCP da instância de destino do Elasticsearch número inteiro Nulo (parâmetro obrigatório quando output_plugin é pesquisa elástica)
fluent_bit.elasticsearch.buffer_size Especifique o tamanho do buffer usado para ler a resposta do serviço Elasticsearch. Define como ilimitado se False cadeia de caracteres Falso
fluent_bit.elasticsearch.tls Especifique a configuração padrão para TLS para Elasticsearch cadeia de caracteres Off
fluent_bit.kafka.broker_service_name Lista única de vários agentes Kafka, por exemplo, 192.168.1.3:9092 cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é kafka)
fluent_bit.kafka.topic_name Entrada única ou lista de tópicos separados por (,) que o bit fluente usará para enviar mensagens para o Kafka cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é kafka)
fluent_bit.splunk.host Endereço IP ou nome do host do servidor Splunk de destino cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é Splunk)
fluent_bit.splunk.port Porta TCP do servidor Splunk de destino número inteiro Nulo (parâmetro obrigatório quando output_plugin é Splunk)
fluent_bit.splunk.token Especificar o token de autenticação para a interface do coletor de eventos HTTP cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é Splunk)
fluent_bit.http.host Endereço IP ou nome do host do servidor HTTP de destino cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é http)
fluent_bit.http.port Porta TCP do servidor HTTP de destino número inteiro Nulo (parâmetro obrigatório quando output_plugin é http)
fluent_bit.http.mode Especifique um URI HTTP para o servidor Web de destino cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é http)
fluent_bit.http.header_key_value Par de chave / valor do cabeçalho HTTP. Vários cabeçalhos podem ser definidos cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é http)
fluent_bit.http.format Especifique o formato de dados a ser usado no corpo da solicitação HTTP cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é http)
fluent_bit.syslog.host Domínio ou endereço IP do servidor Syslog remoto cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é syslog)
fluent_bit.syslog.port Porta TCP ou UDP do servidor Syslog remoto número inteiro Nulo (parâmetro obrigatório quando output_plugin é syslog)
fluent_bit.syslog.mode Especifique o tipo de transporte de TCP, UDP e TLS cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é syslog)
fluent_bit.syslog.format Especifique o formato de dados a ser usado no corpo da solicitação HTTP cadeia de caracteres Nulo (parâmetro obrigatório quando output_plugin é syslog)
host_path.volume_1 Caminho do diretório do sistema de arquivos do nó do host para o pod, para o volume 1 cadeia de caracteres / var / log
host_path.volume_2 Caminho do diretório do sistema de arquivos do nó do host para o pod, para o volume 2 cadeia de caracteres / var / lib / docker / containers
host_path.volume_3 Caminho do diretório do sistema de arquivos do nó do host para o pod, para o volume 3 cadeia de caracteres / run / log
systemd.path Caminho para o diretório do diário Systemd cadeia de caracteres / var / log / journal