Engineering

Obtención de logs de AWS desde S3 con Filebeat y el Elastic Stack

Se pueden almacenar logs de varios servicios de AWS diferentes en cubetas S3, como logs de acceso al servidor S3, logs de acceso a ELB, logs de CloudWatch y logs de flujo de VPC. Los logs de acceso al servidor S3, por ejemplo, proporcionan registros detallados de las solicitudes que se hacen a una cubeta. Esta información es muy útil, pero desafortunadamente, AWS crea varios archivos .txt para diversas operaciones, lo que dificulta ver exactamente qué operaciones están registradas en los archivos de log sin abrir cada archivo .txt por separado. Además, los logs de acceso al servidor S3 se registran en un formato complejo, lo cual hace que sea muy difícil para los usuarios simplemente abrir el archivo .txt y encontrar la información que necesitan.

Afortunadamente, es posible indexar, analizar y visualizar con facilidad todos tus logs de AWS con el Elastic Stack, que te permite usar todos los datos importantes que contienen. En este blog, veremos lo fácil que es.

Introducción

En Filebeat 7.4, la entrada s3 se convirtió en una opción para los usuarios que permite recuperar eventos de archivos en una cubeta S3; cada línea de cada archivo se convierte en un evento diferente. Junto con la entrada s3, también enviamos dos conjuntos de archivos nuevos para el módulo AWS de Filebeat: el conjunto de archivos s3access y el conjunto de archivos elb (nuevo en 7.5). Con ellos, los usuarios pueden recopilar logs de diferentes cubetas S3 y después visualizarlos y analizarlos en una ubicación centralizada sin descargar ni abrir manualmente cada archivo.

Para evitar un retraso importante con el sondeo de todos los archivos de log de cada cubeta S3, decidimos combinar la notificación y el sondeo: usa Amazon Simple Queue Service (SQS) para notificaciones Amazon S3 cuando se crea un objeto S3 nuevo. La entrada s3 de Filebeat comprueba SQS en busca de mensajes nuevos sobre el objeto nuevo creado en S3 y usa la información de estos mensajes para recuperar logs de cubetas S3. Con esta configuración, no es necesario sondear periódicamente cada cubeta S3. En cambio, la entrada s3 de Filebeat garantiza la recopilación de datos casi en tiempo real desde cubetas S3 con velocidad y confiabilidad.

Configuración de notificaciones de eventos S3 con SQS

Siguiendo estos cuatro pasos, los usuarios pueden agregar una configuración de notificaciones en una cubeta que solicite a AWS S3 que publique eventos del tipo s3:ObjectCreated:* en una cola AWS SQS. Ve más detalles en el ejemplo de recorrido para configurar una notificación de cubeta.

Paso 1: Crear una cola SQS y cubeta S3

Crea una cola SQS y una cubeta S3 en la misma región de AWS a través de la consola Amazon SQS.

Paso 2: Configurar una cola SQS

Reemplaza la política de acceso adjuntada a la cola con la política de cola siguiente:

{
 "Version": "2012-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
    "AWS":"*"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "<SQS-queue-ARN>",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:<bucket-name>" }
   }
  }
 ]
}

Asegúrate de cambiar <sqs-queue-arn> y <bucket-name> para que coincidan con tu ARN de cola SQS y nombre de cubeta S3.

Paso 3: Configurar cubeta S3

Con la consola Amazon S3, agrega una configuración de notificaciones que solicite a Amazon S3 que publique eventos del tipo s3:ObjectCreated:* en tu cola Amazon SQS.

Configuración de la cubeta S3

Paso 4: Probar configuración S3-SQS

Carga un objeto a la cubeta S3 y verifica la notificación del evento en la consola Amazon SQS.

Cómo usar la entrada s3 de Filebeat

Al habilitar Filebeat con la entrada s3, los usuarios podrán recopilar logs de cubetas AWS S3. Cada línea de cada archivo de log se convertirá en un evento diferente y se almacenará en la salida de Filebeat configurada, como Elasticsearch. Usando solo la entrada s3, los mensajes de log se almacenarán en el campo message en cada evento sin parseo.

Al procesar un objeto S3 al que hace referencia un mensaje SQS, si transcurre la mitad del tiempo de espera de visibilidad configurado y el procesamiento continúa, entonces el tiempo de espera de visibilidad de ese mensaje SQS se restablecerá para garantizar que el mensaje no regrese a la cola en la mitad del procesamiento. Si ocurren errores durante el procesamiento del objeto S3, el proceso se detendrá y el mensaje SQS se regresará a la cola.

Paso 1: Instalar Filebeat

Para descargar e instalar Filebeat, hay diferentes comandos para los distintos sistemas. Por ejemplo, en Mac:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.5.1-darwin-x86_64.tar.gz

Ve más detalles en Install Filebeat (Instalar Filebeat).

Paso 2: Configurar la entrada s3

Este es un ejemplo de cómo habilitar la entrada s3 en filebeat.yml:

filebeat.inputs:
- type: s3
  queue_url: https://sqs.us-east-1.amazonaws.com/1234/test-fb-ks
  visibility_timeout: 300s
  credential_profile_name: elastic-beats

Con esta configuración, Filebeat irá a la cola AWS SQS test-fb-ks para leer mensajes de notificaciones. A partir de los mensajes, Filebeat obtendrá información sobre objetos S3 específicos y la usará para leer objetos línea por línea. visibility_timeout es la duración (en segundos) por la cual los mensajes recibidos se ocultan de las solicitudes de recuperación siguientes después de ser recuperados por una solicitud ReceiveMessage. De manera predeterminada, el visibility_timeout es de 300 segundos. El mínimo es 0 segundos y el máximo es 12 horas. Para realizar llamadas de API de AWS, la entrada s3 requiere credenciales de AWS en su configuración. En el ejemplo anterior, se asigna el nombre de perfil elastic-beats para hacer llamadas de API de AWS. Ve más detalles en AWS Credentials Configuration (Configuración de credenciales de AWS).

Paso 3: Iniciar Filebeat

En Mac y Linux:

sudo chown root filebeat.yml
sudo ./filebeat -e

Ve más detalles en Start Filebeat (Iniciar Filebeat).

Recopilación de logs de acceso al servidor S3 con el conjunto de archivos s3access

En Filebeat 7.4, se agregó el conjunto de archivos s3access para recopilar los logs de acceso al servidor S3 a través de la entrada s3. Los logs de acceso al servidor proporcionan registros detallados para las solicitudes que se realizan a una cubeta, lo que puede ser muy útil en auditorías de acceso y seguridad. De manera predeterminada, el logging de acceso al servidor está deshabilitado. Para rastrear solicitudes de acceso a tu cubeta, puedes habilitar el logging de acceso al servidor. Cada registro de log de acceso proporciona detalles sobre una solitud de acceso única, como el solicitante, el nombre de la cubeta, la hora de solicitud, la acción de solicitud, el estado de respuesta y el código de error, si es relevante.

Paso 1: Habilitar logging de acceso al servidor

En Properties (Propiedades) de una cubeta S3 específica, puedes habilitar el logging de acceso al servidor seleccionando Enable logging (Habilitar logging):

Habilitar logging

Paso 2: Habilitar módulo aws en Filebeat

En una configuración predeterminada de Filebeat, el módulo aws no está habilitado. El comando siguiente habilita la configuración del módulo aws en el directorio modules.d en los sistemas MacOS y Linux:

sudo ./filebeat modules enable aws

Paso 3: Configurar módulo aws

De manera predeterminada, el conjunto de archivos s3access está deshabilitado. Para habilitar el conjunto de archivos s3access, ve aws.yml a continuación:

- module: aws
  s3access:
    enabled: true
    var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    var.credential_profile_name: fb-aws

Paso 4: Iniciar Filebeat

En Mac y Linux:

sudo chown root filebeat.yml
sudo ./filebeat -e

Ve más detalles en Start Filebeat (Iniciar Filebeat).

Paso 5: Usar el dashboard del conjunto de archivos s3access de Kibana

El conjunto de archivos s3access incluye un dashboard predefinido, denominado [Filebeat AWS] S3 Server Access Log Overview ([Filebeat AWS] Visión general de logs de acceso al servidor S3). Con la ejecución del comando de configuración al iniciar Metricbeat, configuras automáticamente estos dashboards en Kibana.

En Mac y Linux:

./filebeat setup --dashboards

Para obtener más información al respecto, consulta la documentación Set up the Kibana dashboards (Configurar los dashboards de Kibana).

Este dashboard es una visión general de los logs de acceso al servidor AWS S3. Muestra las URL principales con su código de respuesta, estado HTTP a lo largo del tiempo y todos los logs de errores.

Dashboard de logs de acceso al servidor AWS S3

¿Qué sigue?

Con la entrada s3 de Filebeat, los usuarios pueden recopilar fácilmente logs de los servicios AWS y enviarlos como eventos a nuestro Elasticsearch Service en Elastic Cloud o a un cluster que se ejecuta fuera de la distribución predeterminada. En la versión 7.4, el conjunto de archivos s3access está disponible para que los usuarios recopilen y analicen logs de acceso al servidor S3. En la versión 7.5, el conjunto de archivos elb está disponible para que los usuarios recopilen logs del equilibrador de carga clásico, el equilibrador de carga de aplicaciones y el equilibrador de carga de la red. En breve, comenzaremos a agregar más conjuntos de archivos para dar soporte a otros logs de uso común como logs de flujo de VPC, logs de CloudWatch y logs de Cloudtrail. Si tienes preguntas o comentarios, no dudes en publicarlos en el foro de debate de Beats.