Como solucionar problemas de configuração ao integrar o Fluent Bit com o Container Insights para Amazon EKS?

5 minuto de leitura
0

Quero solucionar problemas de configuração ao integrar o Fluent Bit com o Container Insights para Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

O Fluent Bit é um processador e encaminhador de logs leve que você usa para coletar logs de contêineres no Amazon CloudWatch.

É uma boa prática usar o Fluent Bit em vez do Fluentd (um programa de código aberto legado) devido ao baixo consumo de recursos e ao recurso Use_Kubelet. Para obter mais informações, consulte Ativar o recurso Use_Kubelet para clusters grandes.

Para permitir que o Fluent Bit entregue logs de contêineres ao Amazon CloudWatch Logs, você deve conceder permissões do AWS Identity and Access Management (IAM) ao Fluent Bit. Com o Amazon EKS, há duas maneiras de conceder permissões do IAM:

  • Anexar uma política ao perfil do IAM dos seus nós de processamento.
  • Usar uma função de conta de serviço do IAM.

Se você conceder permissões do IAM ao Fluent Bit, este poderá realizar as seguintes ações:

  • logs:DescribeLogGroups
  • logs:DescribeLogStreams
  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:PutLogEvents

Problemas comuns incluem:

  • Os pods do Fluent Bit falham.
  • O Fluent Bit não envia logs ao CloudWatch.
  • Os pods do Fluent Bit retornam CreateContainerConfigError.

Resolução

Configurar um perfil do IAM para a conta de serviço

Crie um perfil do IAM para a conta de serviço cloudwatch-agent para o namespace amazon-cloudwatch com a política gerenciada da AWS CloudWatchAgentServerPolicy.

1.    Execute os seguintes comandos para configurar variáveis de ambiente:

export CLUSTER="clustername"
export AWS_REGION="awsregion"
export AWS_ACCOUNT="awsaccountid"

Observação: substitua “clustername”, “awsregion” e “awsaccountid” (incluindo as aspas) pelo seu próprio nome de cluster, região da AWS e ID da conta.

2.    Execute o seguinte comando eksctl:

eksctl create iamserviceaccount \
    --name cloudwatch-agent \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

Para obter mais informações sobre os pré-requisitos do Container Insights, consulte Verificar pré-requisitos.

Configurar o agente CloudWatch para coletar métricas de cluster e ativar o Container Insights

1.    Para implantar o Container Insights usando o início rápido, execute o seguinte comando:

ClusterName="my-cluster-name"
RegionName="my-cluster-region"
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
[[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
[[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || 
FluentBitHttpServer='On'
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-
container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-
monitoring/quickstart/cwagent-fluent-bit-quickstart.yaml | sed 's/
{{cluster_name}}/'${ClusterName}'/;s/
{{region_name}}/'${RegionName}'/;s/
{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/
{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/
{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/
{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

Observação: substitua “my-cluster-name” e “my-cluster-region” (incluindo as aspas) pelo seu próprio nome de cluster e região da AWS.

O comando anterior cria um namespace, ClusterRole, ClusterRoleBinding e ConfigMap para o agente CloudWatch e o Fluent Bit.

2.    Depois que esse comando for executado, execute o seguinte comando para criar a conta de serviço Fluent Bit:

eksctl create iamserviceaccount \
    --name fluent-bit \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

3.    Execute o comando a seguir para validar a implantação do agente do CloudWatch:

kubectl get pods -n amazon-cloudwatch

4.    Quando terminar, o agente do CloudWatch criará o grupo de logs /aws/containerinsights/Cluster_Name/performance. Em seguida, o agente do CloudWatch enviará os eventos de log de performance ao grupo de logs.

Solução de problemas

Os pods do Fluent Bit falham

1.    Verifique se há mensagens de erro nos logs de pods do Fluent Bit. Execute estes comandos para procurar eventos nos pods do Fluent Bit:

kubectl -n amazon-cloudwatch logs -l k8s-app=fluent-bit 

kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name

2.    Verifique se cluster-info (o arquivo de configuração do Fluent Bit armazenado em ConfigMap) está preciso e não tem erros de sintaxe. Certifique-se de que todos os valores do nome do cluster e da região estejam definidos. Para obter mais informações, consulte amazon-cloudwatch-container-insights no site do GitHub.

O Fluent Bit não envia logs ao CloudWatch

1.    Verifique se o plug-in de saída está configurado corretamente no arquivo de configuração do Fluent Bit. Para verificar se há algum erro de envio de dados, use o comando a seguir para verificar os logs de pods do Fluent Bit:

kubectl -n amazon-cloudwatch logs fluent_pod_name

2.    Certifique-se de que os pods do Fluent Bit tenham as permissões do IAM necessárias para transmitir logs ao CloudWatch. Seus nós de processamento do Amazon EKS enviam métricas e logs ao CloudWatch por causa da CloudWatchAgentServerPolicy aplicada pelo IAM. Há duas maneiras de conceder as permissões necessárias do IAM:

  • Adicione uma política aos perfis do IAM dos nós de processamento.
  • Crie um perfil do IAM para as contas de serviço do cluster e associe a política a ele.

Consulte a seção Configurar um perfil do IAM para a conta de serviço para obter mais informações.

Os pods do Fluent Bit estão presos em CreateContainerConfigError

Se o status dos pods for CreateContainerConfigError, execute o seguinte comando para obter a mensagem de erro exata:

kubectl describe pod pod_name -n amazon-cloudwatch

Na seção Events (Eventos) da saída do comando, procure uma mensagem de erro como a seguinte:

Error syncing pod ("fluent-bit-xxxxxxx"), skipping: failed to "StartContainer" with CreateContain
erConfigError: "configmap \"fluent-bit-config\" not found"

Se você vir essa mensagem de erro, é provável que não tenha criado o ConfigMap para o Fluent Bit (fluent-bit-config). Siga as etapas de instalação novamente para ter certeza de criar o ConfigMap.


Informações relacionadas

Configurar o agente do CloudWatch para coletar métricas de cluster

Início rápido com o agente do CloudWatch e o Fluent Bit

Habilitar o registro de depuração (site do GitHub)

AWS OFICIAL
AWS OFICIALAtualizada há um ano