AWS Fargate en EKS proporciona una experiencia totalmente gestionada de 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, así como una aplicación de ejemplo de EKS Fargate para el reenvío de logs a Datadog a través de Amazon Data Firehose.
Reenvío de logs con 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 Kubernetes, son accesibles como atributos estructurados cuando se envían logs a través de 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 de logs comparable de CloudWatch.
Requisitos
Las siguientes herramientas de línea de comandos: kubectl, aws.
Un clúster EKS con un perfil de Fargate y un rol de ejecución del pod Fargate. En esta guía, el clúster se denomina fargate-cluster, con un perfil de 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 de 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 ejemplo desplegada en un clúster EKS a través de Fluent Bit, y de 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 claves de etiqueta.
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.
Para el nuevo complemento Kinesis Firehose de mayor rendimiento, utiliza el nombre del complemento kinesis_firehose en lugar de amazon_data_firehose.
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 kinesis_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án 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: