

# Configurar o Fluent Bit como um DaemonSet para enviar logs ao CloudWatch Logs
<a name="Container-Insights-setup-logs-FluentBit"></a>

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

**Topics**
+ [Configurar o Fluent Bit](#Container-Insights-FluentBit-setup)
+ [Suporte a logs de várias linhas](#ContainerInsights-fluentbit-multiline)
+ [(Opcional) Reduzir o volume de log do Fluent Bit](#ContainerInsights-fluentbit-volume)
+ [Solução de problemas](#Container-Insights-FluentBit-troubleshoot)
+ [Painel](#Container-Insights-FluentBit-dashboard)

## Configurar o Fluent Bit
<a name="Container-Insights-FluentBit-setup"></a>

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](Container-Insights-setup-EKS-quickstart.md) 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, consulte[Políticas, funções, e permissões do Amazon EKS IAM](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) 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
   ```

1. 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.

1. 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](#ContainerInsights-fluentbit-volume).

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

   ```
   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](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/) (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](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#api-overview/) (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](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-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/](https://console.aws.amazon.com/cloudwatch/).

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

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

1. 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`

1. 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
<a name="ContainerInsights-fluentbit-multiline"></a>

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:
+ [Análise de várias linhas](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing)
+ [Várias linhas e contêineres (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-and-containers-v1.8)
+ [Núcleo de várias linhas (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-core-v1.8)
+ [Sempre use várias linhas multilinha na entrada final](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#always-use-multiline-the-tail-input)

## (Opcional) Reduzir o volume de log do Fluent Bit
<a name="ContainerInsights-fluentbit-volume"></a>

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](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) 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\$11>* 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
<a name="Container-Insights-FluentBit-troubleshoot"></a>

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, consulte[Políticas, funções, e permissões do Amazon EKS IAM](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) 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
<a name="Container-Insights-FluentBit-dashboard"></a>

É 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 para obter mais informações sobre como configurar o painel [Instalar o atendente do CloudWatch com a coleção de métricas do Prometheus em clusters do Amazon EKS e do KubernetesInstalar o atendente do CloudWatch com a coleção de métricas do Prometheus em clusters do Amazon EKS e do Kubernetes](ContainerInsights-Prometheus-Setup.md).

**nota**  
Antes de configurar este painel, é necessário configurar as métricas do Container Insights para o Prometheus. Para obter mais informações, consulte [Monitoramento de métricas do Container Insights Prometheus](ContainerInsights-Prometheus.md).

**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
   ```

1. 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
   ```