Solución de Amazon CloudWatch: recopilación de métricas de Prometheus en Amazon ECS
Esta solución lo ayuda a recopilar métricas compatibles con Prometheus de sus tareas de Amazon ECS sin ejecutar ni escalar su propia infraestructura de recopilación. Sus tareas exponen las métricas a través de exportadores de Prometheus, y un recopilador de Prometheus administrado por Amazon CloudWatch detecta las tareas de su VPC mediante la detección de servicios basada en DNS, extrae sus puntos de conexión de /metrics y envía las métricas a CloudWatch. Como las tareas de Amazon ECS son efímeras y sus direcciones IP cambian, esta solución utiliza la detección de servicios de AWS Cloud Map para que el recopilador siempre extraiga el conjunto actual de tareas. Para obtener información general sobre todas las soluciones de observabilidad de CloudWatch, consulte Soluciones de observabilidad de CloudWatch. Para obtener más información sobre los recopiladores administrados, consulte Recopiladores de Prometheus administrados por Amazon CloudWatch.
Temas
Requisitos
Esta solución es adecuada para las siguientes condiciones:
-
Computación: tareas de Amazon ECS (en Amazon EC2 o AWS Fargate) que muestran métricas compatibles con Prometheus.
-
Servicios de Amazon ECS que registra en AWS Cloud Map para la detección de servicios basada en DNS.
-
Amazon VPC con el DNS habilitado y al menos dos subredes en distintas zonas de disponibilidad para el recopilador.
-
Un grupo de seguridad que permita al recopilador acceder a los puertos de métricas en sus instancias. Si sus tareas y el recopilador comparten un grupo de seguridad, agregue una regla de entrada con autorreferencia para el puerto de métricas.
Habilitación de los exportadores de Prometheus
Un exportador de Prometheus es un proceso que expone las métricas en formato de exposición de Prometheus en un punto de conexión HTTP de /metrics. En Amazon ECS, normalmente se ejecuta un exportador como contenedor sidecar en la misma definición de tarea que su aplicación, o se instrumenta la aplicación para que muestre las métricas directamente. Los siguientes exportadores se utilizan habitualmente:
-
Node Exporter: métricas de infraestructura por host para tareas del tipo de lanzamiento de Amazon EC2 (puerto predeterminado 9100). Para obtener más información, consulte el repositorio Node Exporter
en GitHub. -
JMX Exporter: métricas de aplicaciones de JVM y Java para cargas de trabajo de Java. Para obtener más información, consulte el repositorio JMX Exporter
en GitHub. -
NGINX Prometheus Exporter: métricas de proxy inverso y servidor web de NGINX. Para obtener más información, consulte el repositorio NGINX Prometheus Exporter
en GitHub. -
DCGM Exporter: métricas de GPU de NVIDIA para cargas de trabajo de GPU (puerto predeterminado 9400). Para obtener más información, consulte el repositorio DCGM Exporter
en GitHub. -
HAProxy Exporter: métricas del equilibrador de carga de HAProxy. Para obtener más información, consulte el repositorio HAProxy Exporter
en GitHub. -
Apache Exporter: métricas del servidor HTTP de Apache. Para obtener más información, consulte el repositorio Apache Exporter
en GitHub.
Agregue el exportador a la definición de su tarea y exponga su puerto de métricas siguiendo la documentación oficial del exportador. Para ver el catálogo completo de exportadores disponibles, consulte Exporters and integrations
Paso 1: Configurar grupos de seguridad
Confirme que el grupo de seguridad de sus tareas de Amazon ECS permita el tráfico entrante del recopilador en el puerto de métricas. Cuando sus tareas y el recopilador compartan un grupo de seguridad, agregue una regla de entrada con autorreferencia para que los recursos del mismo grupo de seguridad puedan comunicarse. El siguiente comando permite el tráfico entrante en el puerto 80 desde el mismo grupo de seguridad:
aws ec2 authorize-security-group-ingress \ --group-idsg-security-group-id\ --ip-permissions IpProtocol=tcp,FromPort=80,ToPort=80,UserIdGroupPairs='[{GroupId=sg-security-group-id}]'
Paso 2: Definir la configuración de extracción
Para las tareas de Amazon ECS que registre en AWS Cloud Map, utilice la detección de servicios basada en DNS (dns_sd_configs) para buscar y extraer automáticamente las tareas a medida que se inician y se detienen. La sección dns_sd_configs indica al recopilador que consulte el nombre de DNS de AWS Cloud Map y que extraiga todas las direcciones IP devueltas. Cuando Amazon ECS reemplaza una tarea, el recopilador detecta el cambio en su siguiente consulta de DNS. La sección relabel_configs agrega etiquetas coherentes a sus métricas para que pueda consultar y filtrar los distintos servicios. Para obtener el conjunto completo de las opciones de configuración admitidas, consulte Configuración del raspador.
global: scrape_interval: 30s scrape_timeout: 10s scrape_configs: - job_name: 'ecs-payforadoption' dns_sd_configs: - names: ['payforadoption-go.Workshop-space'] type: A port: 80 metrics_path: '/metrics' relabel_configs: - target_label: service_name replacement: 'payforadoption-go' - target_label: cloudmap_namespace replacement: 'Workshop-space' - target_label: environment replacement: 'production' - target_label: compute_platform replacement: 'ecs-fargate'
Paso 3: Configurar el extractor
Cree un recopilador administrado conectado a una VPC que extraiga sus tareas de Amazon ECS y que envíe las métricas a su conjunto de datos de CloudWatch:
Puede utilizar GetDefaultScraperConfiguration para recuperar la configuración de un extractor de uso general o proporcionar la suya propia.
Validación de la recopilación de métricas
Cuando el recopilador comience a enviar las métricas, ejecute una consulta ad hoc en CloudWatch con Query Studio para confirmar que las métricas llegan. Por ejemplo, la siguiente consulta devuelve el promedio de solicitudes por segundo a la tarea de Amazon ECS durante los últimos cinco minutos:
rate(payforadoption_requests_total[5m])
Creación de un panel personalizado
Una vez que el recopilador comience a enviar sus métricas de Amazon ECS a CloudWatch, podrá crear un panel de CloudWatch personalizado para visualizarlas. Con los paneles personalizados, puede combinar las métricas de sus exportadores de Prometheus en widgets, agregar consultas basadas en PromQL y organizar los widgets para adaptarlos a sus necesidades de supervisión. Para obtener más información, consulte Uso de paneles de CloudWatch.
Costos
Cobramos por hora por los recopiladores de Prometheus y se aplican los precios de ingesta de métricas de OpenTelemetry de CloudWatch. Para obtener más información sobre los precios de CloudWatch, consulte Precios de Amazon CloudWatch