AWS Fargate en EKS proporciona una experiencia totalmente gestionada para la ejecución de cargas de trabajo Kubernetes. Amazon Data Firehose puede utilizarse junto con el enrutador de logs Fluent Bit de EKS para recopilar logs en Datadog. Esta guía proporciona una comparación del reenvío de logs a través de Amazon Data Firehose y de CloudWatch Logs, así como un ejemplo de aplicación de EKS Fargate para el reenvío de logs a Datadog a través de Amazon Data Firehose.
Reenvío de logs de Amazon Data Firehose y CloudWatch
A continuación se indican las principales diferencias entre el uso de Amazon Data Firehose y CloudWatch para el reenvío de logs.
Metadatos y etiquetado: los metadatos, como el espacio de nombres y el ID de contenedor de Kubernetes, son accesibles como atributos estructurados al enviar logs mediante Amazon Data Firehose.
Costes de AWS: los costes de AWS pueden variar según los casos de uso individuales, pero el consumo de Amazon Data Firehose suele ser menos costoso que el consumo comparable de CloudWatch Logs.
Requisitos
Las siguientes herramientas de línea de comandos: kubectl, aws.
Un clúster EKS con un perfil Fargate y un rol de ejecución de pod Fargate. En esta guía, el clúster se denomina fargate-cluster con un perfil Fargate denominado fargate-profile aplicado al espacio de nombres fargate-namespace . Si aún no dispones de estos recursos, consulta Empezando con Amazon EKS, para crear el clúster ,y Empezando con AWS Fargate utilizando Amazon EKS, para crear el perfil Fargate y el rol de ejecución del pod.
Configuración
Los siguientes pasos describen el proceso para el envío de logs desde una aplicación de muestra desplegada en un clúster EKS a través de Fluent Bit y un flujo (stream) de entrega de Amazon Data Firehose a Datadog. Para maximizar la coherencia con las etiquetas (tags) estándar de Kubernetes en Datadog, se incluyen instrucciones para reasignar atributos seleccionados a etiquetas claves.
Configurar Fluent Bit para Firehose en un clúster EKS Fargate
Crea el espacio de nombres aws-observability.
kubectl create namespace aws-observability
Crea el siguiente ConfigMap Kubernetes para Fluent Bit como aws-logging-configmap.yaml. Sustituye el nombre de tu flujo de entrega.
apiVersion:v1kind:ConfigMapmetadata:name:aws-loggingnamespace:aws-observabilitydata:filters.conf:| [FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Buffer_Size 0
Kube_Meta_Cache_TTL 300sflb_log_cw:'true'output.conf:| [OUTPUT]
Name amazon_data_firehose
Match kube.*
region <REGION>
delivery_stream <YOUR-DELIVERY-STREAM-NAME>
Utiliza kubectl para aplicar el manifiesto ConfigMap.
kubectl apply -f aws-logging-configmap.yaml
Crea una política IAM y adjúntala al rol de ejecución del pod para permitir que el enrutador de logs que se ejecuta en AWS Fargate escriba en Amazon Data Firehose. Puedes utilizar el siguiente ejemplo, sustituyendo el ARN en el campo Resource (Recurso) por el ARN de tu flujo de entrega y también especificando tu región o tu ID de cuenta.
Utiliza kubectl para aplicar el manifiesto del despliegue.
kubectl apply -f sample-deployment.yaml
Validación
Comprueba que los pods sample-app se están ejecutando en el espacio de nombres fargate-namespace.
kubectl get pods -n fargate-namespace
Resultado esperado:
NAME READY STATUS RESTARTS AGE
sample-app-6c8b449b8f-kq2qz 1/1 Running 0 3m56s
sample-app-6c8b449b8f-nn2w7 1/1 Running 0 3m56s
sample-app-6c8b449b8f-wzsjj 1/1 Running 0 3m56s
Utiliza kubectl describe pod para confirmar que la función de gestión de logs de Fargate está habilitada.
kubectl describe pod <POD-NAME> -n fargate-namespace |grep Logging
Resultado esperado:
Logging: LoggingEnabled
Normal LoggingEnabled 5m fargate-scheduler Successfully enabled logging for pod
Inspecciona los logs del despliegue.
kubectl logs -l app=nginx -n fargate-namespace
Resultado esperado:
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/01/27 16:53:42 [notice] 1#1: using the "epoll" event method
2023/01/27 16:53:42 [notice] 1#1: nginx/1.23.3
2023/01/27 16:53:42 [notice] 1#1: built by gcc 10.2.1 20210110(Debian 10.2.1-6) 2023/01/27 16:53:42 [notice] 1#1: OS: Linux 4.14.294-220.533.amzn2.x86_64
2023/01/27 16:53:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:65535
2023/01/27 16:53:42 [notice] 1#1: start worker processes
...
Comprueba que los logs está en Datadog. En el Explorador de logs de Datadog, busca @aws.firehose.arn:"<ARN>", sustituyendo <ARN> por tu ARN de Amazon Data Firehose, para filtrar logs desde Amazon Data Firehose.
Reasignar atributos para la correlación de logs
Los logs de esta configuración requieren la reasignación de algunos atributos para maximizar la coherencia con las etiquetas estándar de Kubernetes en Datadog.
Después de crear este pipeline, los logs emitidos por la aplicación de ejemplo se etiquetan como en este ejemplo con los atributos de logs reasignados a etiquetas de Kubernetes: