Supervisión distribuida - Implementación de microservicios en AWS

Supervisión distribuida

Una arquitectura de microservicios consta de muchas partes distribuidas diferentes que se deben supervisar. Puede usar Amazon CloudWatch para recopilar y hacer un seguimiento de las métricas, centralizar y supervisar los archivos de registro, configurar alarmas y reaccionar automáticamente ante cambios que ocurran en su entorno de AWS. CloudWatch puede supervisar recursos de AWS como, por ejemplo, instancias de Amazon EC2, tablas de DynamoDB e instancias de base de datos de Amazon RDS, así como métricas personalizadas generadas por las aplicaciones y los servicios, y los archivo de registro generados por las aplicaciones.

Monitorización

Puede usar CloudWatch para lograr la visualización de todo el sistema con respecto a la utilización de recursos, el rendimiento de las aplicaciones y el estado operativo. CloudWatch proporciona una solución de monitorización confiable, escalable y flexible que puede comenzar a usar en minutos. Ya no necesita configurar, administrar y escalar sus propios sistemas de monitorización e infraestructura. En una arquitectura de microservicios, la capacidad de monitorizar métricas personalizadas con CloudWatch es un beneficio adicional porque los desarrolladores pueden decidir qué métricas se deben recopilar para cada servicio. Además, el escalado dinámico se puede implementar basándose en métricas personalizadas.

Además de Amazon CloudWatch, puede utilizar CloudWatch Container Insights para recopilar, agregar y resumir las métricas y los registros de sus aplicaciones y microservicios en contenedores. CloudWatch Container Insights recopila automáticamente métricas para muchos recursos, como CPU, memoria, disco y red, y las agrega como métricas de CloudWatch en el nivel de clúster, nodo, pod, tarea y servicio. Con CloudWatch Container Insights, puede obtener acceso a las métricas del panel de CloudWatch Container Insights. También proporciona información de diagnóstico, como, por ejemplo, errores de reinicio de contenedores, para ayudarle a aislar problemas y solucionarlos rápidamente. También puede establecer alarmas de CloudWatch en las métricas que recopila Container Insights.

Container Insights está disponible para las plataformas Amazon ECS, Amazon EKS y Kubernetes en Amazon EC2. El soporte de Amazon ECS incluye soporte para Fargate.

Otra opción muy utilizada (especialmente para Amazon EKS) es recurrir a Prometheus. Prometheus es un conjunto de herramientas de supervisión y alertas de código abierto que, a menudo, se utiliza junto con Grafana para visualizar las métricas recopiladas. Muchos componentes de Kubernetes almacenan métricas en /metrics y Prometheus puede extraerlas a intervalos regulares.

Amazon Managed Service for Prometheus (AMP) es un nuevo servicio de supervisión compatible con Prometheus que permite supervisar aplicaciones en contenedores a escala. Con AMP, puede utilizar el lenguaje de consulta de Prometheus (PromQL) de código abierto para supervisar el rendimiento de las cargas de trabajo en contenedores sin necesidad de administrar la infraestructura subyacente para lidiar con la ingesta, el almacenamiento, la consulta y las métricas operativas. Puede recopilar métricas de Prometheus de entornos Amazon EKS y Amazon ECS, utilizando AWS Distro for OpenTelemetry o servidores Prometheus como agentes de recopilación.

AMP se usa a menudo en combinación con Amazon Managed Service for Grafana (AMG). Con AMG es fácil consultar, visualizar, alertar y comprender las métricas sin importar dónde se encuentren almacenadas. Con AMG, puede analizar sus métricas, registros y seguimientos sin tener que suministrar servidores, configurar ni actualizar software, y sin tener que lidiar con las arduas tareas administrativas que conlleva la seguridad y el escalado de Grafana en la producción.

Centralización de registros

El registro sistemático es crucial para resolver problemas e identificar problemas. Los microservicios permiten que los equipos envíen una cantidad de versiones nuevas sin precedentes e instan a los equipos de ingeniería a realizar pruebas con las nuevas características en producción. Conocer el impacto en el cliente es fundamental para mejorar una aplicación gradualmente.

De forma predeterminada, la mayoría de los servicios de AWS centraliza los archivos de registro de manera predeterminada. Los principales destinos para los archivos de registro en AWS son Amazon S3 y Amazon CloudWatch Logs. Para las aplicaciones que se ejecutan en instancias de Amazon EC2, hay un daemon disponible para enviar archivos de registro a CloudWatch Logs. Las funciones de Lambda envían de forma nativa los resultados de registro a CloudWatch Logs y Amazon ECS admite el controlador de registros awslogs, lo que permite la centralización de registros de contenedores en CloudWatch Logs. Para Amazon EKS, Fluent Bit o Fluentd pueden enviar registros desde las instancias individuales en el clúster a un CloudWatch Logs de registro centralizado, donde se combinan para lograr una generación de informes de alto nivel mediante el uso de Amazon OpenSearch Service y Kibana. Debido a sus ventajas de rendimiento y tamaño más reducido, se recomienda Fluent Bit en lugar de FluentD.

La siguiente figura ilustra las capacidades de registro de algunos de los servicios. Luego, los equipos pueden buscar y analizar estos registros mediante herramientas como Amazon OpenSearch Service y Kibana. Amazon Athena se puede utilizar para ejecutar consultas únicas en archivos de registro centralizados en Amazon S3.

Capacidades de registro de los servicios de AWS

Seguimiento distribuido

En muchos casos, un conjunto de microservicios trabaja conjuntamente para manejar una solicitud. Imagine un sistema complejo que consta de decenas de microservicios en los que se produce un error en uno de los servicios de la cadena de llamadas. Aunque cada microservicio se registre correctamente y los registros se consoliden en un sistema central, puede resultar difícil encontrar todos los mensajes de registro relevantes.

La idea central de AWS X-Ray es el uso de los ID de correlación, que son identificadores únicos asociados con todas las solicitudes y los mensajes relacionados con una cadena de eventos específica. El ID de seguimiento se agrega a las solicitudes HTTP en encabezados de seguimiento específicos llamados X-Amzn-Trace-Id cuando la solicitud llega al primer servicio integrado de X-Ray (por ejemplo, Application Load Balancer o API Gateway) y se incluye en la respuesta. A través del SDK de X-Ray, cualquier microservicio puede leer, pero también puede agregar o actualizar este encabezado.

X-Ray funciona con Amazon EC2, Amazon ECS, Lambda y AWS Elastic Beanstalk. Puede usar X-Ray con aplicaciones escritas en Java, Node.js y .NET que se implementan en estos servicios.

Mapa de servicios de AWS X-Ray

Epsagon es un SaaS completamente administrado que incluye el seguimiento de todos los servicios de AWS, API de terceros (a través de llamadas HTTP) y otros servicios comunes como Redis, Kafka y Elastic. El servicio Epsagon incluye capacidades de supervisión, alertas de los servicios más habituales y visibilidad de la carga útil en todas y cada una de las llamadas que realiza su código.

AWS Distro for OpenTelemetry es una distribución segura, lista para la producción y compatible con AWS del proyecto OpenTelemetry. Como parte de Cloud Native Computing Foundation, AWS Distro for OpenTelemetry proporciona las API de código abierto, bibliotecas y agentes a fin de recopilar métricas y seguimiento distribuidos para la supervisión de aplicaciones. Con AWS Distro for OpenTelemetry, puede equipar las aplicaciones una vez, enviar los seguimientos y métricas correlativos a diferentes soluciones de supervisión de AWS y los socios. Use agentes de equipamiento automático para recopilar seguimientos sin cambiar el código. Además, AWS Distro of OpenTelemetry recopila metadatos de los servicios administrados y los recursos de AWS, para que usted pueda establecer la correlación de los datos de rendimiento de la aplicación con los datos de la infraestructura subyacente, lo que reduce el tiempo promedio de resolución de problemas. Utilice AWS Distro for OpenTelemetry para equipar las aplicaciones que se ejecutan en Amazon EC2, Amazon ECS, Amazon EKS en Amazon EC2, Fargate y AWS Lambda, así como localmente.

Opciones para el análisis de registros en AWS

La búsqueda, el análisis y la visualización de datos de registro es un aspecto importante para comprender los sistemas distribuidos. Amazon CloudWatch Logs Insights le permite explorar, analizar y visualizar registros de forma instantánea. Esto le permite resolver problemas operativos. Otra opción muy utilizada para analizar los archivos de registro es usar Amazon OpenSearch Service junto con Kibana.

Amazon OpenSearch Service se puede utilizar para realizar búsquedas de texto completo, búsquedas estructuradas, análisis y una combinación de los tres. Kibana es un complemento de visualización de datos de código abierto que se integra perfectamente con Amazon OpenSearch Service.

La siguiente figura muestra el análisis de registros con Amazon OpenSearch Service y Kibana. A través de una suscripción a CloudWatch Logs, se puede configurar Amazon OpenSearch Service para transmitir entradas de registro a Amazon OpenSearch Service casi en tiempo real. Kibana visualiza los datos y expone una interfaz de búsqueda práctica para los almacenes de datos en Amazon OpenSearch Service. Esta solución se puede utilizar en combinación con un software como ElastAlert con el fin de implementar un sistema de alertas para enviar correos electrónicos y notificaciones de SNS, crear tiques JIRA, etc., si se detectan anomalías, consumos abruptos u otros patrones de interés en los datos.

Análisis de registros con Amazon OpenSearch Service y Kibana

Otra opción para analizar los archivos de registro es usar Amazon Redshift con Amazon QuickSight.

QuickSight se puede conectar fácilmente a los servicios de datos de AWS, incluidos Amazon Redshift, Amazon RDS, Amazon Aurora, Amazon EMR, DynamoDB, Amazon S3 y Amazon Kinesis

CloudWatch Logs puede funcionar como un almacén centralizado para los datos de registro y, además de solo almacenar los datos, es posible transmitir entradas de registro a Amazon Kinesis Data Firehose.

La siguiente figura presenta un caso donde se transmiten entradas de registro desde diferentes orígenes a Amazon Redshift con CloudWatch Logs y Kinesis Firehose. Amazon QuickSight usa los datos almacenados en Amazon Redshift para análisis, generación de informes y visualización.

Análisis de registros con Amazon Redshift y Amazon QuickSight

La siguiente figura representa una situación de análisis de registros en Amazon S3. Cuando los registros se almacenan en buckets de Amazon S3, los datos de registro se pueden cargar en diferentes servicios de datos de AWS, como Amazon Redshift o Amazon EMR, para analizar los datos almacenados en la transmisión de registros y detectar anomalías.

Análisis de registros en Amazon S3