Configure Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs
Las siguientes secciones le ayudan a implementar Fluent Bit para enviar registros desde contenedores a CloudWatch Logs.
Temas
Diferencias en caso de que ya está usando Fluentd
Si ya está utilizando Fluentd para enviar registros desde contenedores a CloudWatch Logs, lea esta sección para ver las diferencias entre Fluentd y Fluent Bit. Si aún no está utilizando Fluentd con Información de contenedores de, puede saltar a Configuración de Fluent Bit.
Se le proporcionan dos configuraciones predeterminadas para Fluent Bit:
-
Configuración optimizada de Fluent Bit: una configuración alineada con las mejores prácticas de Fluent Bit.
-
Configuración compatible con Fluentd: una configuración que está alineada con el comportamiento de Fluentd tanto como sea posible.
En la siguiente lista se explican detalladamente las diferencias entre Fluentd y cada configuración de Fluent Bit.
-
Diferencias en los nombres de flujo de registro: si utiliza la configuración optimizada de Fluent Bit, los nombres de flujo de registro serán diferentes.
Bajo el título
/aws/containerinsights/Cluster_Name/application
-
La configuración optimizada de Fluent Bit envía registros a
kubernetes-nodeName
-application.var.log.containers.kubernetes-podName
_kubernetes-namespace
_kubernetes-container-name
-kubernetes-containerID
-
Fluentd envía registros a
kubernetes-podName
_kubernetes-namespace
_kubernetes-containerName
_kubernetes-containerID
Bajo el título
/aws/containerinsights/Cluster_Name/host
-
La configuración optimizada de Fluent Bit envía registros a
kubernetes-nodeName
.host-log-file
-
Fluentd envía registros a
host-log-file
-Kubernetes-NodePrivateIp
Bajo el título
/aws/containerinsights/Cluster_Name/dataplane
-
La configuración optimizada de Fluent Bit envía registros a
kubernetes-nodeName
.dataplaneServiceLog
-
Fluentd envía registros a
dataplaneServiceLog
-Kubernetes-nodeName
-
-
Los archivos de registros
kube-proxy
yaws-node
que Información de contenedores de ingresa se encuentran en diferentes ubicaciones. En la configuración de Fluentd, se encuentran en/aws/containerinsights/Cluster_Name/application
. En la configuración optimizada de Fluent Bit, se encuentran en/aws/containerinsights/Cluster_Name/dataplane
. -
La mayoría de los metadatos, como
pod_name
ynamespace_name
son los mismos en Fluent Bit y Fluentd, pero los siguientes son diferentes.-
La configuración optimizada de Fluent Bit utiliza
docker_id
y el uso de FluentdDocker.container_id
. -
Ambas configuraciones de Bit Fluent no utilizan los siguientes metadatos. Están presentes sólo en Fluentd:
container_image_id
,master_url
,namespace_id
, ynamespace_labels
.
-
Configuración de Fluent Bit
Para configurar Fluent Bit para recopilar registros de los contenedores, puede seguir los pasos de Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes o puede seguir los pasos de esta sección.
Con cualquiera de los métodos, el rol de IAM que está adjunto a los nodos del clúster debe tener permisos suficientes. Para obtener más información sobre los permisos necesarios para ejecutar un clúster de Amazon EKS, consulte Amazon EKS IAM Policies, Roles, and Permissions (Permisos, roles y políticas de IAM de Amazon EKS) en la Guía del usuario de Amazon EKS.
En los pasos que se describen a continuación, va a configurar Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs. Cuando se completa este paso, Fluent Bit crea los siguientes grupos de registros si todavía no existen.
importante
Si ya tiene Fluentd configurado en Información de contenedores y el DaemonSet de Fluentd no funciona según lo esperado (esto puede ocurrir si utiliza el tiempo de ejecución containerd
), debe desinstalarlo antes de instalar FluentBit para evitar que Fluentd procese los mensajes de registro de errores de Fluentd. De lo contrario, debe desinstalar Fluentd inmediatamente después de haber instalado FluentBit correctamente. Desinstalar Fluentd después de instalar Fluent Bit garantiza la ontinuidad del registro durante este proceso de migración. Solo se necesita uno de Fluent Bit o Fluentd para enviar registros a registros de CloudWatch.
Nombre de grupo de registro | Fuente de registros |
---|---|
|
Todos los archivos de registros de |
|
Archivos de registros de |
|
Los registros en |
Para instalar Fluent Bit con el fin de enviar registros desde contenedores a CloudWatch Logs
-
Si aún no tiene un espacio de nombres llamado
amazon-cloudwatch
, cree uno con el siguiente 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
-
Ejecute el siguiente comando para crear un ConfigMap denominado
cluster-info
con el nombre del clúster y la Región a la que se enviarán los registros. Sustituyacluster-name
ycluster-region
por el nombre y la Región del clúster.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-cloudwatchEn este comando,
FluentBitHttpServer
para supervisar las métricas del complemento está activado de forma predeterminada. Para desactivarlo, cambie la tercera línea del comando aFluentBitHttpPort=''
(cadena vacía) en el comando.Además, de forma predeterminada, Fluent Bit lee los archivos de registro en cola y capturará solo los registros nuevos después de implementarlos. Si desea lo contrario, establezca
FluentBitReadFromHead='On'
y recopilará todos los registros en el sistema de archivos. -
Descargue e implemente el daemonSet de Fluent Bit en el clúster con uno de los siguientes comandos.
-
Si desea la configuración optimizada de Fluent Bit para computadoras con Linux, ejecute 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/fluent-bit/fluent-bit.yaml
-
Si desea la configuración optimizada de Fluent Bit para computadoras con Windows, ejecute 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/fluent-bit/fluent-bit-windows.yaml
-
Si utiliza computadoras con Linux y desea la configuración de Fluent Bit que sea más similar a Fluentd, ejecute 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/fluent-bit/fluent-bit-compatible.yaml
importante
De forma predeterminada, la configuración daemonset de Fluent Bit establece el nivel de registro en INFO, lo que puede generar mayores costes de ingesta de registros de CloudWatch. Si quiere reducir el volumen y los costes de la ingesta de registros, puede cambiar el nivel de registro a ERROR.
Para obtener más información acerca de cómo reducir el volumen del registro, consulte (Opcional) Reducción del volumen de registros del Fluent Bit
-
-
Especifique el siguiente comando para validar la implementación. Cada nodo debe tener un pod denominado fluent-bit-*.
kubectl get pods -n amazon-cloudwatch
Los pasos anteriores crean los siguientes recursos en el clúster:
-
Una cuenta de servicio denominada
Fluent-Bit
en el espacio de nombresamazon-cloudwatch
. Esta cuenta de servicio se utiliza para ejecutar el DaemonSet de FluentD. Para obtener más información, consulte Managing Service Accountsen la documentación de Kubernetes. -
Un rol de clúster denominado
Fluent-Bit-role
en el espacio de nombresamazon-cloudwatch
. Este rol de clúster concede los permisosget
,list
ywatch
para los registros de los pods a la cuenta de servicioFluent-Bit
. Para obtener información, consulte API Overviewen la documentación de Kubernetes. -
Un ConfigMap denominado
Fluent-Bit-config
en el espacio de nombresamazon-cloudwatch
. Este ConfigMap contiene la configuración que va a utilizar Fluent Bit. Para obtener más información, consulte Configure a Pod to Use a ConfigMapen la documentación de tareas de Kubernetes.
Si desea verificar la configuración de Fluent Bit, siga estos pasos.
Verifique la configuración de Fluent Bit
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. -
En el panel de navegación, seleccione Grupos de registro.
-
Asegúrese de que está en la Región donde ha implementado Fluent Bit.
-
Verifique la lista de los grupos de registros de la Región. Debería ver lo siguiente:
-
/aws/containerinsights/
Cluster_Name
/application -
/aws/containerinsights/
Cluster_Name
/host -
/aws/containerinsights/
Cluster_Name
/dataplane
-
-
Desplácese a uno de estos grupos de registro y verifique la Last Event Time (Hora del último evento) para los flujos de registro. Si es reciente en relación con el momento en el que implementó Fluent Bit, se verifica la configuración.
Puede haber un ligero retraso en la creación del grupo de registro de
/dataplane
. Esto es normal, ya que estos grupos de registro sólo se crean cuando el Fluent Bit comienza a enviar registros para ese grupo de registros.
Compatibilidad con registros de varias líneas
Para obtener información sobre cómo usar Fluent Bit con registros de varias líneas, consulte las siguientes secciones de la documentación de Fluent Bit:
(Opcional) Reducción del volumen de registros del Fluent Bit
De forma predeterminada, se envían registros de aplicaciones de Fluent Bit y metadatos de Kubernetes a CloudWatch. Si desea reducir el volumen de datos que se envía a CloudWatch, puede detener el envío de uno o ambos de estos orígenes de datos a CloudWatch. Si siguió los pasos de esta página para configurar Fluent Bit, descargue el archivo YAML del manifiesto de Kubernetes desde el comando kubectl apply
que ejecutó anteriormente y modifíquelo con sus cambios, los cuales podrá volver a aplicar en su clúster. Como alternativa, si utiliza el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm, consulte Configuraciones adicionales (Opcional) para acceder a información sobre la administración de la configuración de Fluent Bit con la configuración avanzada del complemento o el gráfico de Helm.
Para detener los registros de aplicaciones de Fluent Bit, elimine la siguiente sección del archivo 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 evitar que los metadatos de Kubernetes se agreguen a los eventos de registro que se envían a CloudWatch, incluya los siguientes filtros en la sección application-log.conf
en la configuración de Fluent Bit. Sustituya <Metadata_1>
y los campos similares por los identificadores de metadatos reales.
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.
Resolución de problemas
Si no ve estos grupos de registros y está mirando en la Región correcta, verifique los registros de los pods del DaemonSet de Fluent Bit para buscar el error.
Ejecute el siguiente comando y asegúrese de que el estado es Running
.
kubectl get pods -n amazon-cloudwatch
Si los registros tienen errores relacionados con los permisos de IAM, consulte el rol de IAM que está adjunto a los nodos del clúster. Para obtener más información sobre los permisos necesarios para ejecutar un clúster de Amazon EKS, consulte Amazon EKS IAM Policies, Roles, and Permissions (Permisos, roles y políticas de IAM de Amazon EKS) en la Guía del usuario de Amazon EKS.
Si el estado del pod es CreateContainerConfigError
, obtenga el error exacto ejecutando el siguiente comando.
kubectl describe pod pod_name -n amazon-cloudwatch
Panel de control
Puede crearse un panel para supervisar las métricas de cada complemento en ejecución. Puede ver los datos de los bytes de entrada y salida y de las tasas de procesamiento de registros, así como los errores de salida y las tasas de intento y error. Para visualizar estas métricas, se deberá instalar el agente de CloudWatch con la colección de métricas de Prometheus para los clústeres de Amazon EKS y de Kubernetes. Para obtener más información acerca de cómo se configuran estos paneles, consulte Instale el agente de CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes.
nota
Antes de configurar este panel, debe configurar Información de contenedores de para las métricas de Prometheus. Para obtener más información, consulte Supervisión de métricas de Información de contenedores de Prometheus.
Para crear un panel para las métricas de Prometheus de Fluent Bit
-
Cree variables de entorno, mediante el reemplazo de los valores de la derecha en las siguientes líneas para que concuerden con la implementación.
DASHBOARD_NAME=
your_cw_dashboard_name
REGION_NAME=your_metric_region_such_as_us-west-1
CLUSTER_NAME=your_kubernetes_cluster_name
-
Ejecute el siguiente comando para crear el panel.
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