

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

Esta solución lo ayuda a recopilar métricas compatibles con Prometheus de sus instancias de Amazon EC2 sin ejecutar ni escalar su propia infraestructura de recopilación. Ejecuta uno o más exportadores de Prometheus en sus instancias y un recopilador de Prometheus administrado por Amazon CloudWatch detecta los destinos en su VPC, extrae sus puntos de conexión de `/metrics` y envía las métricas a CloudWatch. 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-EC2-Requirements)
+ [Habilitación de los exportadores de Prometheus](#Solution-Prometheus-On-EC2-Exporters)
+ [Paso 1: Definir la configuración de extracción](#Solution-Prometheus-On-EC2-Scrape-Config)
+ [Paso 2: Configurar el extractor](#Solution-Prometheus-On-EC2-Create-Scraper)
+ [Validación de la recopilación de métricas](#Solution-Prometheus-On-EC2-Validate)
+ [Creación de un panel personalizado](#Solution-Prometheus-On-EC2-Dashboards)
+ [Costos](#Solution-Prometheus-On-EC2-Costs)

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

Esta solución es adecuada para las siguientes condiciones:
+ Computación: instancias de Amazon EC2 que ejecutan uno o más exportadores de Prometheus.
+ 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 del exportador en sus instancias.

## Habilitación de los exportadores de Prometheus
<a name="Solution-Prometheus-On-EC2-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`. Ejecuta un exportador que se adapta a la carga de trabajo que desea supervisar. Los siguientes exportadores se utilizan habitualmente en Amazon EC2:
+ **Node Exporter**: métricas de infraestructura por host, como, por ejemplo, la CPU, la memoria, el disco y la red (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, como el entrenamiento y la inferencia de machine learning (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.

Instale y ejecute cada exportador en las instancias siguiendo su documentación oficial. Anote el puerto en el que escucha cada exportador, ya que hace referencia a estos puertos en la configuración de extracción. 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.

Después de iniciar un exportador, consulte su punto de conexión desde la instancia para confirmar que exponga las métricas:

```
curl http://localhost:{{port-number}}/metrics
```

## Paso 1: Definir la configuración de extracción
<a name="Solution-Prometheus-On-EC2-Scrape-Config"></a>

En el siguiente ejemplo, se utiliza `static_configs` con los nombres de DNS privados de la instancia para extraer una aplicación de muestra (puerto 8080) y Node Exporter (puerto 9100) en las instancias de Amazon EC2. 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: 'ec2-metrics'
    static_configs:
      - targets:
          - ip-{{ip-address}}.us-west-2.compute.internal:8080
    metrics_path: '/metrics'
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        replacement: 'ec2-metrics-instance'
      - target_label: service
        replacement: 'ec2-metrics'
      - target_label: environment
        replacement: 'dev'
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: '.*'
        action: keep

  - job_name: ec2-node-exporter
    static_configs:
      - targets:
          - ip-{{ip-address}}.us-west-2.compute.internal:9100
```

## Paso 2: Configurar el extractor
<a name="Solution-Prometheus-On-EC2-Create-Scraper"></a>

Cree un recopilador administrado conectado a una VPC que extraiga sus instancias y que envíe las métricas a su conjunto de datos de CloudWatch. Proporcione las subredes y un grupo de seguridad que permitan al recopilador acceder a los puertos del exportador:

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": "ec2-payment-service-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 "ec2-payment-service-scraper" \
  --source '{
    "vpcConfiguration": {
      "subnetIds": ["{{subnet-subnet-id-1}}", "{{subnet-subnet-id-2}}"],
      "securityGroupIds": ["{{sg-security-group-id}}"]
    }
  }' \
  --scrape-configuration configurationBlob=$(cat {{ec2-scraper.yml}} | base64 -w 0) \
  --destination '{
    "cloudWatchConfiguration": {
      "datasetArn": "arn:aws:cloudwatch:{{us-west-2}}:{{123456789012}}:dataset/default"
    }
  }'
```

------

Al crear un recopilador administrado, Amazon Managed Service para Prometheus crea automáticamente un rol vinculado a un servicio que otorga al recopilador permiso para acceder a los recursos de su VPC y escribir en su conjunto de datos de CloudWatch.

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

En cuestión de minutos, las métricas comienzan a enviarse a su conjunto de datos de CloudWatch. Para confirmar que las métricas llegan, ejecute una consulta ad hoc en CloudWatch mediante [Query Studio](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-PromQL-QueryStudio.html). Por ejemplo, la siguiente consulta devuelve las métricas del trabajo `ec2-metrics`:

```
{job="ec2-metrics"}
```

## Creación de un panel personalizado
<a name="Solution-Prometheus-On-EC2-Dashboards"></a>

Una vez que el recopilador comience a enviar sus métricas de Amazon EC2 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-EC2-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/).