Configurar o Fluent Bit como um DaemonSet para enviar logs ao CloudWatch Logs - Amazon CloudWatch

Configurar o Fluent Bit como um DaemonSet para enviar logs ao CloudWatch Logs

As seções a seguir ajudam a implantar o Fluent Bit para enviar logs de contêineres ao CloudWatch Logs.

O que se difere se você já estiver usando Fluentd

Se você já estiver usando o Fluentd para enviar logs de contêineres ao CloudWatch Logs, leia esta seção para ver as diferenças entre o Fluentd e o Fluent Bit. Se ainda não estiver usando o Fluentd com o Container Insights, você pode pular para Configurar o Fluent Bit.

Fornecemos duas configurações padrão para o Fluent Bit:

  • Configuração otimizada do Fluent Bit: uma configuração alinhada às práticas recomendadas do Fluent Bit.

  • Configuração compatível com Fluentd: uma configuração alinhada ao comportamento Fluentd o máximo possível.

A lista a seguir explica as diferenças entre o Fluentd e cada configuração do Fluent Bit em detalhes.

  • Diferenças nos nomes de fluxo de logs: se você usar a configuração otimizada do Fluent Bit, os nomes de fluxo de logs serão diferentes.

    Em /aws/containerinsights/Cluster_Name/application

    • A configuração otimizada do Fluent Bit envia logs para kubernetes-nodeName-application.var.log.containers.kubernetes-podName_kubernetes-namespace_kubernetes-container-name-kubernetes-containerID

    • O Fluentd envia logs para kubernetes-podName_kubernetes-namespace_kubernetes-containerName_kubernetes-containerID

    Em /aws/containerinsights/Cluster_Name/host

    • A configuração otimizada do Fluent Bit envia logs para kubernetes-nodeName.host-log-file

    • O Fluentd envia logs para host-log-file-Kubernetes-NodePrivateIp

    Em /aws/containerinsights/Cluster_Name/dataplane

    • A configuração otimizada do Fluent Bit envia logs para kubernetes-nodeName.dataplaneServiceLog

    • O Fluentd envia logs para dataplaneServiceLog-Kubernetes-nodeName

  • Os arquivos de log kube-proxy e aws-node = que o Container Insights grava estão em locais diferentes. Na configuração do Fluentd, eles estão em /aws/containerinsights/Cluster_Name/application. Na configuração otimizada do Fluent Bit, eles estão em /aws/containerinsights/Cluster_Name/dataplane.

  • A maioria dos metadados, como pod_name e namespace_name são os mesmos no Fluent Bit e no Fluentd, mas os seguintes são diferentes.

    • A configuração otimizada do Fluent Bit usa docker_id, e o Fluentd usa Docker.container_id.

    • Nenhuma das duas configurações do Fluent Bit usa os metadados a seguir. Eles estão presentes apenas no Fluentd: container_image_id, master_url, namespace_id e namespace_labels.

Configurar o Fluent Bit

Para configurar o Fluent Bit para coletar logs de seus contêineres, siga as etapas em Configuração de início rápido para o Container Insights no Amazon EKS e no Kubernetes ou siga as etapas nesta seção.

Com qualquer dos dois métodos, a função do IAM que está anexada aos nós do cluster deve ter permissões suficientes. Para obter mais informações sobre as permissões necessárias para executar um cluster do Amazon EKS, consultePolíticas, funções, e permissões do Amazon EKS IAM no Manual do usuário do Amazon EKS.

Nas etapas a seguir, você configura o Fluent Bit como um daemonSet para enviar logs ao CloudWatch Logs. Ao concluir esta etapa, o Fluent Bit criará os grupos de log a seguir, caso eles ainda não existam.

Importante

Se você já tiver o Fluentd configurado no Container Insights e o daemonSet do Fluentd não estiver sendo executado conforme o esperado (isso poderá acontecer se você usar o runtime containerd), desinstale-o antes de instalar o Fluent Bit para evitar que o Fluent Bit processe as mensagens de log de erros do Fluentd. Caso contrário, você deverá desinstalar o Fluentd imediatamente após ter instalado o Fluent Bit com êxito. A desinstalação do Fluentd após a instalação do Fluent Bit garante a continuidade do registro em logs durante esse processo de migração. Apenas um dentre o Fluent Bit e o Fluentd é necessário para enviar logs ao CloudWatch Logs.

Nome do grupo de logs Origem do log

/aws/containerinsights/Cluster_Name/application

Todos os arquivos de log em /var/log/containers

/aws/containerinsights/Cluster_Name/host

Logs de /var/log/dmesg, /var/log/secure e /var/log/messages

/aws/containerinsights/Cluster_Name/dataplane

Os logs no /var/log/journal para kubelet.service, kubeproxy.service e docker.service.

Para instalar o Fluent Bit para enviar logs de contêineres ao CloudWatch Logs
  1. Se você ainda não tem um namespace chamado amazon-cloudwatch, crie um inserindo este comando:

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
  2. Execute o comando a seguir para criar um ConfigMap chamado cluster-info com o nome do cluster e a região para enviar logs. Substitua cluster-name e cluster-region pelo nome e pela região de seu cluster.

    ClusterName=cluster-name RegionName=cluster-region FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On' kubectl create configmap fluent-bit-cluster-info \ --from-literal=cluster.name=${ClusterName} \ --from-literal=http.server=${FluentBitHttpServer} \ --from-literal=http.port=${FluentBitHttpPort} \ --from-literal=read.head=${FluentBitReadFromHead} \ --from-literal=read.tail=${FluentBitReadFromTail} \ --from-literal=logs.region=${RegionName} -n amazon-cloudwatch

    Neste comando, o FluentBitHttpServer para monitorar métricas de plugin é ativado por padrão. Para desativá-lo, altere a terceira linha no comando para FluentBitHttpPort='' (string vazia) no comando.

    Também por padrão, o Fluent Bit lê arquivos de log a partir do final e capturará somente novos logs depois de implantado. Caso queira o oposto, defina FluentBitReadFromHead='On', e ele coletará todos os logs no sistema de arquivos.

  3. Baixe e implante o DaemonSet do Fluent Bit no cluster executando os comandos a seguir.

    • Se você quiser obter a configuração otimizada do Fluent Bit para computadores com o sistema Linux, execute o comando apresentado a seguir.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
    • Se você quiser obter a configuração otimizada do Fluent Bit para computadores com o sistema Windows, execute o comando apresentado a seguir.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-windows.yaml
    • Se você estiver usando computadores com o sistema Linux e desejar uma configuração do Fluent Bit mais semelhante ao Fluentd, execute o comando apresentado a seguir.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-compatible.yaml
    Importante

    Por padrão, a configuração do daemonset do Fluent Bit define o nível de log como INFO, o que pode resultar em maiores custos de ingestão do CloudWatch Logs. Se você quiser reduzir o volume e os custos de ingestão de logs, altere o nível de log para ERROR.

    Para obter mais informações sobre como reduzir o volume de log, consulte (Opcional) Reduzir o volume de log do Fluent Bit.

  4. Valide a implantação inserindo o comando a seguir. Cada nó deve ter um pod chamado fluent-bit-*.

    kubectl get pods -n amazon-cloudwatch

As etapas acima criarão os seguintes recursos no cluster:

  • Uma conta de serviço chamada Fluent-Bit no namespace amazon-cloudwatch. Essa conta de serviço é usada para executar o DaemonSet do Fluent Bit. Para obter mais informações, consulte Gerenciar contas de serviço (em inglês) na Referência do Kubernetes.

  • Uma função do cluster chamada Fluent-Bit-role no namespace amazon-cloudwatch. Essa função do cluster concede permissões get, list e watch em logs de pod para a conta de serviço Fluent-Bit. Para obter mais informações, consulte Visão geral da API (em inglês) na Referência do Kubernetes.

  • Um ConfigMap chamado Fluent-Bit-config no namespace amazon-cloudwatch. Esse ConfigMap contém a configuração a ser usada pelo Fluent Bit. Para obter mais informações, consulte Configurar um pod para usar um ConfigMap na documentação do Kubernetes Tasks.

Se pretende verificar a configuração do Fluent Bit, siga estas etapas.

Verifique a configuração do Fluent Bit
  1. Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

  2. No painel de navegação, escolha Grupos de logs.

  3. Certifique-se de que você está na região na qual implantou o Fluent Bit.

  4. Confira a lista de grupos de logs na região. Você deve ver o seguinte:

    • /aws/containerinsights/Cluster_Name/application

    • /aws/containerinsights/Cluster_Name/host

    • /aws/containerinsights/Cluster_Name/dataplane

  5. Navegue até um desses grupos de log e marque Last Event Time (Hora do último evento) para os fluxos de log. Se for recente em relação à implantação do Fluent Bit, a instalação será verificada.

    Pode haver um pequeno atraso na criação do grupo de logs /dataplane. Isso é normal, pois esses grupos de log só são criados quando o Fluent Bit começa a enviar logs a esse grupo de logs.

Suporte a logs de várias linhas

Para obter informações sobre como usar o Fluent Bit com logs de várias linhas, consulte as seções a seguir da documentação do Fluent Bit:

(Opcional) Reduzir o volume de log do Fluent Bit

Por padrão, enviamos logs de aplicação do Fluent Bit e metadados do Kubernetes ao CloudWatch. Para reduzir o volume de dados que estão sendo enviados ao CloudWatch, você pode impedir que uma ou ambas as fontes de dados sejam enviadas ao CloudWatch. Se você seguiu as etapas desta página para configurar o Fluent Bit, faça o download do arquivo YAML do manifesto do Kubernetes do comando apply de kubectl que você executou anteriormente e modifique-o com suas alterações, que você poderá então reaplicar ao seu cluster. Como alternativa, se você estiver usando o complemento de observabilidade do EKS do Amazon Cloudwatch ou o chart do Helm, consulte (Opcional) Configuração adicional para obter informações sobre como gerenciar a configuração do Fluent Bit usando a configuração avançada do complemento ou o chart do Helm.

Para interromper os logs de aplicação do Fluent Bit, remova a seção a seguir do arquivo Fluent Bit configuration.

[INPUT] Name tail Tag application.* Path /var/log/containers/fluent-bit* Parser docker DB /fluent-bit/state/flb_log.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10

Para remover os metadados do Kubernetes, a fim de que não sejam anexados aos eventos de log que são enviados ao CloudWatch, adicione os filtros a seguir à seção application-log.conf na configuração do Fluent Bit. Substitua <Metadata_1> e os campos semelhantes pelos identificadores de metadados reais.

application-log.conf: | [FILTER] Name nest Match application.* Operation lift Nested_under kubernetes Add_prefix Kube. [FILTER] Name modify Match application.* Remove Kube.<Metadata_1> Remove Kube.<Metadata_2> Remove Kube.<Metadata_3> [FILTER] Name nest Match application.* Operation nest Wildcard Kube.* Nested_under kubernetes Remove_prefix Kube.

Solução de problemas

Caso não veja esses grupos de log e esteja procurando na região correta, confira os logs para os pods do daemonSet do Fluentd para procurar o erro.

Execute o comando a seguir para certificar-se de que o status seja Running.

kubectl get pods -n amazon-cloudwatch

Se os logs tiverem erros relacionados às permissões do IAM, verifique a função do IAM que está anexada aos nós do cluster. Para obter mais informações sobre as permissões necessárias para executar um cluster do Amazon EKS, consultePolíticas, funções, e permissões do Amazon EKS IAM no Manual do usuário do Amazon EKS.

Se o status do pod for CreateContainerConfigError, obtenha o erro exato executando o comando a seguir.

kubectl describe pod pod_name -n amazon-cloudwatch

Painel

É possível criar um painel para monitorar métricas de cada plugin em execução. Você pode visualizar dados para bytes de entrada e saída e para taxas de processamento de registros, bem como erros de saída e taxas de repetição/falha. Para visualizar essas métricas, será necessário instalar o atendente do CloudWatch com a coleção de métricas do Prometheus para clusters do Amazon EKS e do Kubernetes. Consulte Instalar o atendente do CloudWatch com a coleção de métricas do Prometheus em clusters do Amazon EKS e do Kubernetes para obter mais informações sobre como configurar o painel.

nota

Antes de configurar este painel, é necessário configurar as métricas do Container Insights para o Prometheus. Para ter mais informações, consulte Monitoramento de métricas do Container Insights Prometheus.

Para criar um painel para métricas do Prometheus do Fluent Bits
  1. Crie variáveis de ambiente, substituindo os valores à direita nas linhas a seguir para corresponder a sua implantação.

    DASHBOARD_NAME=your_cw_dashboard_name REGION_NAME=your_metric_region_such_as_us-west-1 CLUSTER_NAME=your_kubernetes_cluster_name
  2. Crie o painel executando o comando a seguir.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/fluent-bit/cw_dashboard_fluent_bit.json \ | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --dashboard-body