Quiero solucionar problemas de configuración al integrar Fluent Bit con Información de contenedores de Amazon CloudWatch para Amazon Elastic Kubernetes Service (Amazon EKS).
Descripción breve
Nota: Se recomienda usar Fluent Bit en lugar de Fluentd. Para obtener más información, consulte Envíe los registros a CloudWatch Logs.
Para permitir que Fluent Bit entregue registros de contenedores a CloudWatch Logs, debe conceder permisos de AWS Identity and Access Management (IAM) a Fluent Bit. Para más información, consulte Verificar los requisitos previos.
Para usar Container Insights con Fluent Bit, configure un rol de IAM para la cuenta de servicio (IRSA) y, a continuación, implemente Container Insights en su clúster de EKS.
Resolución
Configurar Container Insights con Fluent Bit
Utilice la política administrada de AWS CloudWatchAgentServerPolicy para crear una cuenta de servicio de cloudwatch-agent y fluent-bit.
Siga estos pasos:
-
Ejecute los siguientes comandos para configurar las variables de entorno:
export CLUSTER=clustername
export AWS_REGION=awsregion
Nota: Sustituya clustername y awsregion por su propio nombre de clúster y región de AWS.
-
Ejecute el siguiente comando eksctl para crear una cuenta de servicio de CloudWatch-Agent con IRSA:
eksctl create iamserviceaccount \
--name cloudwatch-agent \
--namespace amazon-cloudwatch \
--cluster $CLUSTER \
--attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
--approve \
--override-existing-serviceaccounts
-
Ejecute el siguiente comando eksctl para crear la cuenta de servicio Fluent Bit con IRSA:
eksctl create iamserviceaccount \
--name fluent-bit \
--namespace amazon-cloudwatch \
--cluster $CLUSTER \
--attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
--approve \
--override-existing-serviceaccounts
-
Para usar el inicio rápido para implementar Container Insights, 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-enhanced.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 my-cluster-name y my-cluster-region por su propio nombre de clúster y región. El comando anterior crea ClusterRole, ClusterRoleBinding, ConfigMap y DaemonSet para el agente de CloudWatch y Fluent Bit.
-
Ejecute el siguiente comando para validar que el agente de CloudWatch y Fluent Bit se implementen:
kubectl get pods -n amazon-cloudwatch
Cuando se completa la implementación, el agente de CloudWatch crea el grupo de registros /aws/containerinsights/Cluster_Name/performance.
Fluent Bit crea los grupos de registros /aws/containerinsights/Cluster_Name/application, /aws/containerinsights/Cluster_Name/host y /aws/containerinsights/Cluster_Name/dataplane.
Solucionar problemas de configuración de Fluent Bit
Los pods de Fluent Bit se bloquean
Para comprobar si hay mensajes de error en los registros del pod de Fluent Bit, siga estos pasos:
-
Ejecute los siguientes comandos para buscar eventos de 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
-
Comprueba que cluster-info sea correcto y no tenga errores de sintaxis.
-
Compruebe que todos los valores de nombre y región del clúster estén configurados. 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
Complete los siguientes pasos para solucionar el problema:
-
Verifique que el complemento de salida esté configurado correctamente en el archivo de configuración de Fluent Bit. Para comprobar si hay algún error de envío de datos, ejecute el siguiente comando para ver los registros del pod de Fluent Bit:
kubectl -n amazon-cloudwatch logs fluent_pod_name
-
Asegúrese de que los pods de Fluent Bit tengan los permisos de IAM necesarios para crear grupos de registros y transmitir los registros a CloudWatch. Debe tener la política de IAM de CloudWatchAgentServerPolicy adjunta a la función de IAM anotada en la cuenta de servicio de fluent-bit.
Si usó IRSA, debe adjuntar la función de IAM a los nodos de trabajo. Para obtener más información, consulte ¿Cómo puedo solucionar los errores de IRSA en Amazon EKS?
Si no ve los registros de una aplicación concreta, confirme que la aplicación se puede ejecutar. A continuación, confirme si la aplicación puede generar otros tipos de registros. Si la aplicación se ejecuta y se generan registros, compruebe los registros del pod de fluent-bit para ver si se envían errores específicos a CloudWatch.
Los pods de Fluent Bit están atascados en el estado CreateContainerConfigError
Ejecute el siguiente comando para obtener el mensaje de error exacto:
kubectl describe pod pod_name -n amazon-cloudwatch
En la sección Eventos de la salida del comando, busque un mensaje de error como el siguiente:
Error syncing pod ("fluent-bit-xxxxxxx"), skipping: failed to "StartContainer" with CreateContainerConfigError: "configmap \"fluent-bit-config\" not found"
Si ve el mensaje de error anterior, significa que falta el ConfigMap para Fluent Bit (fluent-bit-config). Repita el paso 4 de la sección Configurar Container Insights con Fluent Bit de este artículo.
Información relacionada
Configuración del agente de CloudWatch para recopilar las métricas del clúster
Inicio rápido con el operador del agente de CloudWatch y Fluent Bit
Activate debug logging en el sitio web de GitHub