¿Cómo soluciono los problemas de configuración al integrar Fluent Bit con Información de contenedores para Amazon EKS?

5 minutos de lectura
0

Quiero solucionar los problemas de configuración al integrar Fluent Bit con Información de contenedores para Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

Fluent Bit es un procesador y reenviador de registros ligero que se utiliza para recopilar registros de contenedores en Amazon CloudWatch.

Se recomienda utilizar Fluent Bit en lugar de Fluentd (un programa antiguo de código abierto) debido a su bajo consumo de recursos y a la función Use_Kubelet. Para obtener más información, consulte Habilitar la característica Use_Kubelet para clústeres grandes.

Para permitir que Fluent Bit entregue registros de contenedores a Registros de Amazon CloudWatch, debe conceder permisos de AWS Identity and Access Management (IAM) a Fluent Bit. Con Amazon EKS, hay dos formas de conceder permisos de IAM:

  • Adjunte una política al rol de IAM de sus nodos de trabajo.
  • Utilice un rol de cuenta de servicio de IAM.

Si concede permisos de IAM a Fluent Bit, Fluent Bit podrá realizar las siguientes acciones:

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

Los problemas comunes incluyen:

  • Bloqueos de los pods de Fluent Bit.
  • Fluent Bit no envía registros a CloudWatch.
  • Los pods de Fluent Bit devuelven el error CreateContainerConfigError.

Resolución

Configurar un rol de IAM para la cuenta de servicio

Cree un rol de IAM para la cuenta de servicio cloudwatch-agent del espacio de nombres amazon-cloudwatch con la política administrada de AWS CloudWatchAgentServerPolicy.

1.    Ejecute los siguientes comandos para configurar las variables de entorno:

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

Nota: Sustituya “clustername”, “awsregion” y “awsaccountid” (incluidas las comillas) por su propio nombre de clúster, región de AWS e ID de cuenta.

2.    Ejecute el siguiente 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 obtener más información sobre los requisitos previos de Información de contenedores, consulte Verificación de los requisitos previos.

Configurar el agente de CloudWatch para recopilar las métricas del clúster y activar Información de contenedores

1.    Para implementar Información de contenedores mediante el inicio rápido, ejecute el siguiente 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 -

Nota: Sustituya “mycluster-name” y “my-cluster-region” (incluidas las comillas) por su propio nombre de clúster y región de AWS.

El comando anterior crea un espacio de nombres, ClusterRole, ClusterRoleBinding y ConfigMap para el agente de CloudWatch y Fluent Bit.

2.    Después de ejecutar ese comando, ejecute el siguiente comando para crear la cuenta de servicio de 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.    Ejecute el siguiente comando para validar la implementación del agente de CloudWatch:

kubectl get pods -n amazon-cloudwatch

4.    Cuando haya terminado, el agente de CloudWatch crea el grupo de registro /aws/containerinsights/cluster_name/performance. A continuación, el agente de CloudWatch envía los eventos del registro de rendimiento al grupo de registros.

Solución de problemas

Bloqueos de los pods de Fluent Bit

1.    Compruebe si hay mensajes de error en los registros de los pods de Fluent Bit. Ejecute estos comandos para buscar eventos en los pods de Fluent Bit:

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

kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name

2.    Compruebe que cluster-info (el archivo de configuración de Fluent Bit almacenado en ConfigMap) sea preciso y no contenga errores de sintaxis. Asegúrese de que todos los valores del nombre del clúster y de la región estén establecidos. Para obtener más información, consulte amazon-cloudwatch-container-insights en el sitio web de GitHub.

Fluent Bit no envía registros a CloudWatch

1.    Compruebe que el complemento de salida esté configurado correctamente en el archivo de configuración de Fluent Bit. Para comprobar si hay algún error en el envío de datos, utilice el siguiente comando para comprobar los registros del pod de Fluent Bit:

kubectl -n amazon-cloudwatch logs fluent_pod_name

2.    Asegúrese de que los pods de Fluent Bit tengan los permisos de IAM necesarios para transmitir los registros a CloudWatch. Sus nodos de trabajo de Amazon EKS envían métricas y registros a CloudWatch en virtud de la política de CloudWatchAgentServerPolicy que aplica IAM. Hay dos formas de conceder los permisos de IAM necesarios:

  • Agregue una política a los roles de IAM de los nodos de trabajo.
  • Cree un rol de IAM para las cuentas de servicio del clúster y agregue la política.

Consulte la sección Set up an IAM role for service account (Configurar un rol de IAM para la cuenta de servicio) para obtener más información.

Los pods de Fluent Bit están bloqueados en CreateContainerConfigError

Si el estado del pod es CreateContainerConfigError, ejecute el siguiente comando para obtener el mensaje de error exacto:

kubectl describe pod pod_name -n amazon-cloudwatch

En la sección Events (Eventos) del resultado del comando, busque un mensaje de error como el siguiente:

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

Si ve este mensaje de error, es probable que no haya creado el ConfigMap para Fluent Bit (fluent-bit-config). Vuelva a seguir los pasos de instalación para asegurarse de crear el ConfigMap.


Información relacionada

Configuración del agente de CloudWatch para recopilar las métricas del clúster

Inicio rápido con el agente de CloudWatch y Kubernetes

Enable debug logging (GitHub website) (Habilitar el registro de depuración [sitio web de GitHub])

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año