Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
Inicio del registro de AWS Fargate para un clúster
importante
AWS Fargate con Amazon EKS no está disponible en AWS GovCloud (Este de EE. UU.) y AWS GovCloud (Oeste de EE. UU.).
Amazon EKS en Fargate ofrece un enrutador de registros integrado basado en Fluent Bit. Esto significa que no ejecuta explícitamente un contenedor de Fluent Bit como archivo sidecar, sino que Amazon lo ejecuta por usted. Todo lo que tiene que hacer es configurar el enrutador de registros. La configuración se realiza a través de un ConfigMap
dedicado que debe cumplir los siguientes criterios:
-
Tener un
aws-logging
con nombre. -
Haber sido creado en un espacio de nombres dedicado llamado
aws-observability
. -
No puede superar los 5300 caracteres.
Una vez que haya creado ConfigMap
, Amazon EKS en Fargate lo detecta automáticamente y configura el enrutador de registros con él. Fargate utiliza una versión de AWS para Fluent Bit, una distribución conforme del cliente al servidor de Fluent Bit administrada por AWS. Para obtener más información, consulte AWS para Fluent Bit
El enrutador de registros le permite utilizar la amplia gama de servicios de AWS para el análisis y el almacenamiento de registros. Puede transmitir registros desde Fargate directamente a Amazon CloudWatch, Amazon OpenSearch Service. También puede transmitir registros a destinos como Amazon S3
Requisitos previos
-
Un perfil de Fargate existente que especifica un espacio de nombres de Kubernetes existente en el que se implementan Pods de Fargate. Para obtener más información, consulte Paso 3: cree un perfil de Fargate para el clúster.
-
Un rol de ejecución de Pod de Fargate existente. Para obtener más información, consulte Paso 2: cree un rol de ejecución de Pod de Fargate.
Configuración del enrutador de registros
Configurar el enrutador de registros
En los pasos siguientes, reemplace cada
por valores propios.example value
-
Cree un espacio de nombres Kubernetes dedicado denominado
aws-observability
.-
Guarde el siguiente contenido en un archivo llamado
en el equipo. El valor deaws-observability-namespace
.yamlname
debe seraws-observability
y la etiquetaaws-observability: enabled
es obligatoria.kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
-
Cree el espacio de nombres.
kubectl apply -f
aws-observability-namespace
.yaml
-
-
Cree un
ConfigMap
con un valor de datos deFluent Conf
para enviar los registros de contenedores a un destino.. Fluent Conf es Fluent Bit, que es un lenguaje de configuración del procesador de registros rápido y ligero que se utiliza para dirigir los registros del contenedor a un destino de registro de su elección. Para obtener más información, consulte Archivo de configuraciónen la documentación de Fluent Bit. importante
En un
Fluent Conf
típico, las secciones principales incluidas sonService
,Input
,Filter
yOutput
. Sin embargo, el enrutador de registros de Fargate solo acepta:-
Las secciones
Filter
yOutput
. -
Una sección
Parser
.
Si proporciona otras secciones, se rechazarán.
El enrutador de registros de Fargate administra las secciones
Service
eInput
. Tiene la siguiente secciónInput
, la cual no se puede modificar y no es necesaria en suConfigMap
. Sin embargo, puede obtener información a partir de ella, como el límite del búfer de memoria y la etiqueta aplicada a los registros.[INPUT] Name tail Buffer_Max_Size 66KB DB /var/log/flb_kube.db Mem_Buf_Limit 45MB Path /var/log/containers/*.log Read_From_Head On Refresh_Interval 10 Rotate_Wait 30 Skip_Long_Lines On Tag kube.*
Al crear el
ConfigMap
, debe tener en cuenta las siguientes reglas que Fargate utiliza para validar campos:-
Se supone que
[FILTER]
,[OUTPUT]
y[PARSER]
deben especificarse en cada clave correspondiente. Por ejemplo,[FILTER]
debe estar enfilters.conf
. Puede tener uno o más[FILTER]
enfilters.conf
. Las secciones[OUTPUT]
y[PARSER]
también deben estar en sus claves correspondientes. Mediante la especificación de varias secciones[OUTPUT]
, puede dirigir sus registros a diferentes destinos al mismo tiempo. -
Fargate valida las claves requeridas para cada sección.
Name
ymatch
son necesarias para cada[FILTER]
y[OUTPUT]
.Name
yformat
son necesarias para cada[PARSER]
. Las claves distinguen entre mayúsculas y minúsculas. -
Las variables de entorno como
${ENV_VAR}
no se permiten enConfigMap
. -
La sangría tiene que ser la misma para la política o el par clave-valor dentro de cada
filters.conf
,output.conf
yparsers.conf
. Los pares clave-valor deben tener más sangría que las políticas. -
Fargate valida con los siguientes filtros compatibles:
grep
,parser
,record_modifier
,rewrite_tag
,throttle
,nest
,modify
ykubernetes
. -
Fargate verifica las siguientes salidas compatibles:
es
,firehose
,kinesis_firehose
,cloudwatch
,cloudwatch_logs
ykinesis
. -
Tiene que proporcionarse al menos un complemento de
Output
compatible en elConfigMap
a fin de habilitar el registro.Filter
yParser
no son necesarios para habilitar el registro.
También puede ejecutar Fluent Bit en Amazon EC2 con la configuración deseada para solucionar cualquier problema que surja de la validación. Cree su
ConfigMap
con uno de los siguientes ejemplos.importante
El registro de Fargate de Amazon EKS no admite la configuración dinámica del
ConfigMaps
. Cualquier cambio enConfigMaps
solo se aplica a los Pods nuevos. Los cambios no se aplican a los Pods existentes.Cree un
ConfigMap
con el ejemplo para el destino de registro deseado.nota
También puede utilizar Amazon Kinesis Data Streams como destino para su registro. Si usa Kinesis Data Streams, asegúrese de que la función de ejecución del pod tenga otorgado el permiso
kinesis:PutRecords
. Para obtener más información, consulte Permisosde Amazon Kinesis Data Streams en Fluent Bit: Manual oficial. -
-
Cree una política de IAM a partir del archivo de política que descargó en el paso anterior.
aws iam create-policy --policy-name
eks-fargate-logging-policy
--policy-document file://permissions.json -
Adjunte la política de IAM al rol de ejecución de pods especificado para el perfil de Fargate con el siguiente comando. Reemplace
por su ID de cuenta. Reemplace111122223333
por el rol de ejecución de Pod (para obtener más información, consulte Paso 2: cree un rol de ejecución de Pod de Fargate).AmazonEKSFargatePodExecutionRole
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy
\ --role-nameAmazonEKSFargatePodExecutionRole
Compatibilidad de filtro de Kubernetes
Esta característica requiere la siguiente versión mínima de Kubernetes y nivel de plataforma, o posterior.
Versión de Kubernetes | Nivel de plataforma |
---|---|
1.23 y posterior | eks.1 |
El filtro Fluent Bit Kubernetes le permite agregar metadatos de Kubernetes a los archivos de registro. Para obtener más información acerca del filtro, consulte Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL
300
s
importante
-
Kube_URL
,Kube_CA_File
,Kube_Token_Command
yKube_Token_File
son parámetros de configuración propiedad del servicio y no deben especificarse. Amazon EKS Fargate completa estos valores. -
Kube_Meta_Cache_TTL
es el tiempo que Fluent Bit espera hasta que se comunica con el servidor de la API para obtener los metadatos más recientes. SiKube_Meta_Cache_TTL
no se especifica, Amazon EKS Fargate agrega un valor predeterminado de 30 minutos para reducir la carga en el servidor de la API.
Para enviar registros de procesos de Fluent Bit a su cuenta
Puede enviar opcionalmente registros de procesos de Fluent Bit a Amazon CloudWatch mediante el siguiente ConfigMap
. El envío de registros de procesos de Fluent Bit a CloudWatch requiere costos adicionales de ingesta y almacenamiento de registros. Reemplace
por la Región de AWS en la que se encuentra el clúster.region-code
kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: # Configuration files: server, input, filters and output # ====================================================== flb_log_cw: "true" # Ships Fluent Bit process logs to CloudWatch. output.conf: | [OUTPUT] Name cloudwatch Match kube.* region
region-code
log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
Los registros se encuentran en la Región de AWS en la que reside el clúster en CloudWatch. El nombre del grupo de registros es
y el nombre del flujo de registros de Fluent Bit es my-cluster
-fluent-bit-logsfluent-bit-
.podname
-pod-namespace
nota
-
Los registros de proceso se envían solo cuando el proceso de Fluent Bit se inicia de forma correcta. Si se produce un error al iniciar Fluent Bit, se pierden los registros del proceso. Solo puede enviar los registros del proceso a CloudWatch.
-
Para depurar los registros del proceso de envío en la cuenta, puede aplicar el
ConfigMap
anterior para obtener los registros del proceso. El hecho de que Fluent Bit no pueda iniciar suele deberse a que suConfigMap
no ha sido analizado ni aceptado por Fluent Bit durante el inicio.
Para detener el envío de registros de procesos de Fluent Bit
El envío de registros de procesos de Fluent Bit a CloudWatch requiere costos adicionales de ingesta y almacenamiento de registros. Para excluir los registros de procesos de una configuración de ConfigMap
existente, siga estos pasos.
-
Busque el grupo de registros de CloudWatch creado automáticamente para los registros de procesos de Fluent Bit del clúster de Amazon EKS después de habilitar el registro de Fargate. Sigue el formato
{cluster_name}-fluent-bit-logs
. -
Elimine los flujos de registro de CloudWatch existentes creados para los registros de procesos de cada Pod's en el grupo de registros de CloudWatch.
-
Edite el
ConfigMap
y configureflb_log_cw: "false"
. -
Reinicie todos los Pods existentes en el clúster.
Probar la aplicación
-
Implemente un Pod de ejemplo.
-
Guarde el siguiente contenido en un archivo llamado
en el equipo.sample-app
.yamlapiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace:
same-namespace-as-your-fargate-profile
spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80 -
Aplique el manifiesto al clúster.
kubectl apply -f
sample-app
.yaml
-
-
Vea los registros NGINX con los destinos que configuró en el
ConfigMap
.
Consideraciones sobre el tamaño
Le sugerimos que planee utilizar hasta 50 MB de memoria para el enrutador de registros. Si anticipa que su aplicación generará registros con un rendimiento muy alto, entonces debe planificar utilizar hasta 100 MB.
Resolución de problemas
Para confirmar si la característica de registro está habilitada o deshabilitada por algún motivo, como un ConfigMap
que no es válido y desea saber por qué no es válido, verifique los eventos de Pod con
. La salida puede incluir eventos del Pod que aclaran si el registro está habilitado o no, como la siguiente salida de ejemplo.kubectl describe pod
pod_name
[...]
Annotations: CapacityProvisioned: 0.25vCPU 0.5GB
Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND
kubernetes.io/psp: eks.privileged
[...]
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found
Los eventos de Pod son efímeros con un periodo de tiempo en función de la configuración. También puede ver los comentarios de un Pod's con
. En el comentario del Pod, hay información sobre si la característica de registro está habilitada o deshabilitada y el motivo.kubectl describe pod
pod-name