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.
Tópicos
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
eaws-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
enamespace_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 usaDocker.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
enamespace_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 |
---|---|
|
Todos os arquivos de log em |
|
Logs de |
|
Os logs no |
Para instalar o Fluent Bit para enviar logs de contêineres ao CloudWatch Logs
-
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
-
Execute o comando a seguir para criar um ConfigMap chamado
cluster-info
com o nome do cluster e a região para enviar logs. Substituacluster-name
ecluster-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-cloudwatchNeste comando, o
FluentBitHttpServer
para monitorar métricas de plugin é ativado por padrão. Para desativá-lo, altere a terceira linha no comando paraFluentBitHttpPort=''
(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. -
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.
-
-
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 namespaceamazon-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 namespaceamazon-cloudwatch
. Essa função do cluster concede permissõesget
,list
ewatch
em logs de pod para a conta de serviçoFluent-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 namespaceamazon-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 ConfigMapna documentação do Kubernetes Tasks.
Se pretende verificar a configuração do Fluent Bit, siga estas etapas.
Verifique a configuração do Fluent Bit
Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/
. -
No painel de navegação, escolha Grupos de logs.
-
Certifique-se de que você está na região na qual implantou o Fluent Bit.
-
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
-
-
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
-
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
-
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