Ayude a mejorar esta página
Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.
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. 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 el 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
-
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: creación de un perfil de Fargate para el clúster.
-
Un rol de ejecución de pods de Fargate existente. Para obtener más información, consulte Paso 2: creación de un rol de ejecución de pods de Fargate.
Configuración del enrutador de registros
En los siguientes pasos, reemplace cada valor de ejemplo
por valores propios.
-
Cree un espacio de nombres de Kubernetes dedicado llamado
aws-observability
.-
Guarde el siguiente contenido en un archivo llamado
aws-observability-namespace.yaml
en el equipo. El valor dename
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
. -
Se debe proporcionar 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
ConfigMap
. Cualquier cambio enConfigMap
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.
Para crear un
ConfigMap
para CloudWatchTiene dos opciones de salida al utilizar CloudWatch:
En el siguiente ejemplo se muestra cómo utilizar el complemento de
cloudwatch_logs
para enviar registros a CloudWatch.-
Guarde los siguientes contenidos en un archivo llamado
aws-logging-cloudwatch-configmap.yaml
. Reemplaceregion-code
por la región de AWS en la que se encuentra el clúster. Se requieren los parámetros en[OUTPUT]
.kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability data: flb_log_cw: "false" # Set to true to ship Fluent Bit process logs to CloudWatch. filters.conf: | [FILTER] Name parser Match * Key_name log Parser crio [FILTER] Name kubernetes Match kube.* Merge_Log On Keep_Log Off Buffer_Size 0 Kube_Meta_Cache_TTL 300s output.conf: | [OUTPUT] Name cloudwatch_logs Match kube.* region region-code log_group_name my-logs log_stream_prefix from-fluent-bit- log_retention_days 60 auto_create_group true parsers.conf: | [PARSER] Name crio Format Regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z
-
Aplique el manifiesto al clúster.
kubectl apply -f aws-logging-cloudwatch-configmap.yaml
-
Descargue la política de IAM de CloudWatch en su equipo. También puede ver la política
en GitHub. curl -O https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json
-
-
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
111122223333
por el ID de su cuenta. ReemplaceAmazonEKSFargatePodExecutionRole
por el rol de ejecución de pods (para obtener más información, consulte Paso 2: creación de un rol de ejecución de pods de Fargate).aws iam attach-role-policy \ --policy-arn arn:aws:iam::
111122223333
:policy/eks-fargate-logging-policy \ --role-nameAmazonEKSFargatePodExecutionRole
Compatibilidad del 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 de Kubernetes de Fluent Bit 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.
Envío de registros de procesos de Fluent Bit a su cuenta
Opcionalmente, puede enviar 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 region-code
por la región de AWS en la que se encuentra el clúster.
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 a fin de obtener los registros del proceso. El hecho de que Fluent Bit no se inicie suele deberse a que Fluent Bit no analiza ni acepta elConfigMap
durante el inicio.
Detención del 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 registro 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 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
sample-app.yaml
en el equipo.apiVersion: 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
-
-
Visualización de 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.
Solución de problemas
Para confirmar si la característica de registro está habilitada o desactivada 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 pods con kubectl describe pod
. La salida puede incluir eventos del pod que aclaran si el registro está habilitado o no, como la siguiente salida de ejemplo.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 las anotaciones de un pod con kubectl describe pod
. En la anotación del pod, hay información sobre si la característica de registro está habilitada o desactivada y el motivo.pod-name