View a markdown version of this page

Escenario 2: datos casi en tiempo real para los equipos de seguridad - Soluciones de datos de streaming en AWS con Amazon Kinesis

Escenario 2: datos casi en tiempo real para los equipos de seguridad

La empresa ABC2Badge proporciona sensores e insignias para eventos corporativos o a gran escala, como AWS re:Invent. Los usuarios se inscriben en el evento y reciben insignias únicas que los sensores captan en todo el campus. A medida que los usuarios pasan por un sensor, su información anónima se registra en una base de datos relacional.

En un evento próximo, debido al gran volumen de asistentes, el equipo de seguridad del evento solicitó a ABC2Badge que recopilara datos para las áreas de mayor concentración del campus cada 15 minutos. Esto le dará al equipo de seguridad tiempo suficiente para reaccionar y repartir al personal de seguridad proporcionalmente a las áreas concentradas. Debido a este nuevo requisito del equipo de seguridad y la inexperiencia de crear una solución de streaming, para procesar los datos casi en tiempo real, ABC2Badge busca una solución simple pero escalable y fiable.

Su solución de almacenamiento de datos actual es Amazon Redshift. Al revisar las características de los servicios de Amazon Kinesis, reconoció que Amazon Kinesis Data Firehose puede recibir una secuencia de registros de datos, agrupar los registros en lotes según el tamaño del búfer o el intervalo de tiempo, e insertarlos en Amazon Redshift. Creó una secuencia de entrega de Kinesis Data Firehose y la configuró para que copiara los datos en sus tablas de Amazon Redshift cada cinco minutos. Como parte de esta nueva solución, utilizaron el agente de Amazon Kinesis en sus servidores. Cada cinco minutos, Kinesis Data Firehose carga datos en Amazon Redshift, donde el equipo de inteligencia empresarial (BI) puede realizar el análisis y enviar los datos al equipo de seguridad cada 15 minutos.

Nueva solución con Amazon Kinesis Data Firehose

Nueva solución con Amazon Kinesis Data Firehose

Amazon Kinesis Data Firehose

Amazon Kinesis Data Firehose es la forma más fácil de cargar datos de streaming en AWS. Puede capturar, transformar y cargar datos de streaming en Amazon Kinesis Data Analytics, Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service (OpenSearch Service) y Splunk. Además, Kinesis Data Firehose puede cargar datos de streaming en cualquier punto de conexión HTTP personalizado o punto de conexión HTTP propiedad de proveedores de servicios de terceros compatibles.

Kinesis Data Firehose permite el análisis casi en tiempo real con herramientas y paneles de inteligencia empresarial existentes que ya está utilizando en la actualidad. Se trata de un servicio sin servidor completamente administrado cuya escala se ajusta de forma automática para adaptarse al rendimiento de los datos y que no precisa administración permanente. Kinesis Data Firehose puede procesar por lotes, comprimir y cifrar los datos antes de cargarlos, a fin de minimizar la cantidad de almacenamiento utilizado en el destino y aumentar la seguridad. También puede transformar los datos de origen con AWS Lambda y entregar los datos transformados a los destinos. Usted configura los productores de datos para que envíen datos a Kinesis Data Firehose, que entrega inmediatamente los datos al destino que usted especifique.

Envío de datos a una secuencia de entrega de Firehose

Para enviar datos a su secuencia de entrega, hay varias opciones. AWS ofrece SDK para muchos lenguajes de programación conocidos, cada uno de los cuales proporciona las API para Amazon Kinesis Data Firehose. AWS dispone de una utilidad para ayudar a enviar datos a su secuencia de entrega. Kinesis Data Firehose se ha integrado con otros servicios de AWS para enviar datos directamente desde esos servicios a su secuencia de entrega.

Uso del agente de Amazon Kinesis

El agente de Amazon Kinesis Agent es una aplicación de software independiente que supervisa continuamente un conjunto de archivos de registro para que se envíen nuevos datos a la secuencia de entrega. El agente gestiona automáticamente la rotación de archivos, los puntos de control, los reintentos en caso de error y emite métricas de Amazon CloudWatch para la supervisión y la solución de problemas de la secuencia de entrega. Se pueden aplicar al agente configuraciones adicionales, como el preprocesamiento de datos, la supervisión de varios directorios de archivos y la escritura en varias secuencias de entrega.

El agente se puede instalar en servidores basados en Linux o Windows, como servidores web, de registro y de bases de datos. Una vez instalado el agente, solo tiene que especificar los archivos de registro que supervisará y la secuencia de entrega a la que se enviará. El agente enviará nuevos datos de manera duradera y fiable a la secuencia de entrega.

Uso de la API con AWS SDK y los servicios de AWS como origen

La API de Kinesis Data Firehose ofrece dos operaciones para enviar datos a su secuencia de entrega. PutRecord envía un registro de datos en una sola llamada. PutRecordBatch puede enviar varios registros de datos en una sola llamada y puede obtener un mayor rendimiento por productor. En cada método, debe especificar el nombre de la secuencia de entrega y el registro de datos, o matriz de registros de datos, al utilizar este método. Para obtener más información y código de muestra para las operaciones de la API de Kinesis Data Firehose, consulte Escribir en una secuencia de entrega de Firehose con el SDK de AWS.

Kinesis Data Firehose también se ejecuta con Kinesis Data Firehose, CloudWatch Logs, CloudWatch Events, Amazon Simple Notification Service (Amazon SNS), Amazon API Gateway y AWS IoT. Puede enviar sus secuencias de datos, registros, eventos y datos de IoT de manera escalable y fiable directamente a un destino de Kinesis Data Firehose.

Procesamiento de datos antes de la entrega en destino

En algunos casos, es recomendable que transforme o mejore sus datos de streaming antes de que se entreguen a su destino. Por ejemplo, los productores de datos pueden enviar texto no estructurado en cada registro de datos y debe transformarlo en JSON antes de entregarlo a OpenSearch Service. O puede que desee convertir los datos JSON a un formato de archivo en columnas, como Apache Parquet o Apache ORC antes de almacenar los datos en Amazon S3.

Kinesis Data Firehose tiene incorporada la capacidad de conversión de formato de datos incorporada. Con esto, puede convertir fácilmente sus secuencias de datos JSON en formatos de archivo Apache Parquet o Apache ORC.

Flujo de transformación de datos

Para habilitar las transformaciones de datos en streaming, Kinesis Data Firehose utiliza una función Lambda que ha creado para transformar los datos. Kinesis Data Firehose almacena en búfer los datos entrantes en un tamaño de búfer especificado para la función y, a continuación, invoca la función Lambda especificada de forma asíncrona. Los datos transformados se envían de Lambda a Kinesis Data Firehose y Kinesis Data Firehose entrega los datos al destino.

Conversión de formato de datos

También puede activar la conversión de formato de datos de Kinesis Data Firehose, que convertirá su secuencia de datos JSON a Apache Parquet o Apache ORC. Esta función solo puede convertir JSON a Apache Parquet o Apache ORC. Si tiene datos en CSV, puede transformarlos mediante una función Lambda a JSON y, después, aplicar la conversión de formato de datos.

Entrega de datos

Como secuencia de entrega casi en tiempo real, Kinesis Data Firehose almacena en búfer los datos entrantes. Una vez alcanzados los umbrales de almacenamiento en búfer de la secuencia de entrega, los datos se entregan en el destino que ha configurado. Existen algunas diferencias en la forma en que Kinesis Data Firehose entrega los datos en cada destino, que este documento analiza en las siguientes secciones.

Amazon S3

Amazon S3 es un almacenamiento de objetos con una interfaz de servicios web sencilla para almacenar y recuperar el volumen de datos que desee desde cualquier ubicación de la Web. Se ha diseñado para ofrecer una durabilidad del 99,999999999 % y escalar más allá de billones de objetos a nivel mundial.

Entrega de datos a Amazon S3

Para entregar datos a Amazon S3, Kinesis Data Firehose primero concatena varios registros entrantes en función de la configuración de búfer de su secuencia de entrega y, a continuación, los entrega a Amazon S3 como un objeto de S3. La frecuencia de entrega de datos a S3 viene determinada por el tamaño del búfer de S3 (de 1 a 128 MB) o el intervalo del búfer (de 60 a 900 segundos), lo que suceda antes.

La entrega de datos al bucket de S3 podría generar errores por varias razones. Por ejemplo, es posible que el bucket ya no exista o que el rol de AWS Identity and Access Management (IAM) adoptado por Kinesis Data Firehose suponga que puede no tener acceso al bucket. En esos casos, Kinesis Data Firehose intenta realizar de nuevo la entrega durante un máximo de 24 horas hasta que se completa. El tiempo máximo de almacenamiento de datos de Kinesis Data Firehose es de 24 horas. Si, una vez transcurridas esas 24 horas, no se pueden entregar los datos, estos se pierden.

Amazon Redshift

Amazon Redshift es un almacenamiento de datos rápido y completamente administrado que permite analizar todos los datos mediante el uso de SQL estándar y las herramientas de inteligencia empresarial existentes de forma sencilla y rentable. Permite ejecutar consultas analíticas complejas en petabytes de datos estructurados con una sofisticada optimización de consultas, almacenamiento en columnas en discos locales de alto rendimiento y ejecución masiva de consultas paralelas.

Entrega de datos a Amazon Redshift

Para la entrega de datos a Amazon Redshift, Kinesis Data Firehose primero envía los datos entrantes a su bucket de S3 en el formato descrito anteriormente. A continuación, Kinesis Data Firehose emite un comando COPY de Amazon Redshift para cargar los datos del bucket de S3 en el clúster de Amazon Redshift.

La frecuencia con que se ejecutan las operaciones COPY de datos de S3 a Amazon Redshift depende de la velocidad con la que el clúster de Redshift pueda completar el comando COPY. Si es un destino de Amazon Redshift, puede especificar durante cuánto tiempo se reintenta la entrega (de 0 a 7200 segundos) al crear una secuencia de entrega para gestionar los errores de entrega de datos. Kinesis Data Firehose lo reintenta durante el tiempo especificado y omite ese lote concreto de objetos S3 si no lo consigue. La información de los objetos omitidos se entrega al bucket de S3 en forma de archivo de manifiesto, que puede utilizar para reposiciones manuales.

A continuación, se presenta un diagrama de arquitectura del flujo de datos de Kinesis Data Firehose a Amazon Redshift. Si bien este flujo de datos es exclusivo de Amazon Redshift, Kinesis Data Firehose sigue patrones similares para los demás objetivos de destino.

Flujo de datos de Kinesis Data Firehose a Amazon Redshift

Flujo de datos de Kinesis Data Firehose a Amazon Redshift

Amazon OpenSearch Service (OpenSearch Service)

OpenSearch Service es un servicio completamente administrado que ofrece funcionalidades en tiempo real y API de OpenSearch fáciles de usar junto con la disponibilidad, la escalabilidad y la seguridad que requieren las cargas de trabajo de producción. OpenSearch Service facilita las operaciones de implementar, usar y escalar OpenSearch para los análisis de registro, la búsqueda de texto completo y la supervisión de aplicaciones.

Entrega de datos a OpenSearch Service

Para entregar datos a OpenSearch Service, Kinesis Data Firehose primero almacena en búfer los registros entrantes a partir de la configuración de búfer de la secuencia de entrega y, después, genera una solicitud masiva de OpenSearch para indexar varios registros en el clúster de OpenSearch. La frecuencia de entrega de datos a OpenSearch Service viene determinada por los valores de tamaño del búfer de OpenSearch (de 1 a 100 MB) y de intervalo del búfer (de 60 a 900 segundos), lo que suceda antes.

Si el destino es OpenSearch Service, puede especificar durante cuánto tiempo se reintenta la entrega (de 0 a 7200 segundos) al crear la secuencia de entrega. Kinesis Data Firehose reintenta la entrega durante el tiempo especificado y, si no lo consigue, omite la solicitud de indexación. Los documentos ignorados se entregan al bucket de S3 en forma de archivo de manifiesto, en la carpeta elasticsearch_failed/, que puede utilizar para reposiciones manuales.

Amazon Kinesis Data Firehose puede rotar su índice de OpenSearch Service en función de una duración de tiempo. En función de la opción de rotación seleccionada (NoRotation, OneHour, OneDay, OneWeek o OneMonth), Kinesis Data Firehose añadirá una parte de la marca de tiempo de llegada en tiempo universal coordinado (UTC) al nombre de índice especificado.

Punto de conexión HTTP personalizado o proveedor de servicios externo compatible

Kinesis Data Firehose puede enviar datos a puntos de conexión HTTP personalizados o a proveedores externos compatibles, como Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, Splunk y Sumo Logic.

Punto de conexión HTTP personalizado o proveedor de servicios externo compatible

Para que Kinesis Data Firehose entregue datos correctamente a puntos de conexión HTTP personalizados, estos puntos de conexión deben aceptar solicitudes y enviar respuestas con ciertos formatos de solicitud y respuesta de Kinesis Data Firehose.

Al entregar datos a un punto de conexión HTTP propiedad de un proveedor de servicios externo compatible, puede usar el servicio AWS Lambda integrado para crear una función que transforme los registros entrantes al formato que coincida con el formato que espera la integración del proveedor de servicios.

Para la frecuencia de entrega de datos, cada proveedor de servicios tiene un tamaño de búfer recomendado. Colabore con su proveedor de servicios para obtener más información sobre el tamaño de búfer recomendado. Para la gestión de errores en la entrega de datos, Kinesis Data Firehose primero establece una conexión con el punto de conexión HTTP esperando una respuesta del destino. Kinesis Data Firehose sigue estableciendo la conexión hasta que caduca la duración de los reintentos. Después de eso, Kinesis Data Firehose lo considera un error de entrega de datos y realiza una copia de seguridad de los datos en el bucket de S3.

Resumen

Kinesis Data Firehose puede entregar sus datos de streaming de forma persistente a un destino admitido. Es una solución completamente administrada, que requiere poco o ningún desarrollo. Para la empresa ABC2Badge, usar Kinesis Data Firehose era la decisión lógica. Ya utilizaba Amazon Redshift como solución de almacenamiento de datos. Como sus orígenes de datos escribía continuamente en los registros de transacciones, pudo aprovechar el agente de Amazon Kinesis para transmitir esos datos sin escribir código adicional. Ahora que la empresa ABC2Badge ha creado un flujo de registros de sensores y los recibe a través de Kinesis Data Firehose, puede usarlo como base para el caso de uso del equipo de seguridad.