

# Solución de Amazon CloudWatch: recopilación de métricas de Prometheus en Amazon ECS
<a name="Solution-Prometheus-On-ECS"></a>

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](Monitoring-Solutions.md). Para obtener más información sobre los recopiladores administrados, consulte [Recopiladores de Prometheus administrados por Amazon CloudWatch](managed-prometheus-collectors.md).

**Topics**
+ [Requisitos](#Solution-Prometheus-On-ECS-Requirements)
+ [Habilitación de los exportadores de Prometheus](#Solution-Prometheus-On-ECS-Exporters)
+ [Paso 1: Configurar grupos de seguridad](#Solution-Prometheus-On-ECS-Security-Groups)
+ [Paso 2: Definir la configuración de extracción](#Solution-Prometheus-On-ECS-Scrape-Config)
+ [Paso 3: Configurar el extractor](#Solution-Prometheus-On-ECS-Create-Scraper)
+ [Validación de la recopilación de métricas](#Solution-Prometheus-On-ECS-Validate)
+ [Creación de un panel personalizado](#Solution-Prometheus-On-ECS-Dashboards)
+ [Costos](#Solution-Prometheus-On-ECS-Costs)

## Requisitos
<a name="Solution-Prometheus-On-ECS-Requirements"></a>

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
<a name="Solution-Prometheus-On-ECS-Exporters"></a>

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](https://github.com/prometheus/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](https://github.com/prometheus/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](https://github.com/nginx/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](https://github.com/NVIDIA/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](https://github.com/prometheus/haproxy_exporter) en GitHub.
+ **Apache Exporter**: métricas del servidor HTTP de Apache. Para obtener más información, consulte el repositorio [Apache Exporter](https://github.com/Lusitaniae/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](https://prometheus.io/docs/instrumenting/exporters/) en la documentación de Prometheus.

## Paso 1: Configurar grupos de seguridad
<a name="Solution-Prometheus-On-ECS-Security-Groups"></a>

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-id {{sg-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
<a name="Solution-Prometheus-On-ECS-Scrape-Config"></a>

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](managed-prometheus-collectors-scraper-configuration.md).

```
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
<a name="Solution-Prometheus-On-ECS-Create-Scraper"></a>

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](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_GetDefaultScraperConfiguration.html) para recuperar la configuración de un extractor de uso general o proporcionar la suya propia.

------
#### [ AWS API ]

Utilice la operación de la API `CreateScraper` para crear un extractor con un destino de CloudWatch. Sustituya la información de subred, grupo de seguridad y conjunto de datos por sus propios valores.

```
POST /scrapers HTTP/1.1

{
  "alias": "ecs-payforadoption-scraper",
  "source": {
    "vpcConfiguration": {
      "subnetIds": ["{{subnet-subnet-id-1}}", "{{subnet-subnet-id-2}}"],
      "securityGroupIds": ["{{sg-security-group-id}}"]
    }
  },
  "destination": {
    "cloudWatchConfiguration": {
      "datasetArn": "arn:aws:cloudwatch:{{us-west-2}}:{{123456789012}}:dataset/default"
    }
  },
  "scrapeConfiguration": {
    "configurationBlob": "{{base64-encoded-blob}}"
  }
}
```

------
#### [ AWS CLI ]

Utilice el comando `create-scraper` para crear un extractor con un destino de CloudWatch. Sustituya la información de subred, grupo de seguridad y conjunto de datos por sus propios valores.

```
aws amp create-scraper \
  --alias "ecs-payforadoption-scraper" \
  --source '{
    "vpcConfiguration": {
      "subnetIds": ["{{subnet-subnet-id-1}}", "{{subnet-subnet-id-2}}"],
      "securityGroupIds": ["{{sg-security-group-id}}"]
    }
  }' \
  --scrape-configuration configurationBlob=$(cat {{ecs-scraper.yml}} | base64 -w 0) \
  --destination '{
    "cloudWatchConfiguration": {
      "datasetArn": "arn:aws:cloudwatch:{{us-west-2}}:{{123456789012}}:dataset/default"
    }
  }'
```

------

## Validación de la recopilación de métricas
<a name="Solution-Prometheus-On-ECS-Validate"></a>

Cuando el recopilador comience a enviar las métricas, ejecute una consulta ad hoc en CloudWatch con [Query Studio](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-PromQL-QueryStudio.html) 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
<a name="Solution-Prometheus-On-ECS-Dashboards"></a>

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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html).

## Costos
<a name="Solution-Prometheus-On-ECS-Costs"></a>

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](https://aws.amazon.com/cloudwatch/pricing/).