

# Información de contenedores
<a name="ContainerInsights"></a>

Utilice Información de contenedores de CloudWatch para recopilar, agregar y resumir métricas y registros de las aplicaciones en contenedores y de los microservicios. Información de contenedores está disponible para las plataformas Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), RedHat OpenShift en AWS (ROSA) y Kubernetes en Amazon EC2. Información de contenedores admite la recopilación de métricas de clústeres implementados en AWS Fargate tanto para Amazon ECS como Amazon EKS.

CloudWatch recopila automáticamente métricas de muchos recursos, como la CPU, la memoria, el disco y la red. Información de contenedores también proporciona información de diagnóstico, como, por ejemplo, errores de reinicio de contenedores, para ayudarlo a aislar problemas y solucionarlos rápidamente. También puede establecer alarmas de CloudWatch en las métricas que recopila Información de contenedores.

Información de contenedores recopila datos como *Eventos de registro de rendimiento* con [embedded metric format](CloudWatch_Embedded_Metric_Format.md) (formato de métricas integradas). Estos eventos de registro de rendimiento son entradas que utilizan un esquema JSON estructurado que permite capturar y almacenar datos de cardinalidad alta a escala. A partir de estos datos, CloudWatch crea métricas agregadas por clúster, nodo pod y servicio como métricas de CloudWatch. Las métricas que recopila Información de contenedores están disponibles en los paneles automáticos de CloudWatch y también se pueden ver en la sección **Métricas** de la consola de CloudWatch. Las métricas no están visibles hasta que las tareas del contenedor hayan estado ejecutándose durante algún tiempo.

Al implementar Información de contenedores, este crea automáticamente un grupo de registro para los eventos del registro de rendimiento. No es necesario que cree este grupo de registro.

CloudWatch no crea automáticamente todas las métricas posibles a partir de los datos del registro con el objetivo de ayudarlo a administrar los costes de Información de contenedores. Sin embargo, puede visualizar métricas adicionales y niveles adicionales de granularidad con Información de registros de CloudWatch para analizar los eventos de registro de rendimiento sin procesar.

Con la versión original de Información de contenedores, las métricas recopiladas y los registros incorporados se cobran como métricas personalizadas. Con Información de contenedores, con una observabilidad mejorada para Amazon EKS, las métricas y los registros de Información de contenedores se cobran por observación en lugar de cobrarse por métrica almacenada o registro incorporado. Para obtener más información sobre los precios de CloudWatch, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

**[Vista previa]** Para Amazon EKS, Información de contenedores con OpenTelemetry proporciona un modo de métricas adicional que recopila métricas mediante el protocolo OpenTelemetry (OTLP) y admite consultas PromQL. Cada métrica está enriquecida con hasta 150 etiquetas, incluidos los atributos de convención semántica de OpenTelemetry y las etiquetas de pod y nodo de Kubernetes. Para obtener más información, consulte [Información de contenedores con métricas de OpenTelemetry para Amazon EKS](container-insights-otel-metrics.md).

En Amazon EKS, RedHatOpenshift en AWS y Kubernetes, Información de contenedores utiliza una versión en contenedores del agente de CloudWatch para detectar todos los contenedores en ejecución en un clúster. A continuación, recopila datos de rendimiento en cada nivel de la pila de rendimiento.

Información de contenedores admite el cifrado con la AWS KMS key para los registros y las métricas que recopila. Para habilitar este cifrado, debe activar manualmente el cifrado de AWS KMS para el grupo de registro que recibe datos de Información de contenedores. Esto hace que Información de contenedores cifre esos datos con la clave KMS proporcionada. Solo se admiten claves simétricas. No utilice claves KMS asimétricas para cifrar sus grupos de registro.

Para obtener más información, consulte [Encrypt Log Data in CloudWatch Logs Using AWS KMS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) (Cifrar datos de registro en CloudWatch Logs mediante ).

## Plataformas admitidas
<a name="container-insights-platforms"></a>

Información de contenedores está disponible para las plataformas Amazon Elastic Container Service, Amazon Elastic Kubernetes Service, RedHat OpenShift en AWS y Kubernetes en instancias de Amazon EC2.
+ Para Amazon ECS, Información de contenedores recopila métricas por clúster, tarea y servicio en las instancias de Linux y Windows Server. Información de contenedores puede recopilar métricas por instancia solo en instancias de Linux. Las métricas de red están disponibles para los contenedores que usan el modo de red `bridge` y el modo de red `awsvpc`, pero no están disponibles para los contenedores que usan el modo de red `host`.
+ En el caso de Amazon Elastic Kubernetes Service y las plataformas de Kubernetes en instancias de Amazon EC2, Información de contenedores solo se admite en instancias de Linux y Windows.
+ **[Vista previa]** Información de contenedores con métricas de OpenTelemetry está disponibles para Amazon EKS. Para obtener más información, consulte [Información de contenedores con métricas de OpenTelemetry para Amazon EKS](container-insights-otel-metrics.md).

# Información de contenedores con observabilidad mejorada para Amazon ECS
<a name="container-insights-detailed-ecs-metrics"></a>

El 2 de diciembre de 2024, AWS publicó Información de contenedores con observabilidad mejorada para Amazon ECS. Esta versión admite la observabilidad mejorada de los clústeres de Amazon ECS que utilizan los tipos de lanzamiento de Amazon EC2 y Fargate. Después de configurar Información de contenedores con observabilidad mejorada en Amazon ECS, Información de contenedores recopila automáticamente la telemetría detallada de la infraestructura desde el nivel del clúster hasta el nivel del contenedor en su entorno y muestra estos datos de rendimiento críticos en paneles seleccionados, lo que elimina el trabajo pesado de configurar la observabilidad. Para obtener más información sobre cómo configurar Información de contenedores con observabilidad mejorada, consulte [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS-cluster.md).

Información de contenedores con observabilidad mejorada proporciona todas las métricas de Información de contenedores, además de métricas adicionales de tareas y contenedores. Para obtener más información, consulte [Métricas de Información de contenedores de Amazon ECS con observabilidad mejorada](Container-Insights-enhanced-observability-metrics-ECS.md).

Información de contenedores con observabilidad mejorada admite la observabilidad entre cuentas de CloudWatch. Puede utilizar una cuenta de supervisión para supervisar y solucionar problemas en las aplicaciones que abarcan varias cuentas de AWS dentro de una sola región. Para obtener más información, consulte [(Observabilidad entre cuentas de CloudWatch)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html).

# Información de contenedores con observabilidad mejorada para Amazon EKS
<a name="container-insights-detailed-metrics"></a>

El 6 de noviembre de 2023, se lanzó una nueva versión de Información de contenedores. Esta versión admite la observabilidad mejorada de los clústeres de Amazon EKS que se ejecutan en Amazon EC2 y puede recopilar métricas más detalladas estos clústeres. Tras la instalación, recopila automáticamente registros detallados de telemetría de infraestructura y de contenedores para sus clústeres de Amazon EKS. A continuación, puede utilizar paneles seleccionados y de uso inmediato para profundizar en la telemetría de aplicaciones e infraestructuras. 

Información de contenedores con observabilidad mejorada para Amazon EKS, recopila métricas detalladas del estado granular, del rendimiento y del estado hasta el nivel del contenedor, así como métricas del plano de control. Para obtener más información acerca de las métricas y dimensiones adicionales recopiladas, consulte [Métricas de Amazon EKS e Información de contenedores de Kubernetes con observabilidad mejorada](Container-Insights-metrics-enhanced-EKS.md).

Si instaló Información de contenedores mediante el agente CloudWatch en un clúster de Amazon EKS en Amazon EC2, después del 6 de noviembre de 2023, dispondrá de Información de contenedores con observabilidad mejorada para Amazon EKS. De lo contrario, puede actualizar un clúster de Amazon EKS a esta nueva versión siguiendo las instrucciones que se indican en [Actualización a Información de contenedores con observabilidad mejorada para Amazon EKS en CloudWatch](Container-Insights-upgrade-enhanced.md).

La Información de contenedores admite la observabilidad entre cuentas de CloudWatch. Utiliza una cuenta de supervisión para supervisar y solucionar problemas en las aplicaciones que abarcan varias cuentas de AWS dentro de una sola región. Para obtener más información, consulte [Observabilidad entre cuentas de CloudWatch](CloudWatch-Unified-Cross-Account.md).

Información de contenedores con observabilidad mejorada para Amazon EKS también es compatible con los nodos de trabajo de Windows.

Fargate no admite Información de contenedores con observabilidad mejorada para Amazon EKS.

**nota**  
Navegue hasta la consola de Información de contenedores para descubrir si tiene clústeres que puedan actualizarse a Información de contenedores con observabilidad mejorada para Amazon EKS. Para ello, elija **Información**, **Información de contenedores** en el panel de navegación de la consola de CloudWatch. En la consola de Información de contenedores, un anuncio indica si hay algún clúster de Amazon EKS que pueda actualizarse y enlaza con la página de actualización.

# Información de contenedores con métricas de OpenTelemetry para Amazon EKS
<a name="container-insights-otel-metrics"></a>

**Vista previa**  
Información de contenedores con métricas de OpenTelemetry proporciona visibilidad del estado operativo de su infraestructura de clústeres de Amazon EKS. Está disponible en versión preliminar pública sin costo adicional en Este de EE. UU. (Norte de Virginia), Oeste de EE. UU. (Oregón), Europa (Irlanda), Asia-Pacífico (Singapur) y Asia-Pacífico (Sídney).

El complemento de observabilidad de EKS de Amazon CloudWatch recopila métricas de código abierto de sus clústeres de Amazon EKS y las envía a CloudWatch mediante OpenTelemetry Protocol (OTLP) con una granularidad de 30 segundos. Estas métricas utilizan los nombres de métricas de sus fuentes originales, como Advisor, Prometheus Node Exporter, NVIDIA DCGM, Kube State Metrics y AWS Neuron Monitor. Puede consultar estas métricas mediante PromQL en CloudWatch Query Studio o mediante la API de consultas compatible con Prometheus.

Cada métrica se enriquece automáticamente con hasta 150 etiquetas, incluidos los atributos de convención semántica de OpenTelemetry y las etiquetas de pod y nodo de Kubernetes. PromQL gestiona la agregación en el momento de la consulta, por lo que cada métrica se publica una vez por recurso en lugar de hacerlo en varios niveles de agregación. El complemento también correlaciona las métricas de aceleración de AWS Neuron y AWS Elastic Fabric Adapter con los módulos y contenedores específicos que las utilizan, lo que proporciona una visibilidad que no ofrecen los orígenes de métricas por sí solos.

Para usar Información de contenedores con OpenTelemetry en un clúster de Amazon EKS, instale el complemento de observabilidad de EKS de Amazon CloudWatch (versión `v6.0.1-eksbuild.1` o posterior) mediante la consola de Amazon EKS o mediante infraestructura como código.

Para más información sobre la configuración de Información de Contenedores con OpenTelemetry, consulte [Configuración de Información de contenedores](deploy-container-insights.md).

Para obtener más información sobre cómo consultar estas métricas con PromQL, consulte [Consultas PromQL](CloudWatch-PromQL-Querying.md).

## Comparación entre Información de contenedores con OpenTelemetry e Información de contenedores (mejorada)
<a name="container-insights-otel-comparison"></a>

En la siguiente tabla, se resumen las diferencias entre Información de contenedores con OpenTelemetry e Información de contenedores (mejorada).


| Característica | Información de contenedores (mejorada) | Información de contenedores con OpenTelemetry | 
| --- | --- | --- | 
| Nombres de métricas | Métricas en formato CloudWatch (por ejemplo, pod\$1cpu\$1utilization) | Nativos de código abierto (por ejemplo, container\$1cpu\$1usage\$1seconds\$1total) | 
| Etiquetas por métrica | De 3 a 6 dimensiones predefinidas por métrica | Hasta 150 etiquetas, incluidas todas las etiquetas de pod y nodo de Kubernetes | 
| Agregación | Agregación previa en varios niveles (clúster, espacio de nombres, carga de trabajo, módulo) | Métricas sin procesar por recurso; agregadas en el momento de la consulta con PromQL | 
| Lenguaje de consulta | API de Métricas de CloudWatch | PromQL (compatible con Prometheus) | 
| Ingesta de métricas | Registros de CloudWatch en formato EMF | Punto de conexión de OTLP | 

## Cómo se etiquetan las métricas
<a name="container-insights-otel-labels"></a>

Cada métrica recopilada por Información de contenedores con OpenTelemetry contiene etiquetas de tres orígenes.

Etiquetas nativas del origen de telemetría  
Etiquetas de la fuente de métricas original (por ejemplo, cAdvisor proporciona etiquetas como `pod`, `namespace` y `container`). Se conservan como atributos de puntos de datos.

Atributos de recursos de OpenTelemetry  
El complemento agrega atributos de recursos siguiendo las convenciones semánticas de OpenTelemetry para [Kubernetes](https://opentelemetry.io/docs/specs/semconv/resource/k8s/), [Host](https://opentelemetry.io/docs/specs/semconv/resource/host/) y [Nube](https://opentelemetry.io/docs/specs/semconv/resource/cloud/), como `k8s.pod.name`, `k8s.namespace.name`, `k8s.node.name`, `host.name` y `cloud.region`. Estos atributos son consistentes en todos los orígenes de métricas.

Etiquetas de pods y nodos de Kubernetes  
Todas las etiquetas de pods y nodos detectadas por la API de Kubernetes se adjuntan como atributos de recurso con los prefijos `k8s.pod.label` y `k8s.node.label`.

Para obtener más información sobre cómo elegir un complemento de observabilidad de EKS, consulte [Consultas PromQL](CloudWatch-PromQL-Querying.md).

## Métricas admitidas
<a name="container-insights-otel-supported-metrics"></a>

En la siguiente tabla se indican los orígenes y categorías de métricas recopiladas por Información de contenedores con OpenTelemetry.


| Origen de la métrica | Categoría métrica | Requisitos previos | 
| --- | --- | --- | 
| cAdvisor | Métricas de CPU | - | 
| cAdvisor | Métricas de memoria | - | 
| cAdvisor | Métricas de red | - | 
| cAdvisor | Métricas del disco y del sistema de archivos | - | 
| Exportador de nodos de Prometheus | Métricas de CPU | - | 
| Exportador de nodos de Prometheus | Métricas de memoria | - | 
| Exportador de nodos de Prometheus | Métricas de disco | - | 
| Exportador de nodos de Prometheus | Métricas del sistema de archivos | - | 
| Exportador de nodos de Prometheus | Métricas de red | - | 
| Exportador de nodos de Prometheus | Métricas del sistema | - | 
| Exportador de nodos de Prometheus | Métricas de VMStat | - | 
| Exportador de nodos de Prometheus | Métricas de Netstat y sockets | - | 
| DCGM de NVIDIA | Métricas de uso y rendimiento de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| DCGM de NVIDIA | Métricas de memoria de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| DCGM de NVIDIA | Métricas térmicas y de potencia de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| DCGM de NVIDIA | Métricas de limitación de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| DCGM de NVIDIA | Métricas de errores y fiabilidad de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| DCGM de NVIDIA | Métricas NVLink de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| DCGM de NVIDIA | Métricas informacionales de la GPU | Es necesario instalar el [complemento de dispositivo NVIDIA](https://github.com/NVIDIA/k8s-device-plugin) y el [kit de herramientas de contenedores](https://github.com/NVIDIA/nvidia-container-toolkit) de NVIDIA. | 
| AWS Neuron Monitor | Métricas de NeuronCore | Es necesario instalar el [controlador Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/setup/neuron-setup/pytorch/neuronx/ubuntu/torch-neuronx-ubuntu22.html) y el [complemento de dispositivo Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html). | 
| AWS Neuron Monitor | Métricas de NeuronDevice | Es necesario instalar el [controlador Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/setup/neuron-setup/pytorch/neuronx/ubuntu/torch-neuronx-ubuntu22.html) y el [complemento de dispositivo Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html). | 
| AWS Neuron Monitor | Métricas de sistema de Neuron | Es necesario instalar el [controlador Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/setup/neuron-setup/pytorch/neuronx/ubuntu/torch-neuronx-ubuntu22.html) y el [complemento de dispositivo Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html). | 
| AWS Elastic Fabric Adapter | Métricas de EFA | Es necesario instalar el [complemento de dispositivo EFA](https://github.com/aws/eks-charts/tree/master/stable/aws-efa-k8s-device-plugin). | 
| NVMe | Métricas SMART de NVMe | - | 
| Métricas de estado de Kube | Métricas pod, node, Deployment, DaemonSet, StatefulSet, ReplicaSet, Job, CronJob, Service, Namespace, PersistentVolume, PersistentVolumeClaim | - | 
| Servidor de la API de Kubernetes | Métricas del servidor de API y de etcd | - | 

## Imagen del contenedor del agente de CloudWatch
<a name="container-insights-download-limit"></a>

Amazon proporciona una imagen de contenedor de agente de CloudWatch en el registro de contenedores de Amazon Elastic. Para obtener más información, consulte [cloudwatch-agent](https://gallery.ecr.aws/cloudwatch-agent/cloudwatch-agent) en Amazon ECR.

# Configuración de Información de contenedores
<a name="deploy-container-insights"></a>

El proceso de configuración de Información de contenedores es diferente para Amazon ECS, Amazon EKS y Kubernetes. 
+ [Configuración de Información de contenedores en Amazon EKS y Kubernetes](deploy-container-insights-EKS.md)
+ [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS.md)

**Topics**
+ [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS.md)
+ [Configuración de Información de contenedores en Amazon EKS y Kubernetes](deploy-container-insights-EKS.md)
+ [Configuración de Información de contenedores en RedHat OpenShift en AWS (ROSA)](deploy-container-insights-RedHatOpenShift.md)

# Configuración de Información de contenedores en Amazon ECS
<a name="deploy-container-insights-ECS"></a>

Puede utilizar una de las siguientes opciones o ambas para habilitar Información de contenedores en los clústeres de Amazon ECS:
+ Utilice la Consola de administración de AWS o la AWS CLI para comenzar a recopilar métricas de nivel de clúster, de nivel de tarea y de nivel de servicio.
+ Implemente el agente de CloudWatch como servicio daemon para comenzar a recopilar métricas por instancia en clústeres alojados en instancias de Amazon EC2.

**Topics**
+ [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS-cluster.md)
+ [Configuración de Información de contenedores en Amazon ECS mediante AWS Distro para OpenTelemetry](deploy-container-insights-ECS-adot.md)
+ [Implementación del agente de CloudWatch para recopilar métricas de nivel de instancia EC2 en Amazon ECS](deploy-container-insights-ECS-instancelevel.md)
+ [Implementación de AWS Distro para OpenTelemetry a fin de recopilar métricas de nivel de instancia EC2 en clústeres de Amazon ECS](deploy-container-insights-ECS-OTEL.md)
+ [Configurar Firelens para enviar registros a registros de CloudWatch](deploy-container-insights-ECS-logs.md)

# Configuración de Información de contenedores en Amazon ECS
<a name="deploy-container-insights-ECS-cluster"></a>

Puede configurar Información de contenedores con observabilidad mejorada o Información de contenedores en clústeres de Amazon ECS nuevos y existentes mediante la consola de Amazon ECS o la AWS CLI. Información de contenedores recopila métricas en los niveles de clúster, tarea y servicio. Información de contenedores con observabilidad mejorada proporciona dimensiones y métricas adicionales, lo que le permite profundizar en la visibilidad por contenedor. 

Si está utilizando Amazon ECS en una instancia de Amazon EC2, inicie esa instancia con una AMI que incluya el agente de Amazon ECS, versión 1.29 o posterior. Para obtener información sobre cómo se actualiza la versión del agente, consulte [Actualización del agente de contenedor de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html).

**nota**  
Si la clave de AWS KMS administrada por el cliente que utiliza para las métricas de Información de contenedores de Amazon ECS aún no está configurada para funcionar con CloudWatch, debe actualizar la política de claves para permitir los registros cifrados en Registros de CloudWatch. También debe asociar su propia clave de AWS KMS al grupo de registro que se indica en `/aws/ecs/containerinsights/ClusterName/performance`. Para obtener más información, consulte [Cifrar datos de registro en los registros de CloudWatch mediante AWS Key Management Service](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html).

Le recomendamos que utilice Información de contenedores con observación mejorada en lugar de Información de contenedores, ya que proporciona una visibilidad detallada del entorno de contenedores y reduce el tiempo medio de resolución.

## Configuración de Información de contenedores con observabilidad mejorada
<a name="set-container-insights-ECS-cluster-enhanced"></a>

Puede activar Información de contenedores con observabilidad mejorada mediante la consola de Amazon ECS o la AWS CLI. 

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

Utilice el siguiente comando para activar Información de contenedores con observabilidad mejorada.

 Establezca la configuración de la cuenta `containerInsights` en `enhanced`.

```
aws ecs put-account-setting --name containerInsights --value enhanced
```

Ejemplo de resultado

```
{
    "setting": {
        "name": "containerInsights",
        "value": "enhanced",
        "principalArn": "arn:aws:iam::123456789012:johndoe",
         "type": user
    }
}
```

**nota**  
De forma predeterminada, `put-account-setting` se aplica solo al usuario autenticado actualmente. Si desea habilitar la configuración en toda la cuenta para todos los usuarios y roles, utilice el usuario raíz como en el siguiente ejemplo.  

```
aws ecs put-account-setting --name containerInsights --value enhanced --principal-arn arn:aws:iam::accountID:root
```

Tras establecer esta configuración de la cuenta, todos los clústeres nuevos utilizan automáticamente Información de contenedores con observabilidad mejorada. Usa el comando `update-cluster-settings` para agregar Información de contenedores con observabilidad mejorada al clúster existente o para actualizar los clústeres que actualmente usan Información de contenedores a Información de contenedores con observabilidad mejorada.

```
aws ecs update-cluster-settings --cluster cluster-name --settings name=containerInsights,value=enhanced
```

------
#### [ Amazon ECS console ]

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la barra de navegación de la parte superior, seleccione la región para la que desea consultar la configuración de cuenta. 

1. En la página de navegación, elija **Account Settings** (Configuración de cuenta).

1. Elija **Actualizar**.

1. Para usar Información de contenedores con observabilidad mejorada, elija **Información de contenedores con observabilidad mejorada**.

1. Seleccione **Save changes (Guardar cambios)**.

1. En la pantalla de confirmación, seleccione **Confirm (Confirmar)** para guardar la selección.

Tras establecer esta configuración, todos los clústeres nuevos utilizan automáticamente Información de contenedores con observabilidad mejorada. Puede agregar Información de contenedores con observabilidad mejorada a los clústeres existentes o actualizar los clústeres que actualmente usan Información de contenedores a Información de contenedores con observabilidad mejorada. Para obtener más información, consulte [Actualización de un clúster de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-cluster-v2.html) en la *Guía para desarrolladores de Amazon Elastic Container Service*.

------

## Configuración de Información de contenedores
<a name="set-container-insights-ECS-cluster"></a>

Puede activar Información de contenedores con la consola de Amazon ECS o la AWS CLI. 

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

Para usar Información de contenedores, establezca la configuración de la cuenta `container Insights` en `enabled`. Use el siguiente comando para activar Información de contenedores.

```
aws ecs put-account-setting --name containerInsights --value enabled
```

Ejemplo de resultado

```
{
    "setting": {
        "name": "container Insights",
        "value": "enabled",
        "principalArn": "arn:aws:iam::123456789012:johndoe",
         "type": user
    }
}
```

Al establecer la configuración de la cuenta `container Insights` en `enabled`, todos los clústeres nuevos tienen habilitado Información de contenedores de forma predeterminada. Usa el comando `update-cluster-settings` para agregar Información de contenedores a un clúster existente.

```
aws ecs update-cluster-settings --cluster cluster-name --settings name=containerInsights,value=enabled
```

------
#### [ Amazon ECS console ]

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la barra de navegación de la parte superior, seleccione la región para la que desea consultar la configuración de cuenta. 

1. En la página de navegación, elija **Account Settings** (Configuración de cuenta).

1. Elija **Actualizar**.

1. Para usar Información de contenedores, seleccione **Información de contenedores**.

1. Seleccione **Save changes (Guardar cambios)**.

1. En la pantalla de confirmación, seleccione **Confirm (Confirmar)** para guardar la selección.

Tras configurarlo, todos los clústeres nuevos utilizarán Información de contenedores automáticamente. Actualice los clústeres existentes para agregar Información de contenedores. Para obtener más información, consulte [Actualización de un clúster de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-cluster-v2.html) en la *Guía para desarrolladores de Amazon Elastic Container Service*.

------

# Configuración de Información de contenedores en Amazon ECS mediante AWS Distro para OpenTelemetry
<a name="deploy-container-insights-ECS-adot"></a>

Utilice esta sección si desea utilizar AWS Distro para OpenTelemetry con el fin de configurar Información de contenedores de CloudWatch en un clúster de Amazon ECS. Para obtener más información acerca de AWS Distro para Open Telemetry, consulte [AWS Distro para OpenTelemetry](https://aws.amazon.com/otel/). 

En estos pasos se da por sentado que ya cuenta con un clúster que ejecuta Amazon ECS. Para obtener más información sobre el uso de AWS Distro para OpenTelemetry con Amazon ECS y la configuración de un clúster de Amazon ECS para este fin, consulte [Configuración del recopilador de AWS Distro para OpenTelemetry en Amazon Elastic Container Service](https://aws-otel.github.io/docs/setup/ecs).

## Paso 1: Cree un rol de tarea
<a name="deploy-container-insights-ECS-adot-CreateTaskRole"></a>

El primer paso consiste en crear un rol de tarea en el clúster que el recopilador de OpenTelemetry de AWS usará.

**Cómo crear un rol de tarea para AWS Distro para OpenTelemetry**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, elija **Policies (Políticas)** y, a continuación, seleccione **Create policy (Crear política)**.

1. Elija la pestaña **JSON** y copie la siguiente política:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:DescribeLogStreams",
                   "logs:DescribeLogGroups",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Elija **Revisar política**.

1. En nombre, ingrese **AWSDistroOpenTelemetryPolicy**, después, elija **Create policy** (Crear política).

1. En el panel de navegación de la izquierda, elija **Roles** y, a continuación, seleccione **Create Role** (Crear rol).

1. En la lista de servicios, elija **Elastic Container Service**.

1. Debajo en la misma página, elija **Elastic Container Service Task** (Tarea de Elastic Container Service), luego **Next: Permissions** (Siguiente: Permisos).

1. En la lista de políticas, busque **AWSDistroOpenTelemetryPolicy**.

1. Marque la casilla situada junto a **AWSDistroOpenTelemetryPolicy**.

1. Elija **Next: Tags** (Siguiente: Etiquetas) y, a continuación, seleccione **Next: Review** (Siguiente: Revisar).

1. En **Role name** (Nombre de rol), ingrese **AWSOpenTelemetryTaskRole** y luego elija **Create role** (Crear rol).

## Paso 2: Cree un rol de ejecución de tarea
<a name="deploy-container-insights-ECS-adot-CreateTaskExecutionRole"></a>

El siguiente paso es crear un rol de ejecución de tareas para el recopilador OpenTelemetry de AWS.

**Cómo crear un rol de ejecución de tareas para AWS Distro para OpenTelemetry**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación de la izquierda, seleccione **Roles** y, a continuación, seleccione **Create Role** (Crear rol).

1. En la lista de servicios, elija **Elastic Container Service**.

1. Debajo en la misma página, elija **Elastic Container Service Task** (Tarea de Elastic Container Service), luego **Next: Permissions** (Siguiente: Permisos).

1. En la lista de políticas, busque **AmazonECSTaskExecutionRolePolicy** y, a continuación, seleccione la casilla de selección situada junto a **AmazonECSTaskExecutionRolePolicy**.

1. En la lista de políticas, busque **CloudWatchLogsFullAccess** y, a continuación, seleccione la casilla de selección situada junto a **CloudWatchLogsFullAccess**.

1. En la lista de políticas, busque **AmazonSSMReadOnlyAccess** y, a continuación, seleccione la casilla de selección situada junto a **AmazonSSMReadOnlyAccess**.

1. Elija **Next: Tags** (Siguiente: Etiquetas) y, a continuación, seleccione **Next: Review** (Siguiente: Revisar).

1. En **Role name** (Nombre de rol), ingrese **AWSOpenTelemetryTaskExecutionRole** y luego elija **Create role** (Crear rol).

## Paso 3: Cree una definición de tarea
<a name="deploy-container-insights-ECS-adot-CreateTaskDefinition"></a>

El siguiente paso es crear una definición de tarea.

**Cómo crear una definición de tarea para AWS Distro para OpenTelemetry**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, elija **Task definitions** (Definiciones de tareas).

1. Elija **Create new task definition** (Crear nueva definición de tarea) y **Create new task definition** (Crear nueva definición de tarea).

1. Para **Task definition family** (Familia de definiciones de tareas), especifique un nombre único para la definición de tareas.

1. Configure los contenedores y, a continuación, elija **Siguiente**.

1. En **Métricas y registro**, seleccione **Usar recopilación de métricas**.

1. Elija **Next (Siguiente)**.

1. Seleccione **Create (Crear)**.

Para obtener más información sobre el uso del recopilador de AWS OpenTelemetry con Amazon ECS, consulte [Configuración del recopilador de AWS Distro para OpenTelemetry en Amazon Elastic Container Service](https://aws-otel.github.io/docs/setup/ecs).

## Paso 4: Ejecute la tarea
<a name="deploy-container-insights-ECS-adot-CreateTaskDefinition"></a>

El paso final es ejecutar la tarea que ha creado.

**Cómo ejecutar la tarea de AWS Distro para OpenTelemetry**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación izquierdo, elija **Task Definitions** (Definiciones de tarea) y, a continuación, seleccione la tarea que acaba de crear.

1. Seleccione **Acciones**, **Implementar** y **Ejecutar tarea**. 

1. Elija **Deploy** (Implementar), **Run task** (Ejecución de tareas).

1. En la sección **Opciones de procesamiento**, en **Clúster existente**, elija el clúster.

1. Seleccione **Crear**.

1. A continuación, puede verificar las métricas nuevas en la consola de CloudWatch.

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación izquierdo, en **Metrics** (Métricas).

   Debería ver un espacio de nombres **ECS/ContainerInsights** Elija ese espacio de nombres, se deberían ver ocho métricas.

# Implementación del agente de CloudWatch para recopilar métricas de nivel de instancia EC2 en Amazon ECS
<a name="deploy-container-insights-ECS-instancelevel"></a>

Para implementar el agente de CloudWatch a fin de recopilar métricas de nivel de instancia de los clústeres de Amazon ECS alojados en instancias EC2, utilice una configuración de inicio rápido con una configuración predeterminada o instale el agente manualmente para poder personalizarlo.

Ambos métodos requieren que tenga al menos un clúster de Amazon ECS implementado con un tipo de lanzamiento de EC2 y que el contenedor del agente de CloudWatch tenga acceso al servicio de metadatos de instancias de Amazon EC2 (IMDS). Para más información, consulte [Metadatos de instancia y datos de usuario](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html).

Estos métodos también suponen que tiene instalada la AWS CLI. Además, para ejecutar los comandos en los procedimientos siguientes, debe iniciar sesión en una cuenta o rol que tenga las políticas **IAMFullAccess** y **AmazonECS\$1FullAccess**.

**importante**  
Al definir el contenedor del agente de CloudWatch en la definición de la tarea, configure `essential: false`. Esto evita que todo el servicio de Amazon ECS se detenga si el contenedor del agente de CloudWatch falla. Otros contenedores de aplicaciones críticas continuarán ejecutándose incluso si el agente no está disponible temporalmente.

**Topics**
+ [Configuración rápida mediante CloudFormation](#deploy-container-insights-ECS-instancelevel-quickstart)
+ [Configuración manual y personalizada](#deploy-container-insights-ECS-instancelevel-manual)

## Configuración rápida mediante CloudFormation
<a name="deploy-container-insights-ECS-instancelevel-quickstart"></a>

Para utilizar la configuración rápida, escriba el siguiente comando para usar CloudFormation a fin de instalar el agente. Sustituya *cluster-name* (cluster-nombre) y *cluster-region* (clúster-región) por el nombre y la región del clúster de Amazon ECS.

Este comando crea los roles de IAM **CWAgentECSTaskRole** y **CWAgentECSExecutionRole**. Si estos roles ya existen en su cuenta, utilice `ParameterKey=CreateIAMRoles,ParameterValue=False` en lugar de `ParameterKey=CreateIAMRoles,ParameterValue=True` cuando escriba el comando. De lo contrario, el comando fallará.

```
ClusterName=cluster-name
Region=cluster-region
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=CreateIAMRoles,ParameterValue=True \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**(Alternativa) Uso de sus propios roles de IAM**

Si desea utilizar su propio rol de tarea de ECS personalizado y el rol de ejecución de tareas de ECS en lugar de los roles **CWAgentECSTaskRole** y **CWAgentECSExecutionRole**, asegúrese primero de que el rol que se va a usar como rol de tarea de ECS tiene **CloudWatchAgentServerPolicy** asociada. Además, asegúrese de que el rol que se va a utilizar como rol de ejecución de tareas de ECS tiene asociadas las políticas **CloudWatchAgentServerPolicy** y **AmazonECSTaskExecutionRolePolicy**. A continuación, escriba el siguiente comando. En el comando, sustituya *task-role-arn* por el ARN de su rol de tarea de ECS personalizado y *execution-role-arn* por el ARN de su rol de ejecución de tareas de ECS personalizado.

```
ClusterName=cluster-name
Region=cluster-region
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=TaskRoleArn,ParameterValue=${TaskRoleArn} \
                 ParameterKey=ExecutionRoleArn,ParameterValue=${ExecutionRoleArn} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**Solución de problemas de la configuración rápida**

Para comprobar el estado de la pila de CloudFormation, escriba el siguiente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stacks --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Si ve que el `StackStatus` es distinto de `CREATE_COMPLETE` o `CREATE_IN_PROGRESS`, compruebe los eventos de pila para encontrar el error. Escriba el siguiente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stack-events --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Para verificar el estado del servicio del servicio del daemon `cwagent`, ingrese el siguiente comando. En la salida, debería ver que el `runningCount` es igual al `desiredCount` en la sección `deployment`. Si no es igual, compruebe la sección `failures` en la salida.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs describe-services --services cwagent-daemon-service --cluster $ClusterName --region $Region
```

También puede utilizar la consola de CloudWatch Logs para verificar el registro del agente. Busque el grupo de registro **/ecs/ecs-cwagent-daemon-service**.

**Eliminación de la pila de CloudFormation del agente de CloudWatch**

Si necesita eliminar la pila de CloudFormation, escriba el siguiente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation delete-stack --stack-name CWAgentECS-${ClusterName}-${Region} --region ${Region}
```

## Configuración manual y personalizada
<a name="deploy-container-insights-ECS-instancelevel-manual"></a>

Siga los pasos de esta sección para implementar manualmente el agente de CloudWatch para recopilar métricas de nivel de instancia de los clústeres de Amazon ECS alojados en instancias EC2.

### Políticas y roles de IAM necesarios
<a name="deploy-container-insights-ECS-instancelevel-IAMRoles"></a>

Se requieren dos roles de IAM. Debe crearlos si aún no existen. Para obtener más información sobre estos roles, consulte [IAM roles for Tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) (Roles IAM para tareas) y [Amazon ECS Task Execution Role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) (Rol de ejecución de tareas de Amazon ECS).
+ Un *ECS task role* (rol de tarea de ECS), que el agente de CloudWatch utiliza para publicar métricas. Si este rol ya existe, debe asegurarse de que tiene la política `CloudWatchAgentServerPolicy` asociada.
+ Un *ECS task execution role* (rol de ejecución de tareas de ECS), que el agente de Amazon ECS utiliza para lanzar el agente de CloudWatch. Si este rol ya existe, debe asegurarse de que tiene las políticas `AmazonECSTaskExecutionRolePolicy` y `CloudWatchAgentServerPolicy` asociadas.

Si aún no dispone de estos roles, puede utilizar los siguientes comandos para crearlos y asociar las políticas necesarias. Este primer comando crea el rol de tarea de ECS.

```
aws iam create-role --role-name CWAgentECSTaskRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Después de escribir el comando anterior, anote el valor de `Arn` de la salida de los comandos como “TaskRoleArn”. Tendrá que usarse más tarde cuando se cree la definición de tarea. A continuación, escriba el siguiente comando para asociar las políticas necesarias.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSTaskRole
```

Este siguiente comando crea el rol de ejecución de tareas de ECS.

```
aws iam create-role --role-name CWAgentECSExecutionRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Después de escribir el comando anterior, anote el valor de `Arn` de la salida de los comandos como “ExecutionRoleArn”. Tendrá que usarse más tarde cuando se cree la definición de tarea. A continuación, escriba los siguientes comandos para asociar las políticas necesarias.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSExecutionRole
          
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy \
    --role-name CWAgentECSExecutionRole
```

### Cree la definición de tarea y lance el servicio del daemon
<a name="deploy-container-insights-ECS-instancelevel-taskdefinition"></a>

Cree una definición de tarea y úsela para lanzar el agente de CloudWatch como servicio del daemon. Para crear la definición de tarea, escriba el siguiente comando. En las primeras líneas, sustituya los marcadores de posición con los valores reales de la implementación. *logs-region* es la región de la ubicación de Registros de CloudWatch, mientras que *cluster-region* es la región en la se encuentra el clúster. *task-role-arn* es el Arn del rol de tarea de ECS que utiliza, mientras que *execution-role-arn* es el Arn del rol de puesta en marcha de tareas de ECS.

```
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
AWSLogsRegion=logs-region
Region=cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json \
    | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
    | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
```

A continuación, ejecute el siguiente comando para lanzar el servicio de daemon. Sustituya *cluster-name* y *cluster-region* por el nombre y la Región del clúster de Amazon ECS.

**importante**  
Elimine todas las estrategias del proveedor de capacidad antes de ejecutar este comando. De lo contrario, el comando no funcionará.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs create-service \
    --cluster ${ClusterName} \
    --service-name cwagent-daemon-service \
    --task-definition ecs-cwagent-daemon-service \
    --scheduling-strategy DAEMON \
    --region ${Region}
```

Si aparece este mensaje de error, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, ya ha creado un servicio de daemon llamado `cwagent-daemon-service`. Debe eliminar ese servicio primero, utilizando el siguiente comando como ejemplo.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs delete-service \
    --cluster ${ClusterName} \
    --service cwagent-daemon-service \
    --region ${Region} \
    --force
```

### (Opcional) Configuración avanzada
<a name="deploy-container-insights-ECS-instancelevel-advanced"></a>

Opcionalmente, puede utilizar SSM para especificar otras opciones de configuración para el agente de CloudWatch en los clústeres de Amazon ECS alojados en instancias EC2. Estas opciones son las siguientes:
+ `metrics_collection_interval`: la frecuencia en segundos con la que el agente de CloudWatch recopila métricas. El valor predeterminado es 60. El rango va de 1 a 172 000.
+ `endpoint_override`: (opcional) especifica un punto de enlace diferente al que enviar los registros. Es posible que desee hacerlo si realiza la publicación desde un clúster de una VPC y desea que los datos de registro vayan a un punto de enlace de la VPC.

  El valor de `endpoint_override` debe ser una cadena que sea una URL.
+ `force_flush_interval`: especifica en segundos la cantidad máxima de tiempo que los registros permanecen en el búfer de memoria antes de enviarse al servidor. Independientemente del valor de este campo, si el tamaño de los registros en el búfer alcanza 1 MB, los registros se envían inmediatamente al servidor. El valor predeterminado es 5 segundos.
+ `region`: de forma predeterminada, el agente publica métricas en la misma Región en la que se encuentra la instancia de contenedor de Amazon ECS. Para anular esto, puede especificar una región diferente aquí. Por ejemplo: ., `"region" : "us-east-1"`

A continuación, se muestra un ejemplo de una configuración personalizada:

```
{
    "agent": {
        "region": "us-east-1"
    },
    "logs": {
        "metrics_collected": {
            "ecs": {
                "metrics_collection_interval": 30
            }
        },
        "force_flush_interval": 5
    }
}
```

**Para personalizar la configuración del agente de CloudWatch en los contenedores de Amazon ECS**

1. Asegúrese de que la política **AmazonSSMReadOnlyAccess** esté asociada al rol de ejecución de tarea de Amazon ECS. Para ello, puede escribir el siguiente comando. Este ejemplo presupone que el rol de ejecución de tarea de Amazon ECS es CWAgentECSExecutionRole. Si utiliza otro rol, sustituya el nombre de ese rol en el siguiente comando.

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \
           --role-name CWAgentECSExecutionRole
   ```

1. Cree el archivo de configuración personalizado de forma similar al ejemplo anterior. Asigne a este archivo el nombre `/tmp/ecs-cwagent-daemon-config.json`.

1. Ejecute el siguiente comando para colocar esta configuración en el almacén de parámetros. Sustituya *cluster-region* por la Región del clúster de Amazon ECS. Para ejecutar este comando, debe iniciar sesión en un usuario o rol que tenga la política **AmazonSSMFullAccess**.

   ```
   Region=cluster-region
   aws ssm put-parameter \
       --name "ecs-cwagent-daemon-service" \
       --type "String" \
       --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \
       --region $Region
   ```

1. Descargue el archivo de definición de tarea en un archivo local, como `/tmp/cwagent-ecs-instance-metric.json`

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json -o /tmp/cwagent-ecs-instance-metric.json
   ```

1. Modifique el archivo de definición de tarea. Elimine la siguiente sección:

   ```
   "environment": [
                   {
                       "name": "USE_DEFAULT_CONFIG",
                       "value": "True"
                   }
               ],
   ```

   Sustituya esa sección por la siguiente:

   ```
   "secrets": [
                   {
                       "name": "CW_CONFIG_CONTENT",
                       "valueFrom": "ecs-cwagent-daemon-service"
                   }
               ],
   ```

1. Reinicie el agente como servicio de daemon siguiendo estos pasos:

   1. Ejecute el siguiente comando.

      ```
      TaskRoleArn=task-role-arn
      ExecutionRoleArn=execution-role-arn
      AWSLogsRegion=logs-region
      Region=cluster-region
      cat /tmp/cwagent-ecs-instance-metric.json \
          | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
          | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
      ```

   1. Ejecute el siguiente comando para lanzar el servicio de daemon. Sustituya *cluster-name* y *cluster-region* por el nombre y la Región del clúster de Amazon ECS.

      ```
      ClusterName=cluster-name
      Region=cluster-region
      aws ecs create-service \
          --cluster ${ClusterName} \
          --service-name cwagent-daemon-service \
          --task-definition ecs-cwagent-daemon-service \
          --scheduling-strategy DAEMON \
          --region ${Region}
      ```

      Si aparece este mensaje de error, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, ya ha creado un servicio de daemon llamado `cwagent-daemon-service`. Debe eliminar ese servicio primero, utilizando el siguiente comando como ejemplo.

      ```
      ClusterName=cluster-name
      Region=Region
      aws ecs delete-service \
          --cluster ${ClusterName} \
          --service cwagent-daemon-service \
          --region ${Region} \
          --force
      ```

# Implementación de AWS Distro para OpenTelemetry a fin de recopilar métricas de nivel de instancia EC2 en clústeres de Amazon ECS
<a name="deploy-container-insights-ECS-OTEL"></a>

Siga los pasos de esta sección para usar AWS Distro para OpenTelemetry a fin de recopilar métricas de nivel de instancia EC2 en un clúster de Amazon ECS. Para obtener más información acerca de AWS Distro para OpenTelemetry, consulte [AWS Distro para OpenTelemetry](https://aws.amazon.com/otel/).

En estos pasos se presupone que ya tiene un clúster que ejecuta Amazon ECS. Este clúster debe implementarse con el tipo de lanzamiento EC2. Para obtener más información acerca del uso de AWS Distro para OpenTelemetry con Amazon ECS y acerca de la configuración de un clúster de Amazon ECS para este fin, consulte [Configuración del recopilador de AWS Distro para OpenTelemetry en las métricas de nivel de instancia EC2 de Amazon Elastic Container Service para ECS EC2](https://aws-otel.github.io/docs/setup/ecs#3-setup-the-aws-otel-collector-for-ecs-ec2-instance-metrics). 

**Topics**
+ [Configuración rápida mediante CloudFormation](#container-insights-ECS-OTEL-quicksetup)
+ [Configuración manual y personalizada](#container-insights-ECS-OTEL-custom)

## Configuración rápida mediante CloudFormation
<a name="container-insights-ECS-OTEL-quicksetup"></a>

Descargue el archivo de plantilla de CloudFormation para instalar el recopilador AWS Distro para OpenTelemetry para Amazon ECS en EC2. Ejecute el siguiente comando curl.

```
curl -O https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/ecs/aws-otel-ec2-instance-metrics-daemon-deployment-cfn.yaml
```

Después de descargar el archivo de plantilla, ábralo y reemplace *PATH\$1TO\$1CloudFormation\$1TEMPLATE* con la ruta donde guardó el archivo de plantilla. A continuación, exporte los siguientes parámetros y ejecute el comando CloudFormation, tal y como se muestra en el siguiente comando.
+ **Cluster\$1Name**: el nombre del clúster de Amazon ECS
+ **AWS\$1Region**: la Región a la que se enviarán los datos
+ **PATH\$1TO\$1CloudFormation\$1TEMPLATE**: la ruta en la que guardó el archivo de plantilla de CloudFormation.
+ **comando**: para habilitar el recopilador de AWS Distro para OpenTelemetry para que recopile las métricas de nivel de instancia para Amazon ECS en Amazon EC2, debe especificar `--config=/etc/ecs/otel-instance-metrics-config.yaml` para este parámetro.

```
ClusterName=Cluster_Name
Region=AWS_Region
command=--config=/etc/ecs/otel-instance-metrics-config.yaml
aws cloudformation create-stack --stack-name AOCECS-${ClusterName}-${Region} \
--template-body file://PATH_TO_CloudFormation_TEMPLATE \
--parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
ParameterKey=CreateIAMRoles,ParameterValue=True \
ParameterKey=command,ParameterValue=${command} \
--capabilities CAPABILITY_NAMED_IAM \
--region ${Region}
```

Después de ejecutar este comando, utilice la consola de Amazon ECS para ver si la tarea se está ejecutando.

### Solución de problemas de la configuración rápida
<a name="container-insights-ECS-OTEL-quicksetup-troubleshooting"></a>

Para comprobar el estado de la pila de CloudFormation, escriba el siguiente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stack --stack-name AOCECS-$ClusterName-$Region --region $Region
```

Si ve que el valor de `StackStatus` es distinto de `CREATE_COMPLETE` o `CREATE_IN_PROGRESS`, verifique los eventos de pila para encontrar el error. Escriba el siguiente comando.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stack-events --stack-name AOCECS-$ClusterName-$Region --region $Region
```

Para verificar el estado del servicio del daemon `AOCECS`, ingrese el siguiente comando. En la salida, debería ver que el `runningCount` es igual al `desiredCount` en la sección de implementación. Si no es igual, verifique la sección de errores en la salida.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs describe-services --services AOCECS-daemon-service --cluster $ClusterName --region $Region
```

También puede utilizar la consola de CloudWatch Logs para verificar el registro del agente. Busque el grupo de registro **/aws/ecs/containerinsights/\$1ClusterName\$1/performance**.

## Configuración manual y personalizada
<a name="container-insights-ECS-OTEL-custom"></a>

Siga los pasos de esta sección para implementar manualmente AWS Distro para OpenTelemetry a fin de recopilar métricas de nivel de instancia de los clústeres de Amazon ECS alojados en instancias de Amazon EC2.

### Paso 1: Políticas y roles necesarios
<a name="container-insights-ECS-OTEL-custom-iam"></a>

Se requieren dos roles de IAM. Debe crearlos si aún no existen. Para obtener más información sobre los roles, consulte [Create IAM policy](https://aws-otel.github.io/docs/setup/ecs/create-iam-policy) (Crear una política de IAM) y [Create IAM role](https://aws-otel.github.io/docs/setup/ecs/create-iam-role) (Crear un rol de IAM).

### Paso 2: Cree una definición de tarea
<a name="container-insights-ECS-OTEL-custom-task"></a>

Cree una definición de tarea y úsela para lanzar AWS Distro para OpenTelemetry como servicio del daemon.

Si desea utilizar la plantilla de definición de tareas para la creación de uno de esos recursos, siga las instrucciones que aparecen en [Crear una definición de tarea de EC2 de ECS para una instancia de EC2 con el recopilador de AWS OTel](https://aws-otel.github.io/docs/setup/ecs/task-definition-for-ecs-ec2-instance).

Si desea utilizar la consola de Amazon ECS para crear la definición de tarea, siga las instrucciones que aparecen en [Instalar el recopilador de AWS OTel mediante la creación de una definición de tarea a través de la consola de AWS para métricas de instancias de EC2 de Amazon ECS](https://aws-otel.github.io/docs/setup/ecs/create-task-definition-instance-console).

### Paso 3: Lance el servicio del daemon
<a name="container-insights-ECS-OTEL-custom-launch"></a>

Para lanzar AWS Distro para OpenTelemetry como un servicio daemon, siga las instrucciones que se indican en [Ejecutar la tarea en Amazon Elastic Container Service (Amazon ECS) con el servicio del daemon](https://aws-otel.github.io/docs/setup/ecs/run-daemon-service).

### (Opcional) Configuración avanzada
<a name="container-insights-ECS-OTEL-custom-advancdeconfig"></a>

Opcionalmente, puede utilizar SSM para especificar otras opciones de configuración para AWS Distro para OpenTelemetry en los clústeres de Amazon ECS alojados en instancias de Amazon EC2. Para obtener más información sobre la creación de un archivo de configuración, consulte [Custom OpenTelemetry Configuration](https://aws-otel.github.io/docs/setup/ecs#5-custom-opentelemetry-configuration) (Configuración personalizada de OpenTelemetry). Para obtener más información acerca de las opciones que pueden usarse en el archivo de configuración, consulte [Receptor de Información de contenedores de AWS](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/awscontainerinsightreceiver/README.md).

# Configurar Firelens para enviar registros a registros de CloudWatch
<a name="deploy-container-insights-ECS-logs"></a>

FireLens para Amazon ECS le permite utilizar parámetros de definición de tarea para dirigir registros a Amazon CloudWatch Logs para el almacenamiento y el análisis de registros. FireLens funciona con [Fluent Bit](https://fluentbit.io/) y [Fluentd](https://www.fluentd.org/). AWS le proporciona una imagen Fluent Bit o puede utilizar su propia imagen de Fluentd o Fluent Bit. La creación de definiciones de tareas de Amazon ECS con una configuración de FireLens se admite mediante los SDK de AWS, la AWS CLI y la Consola de administración de AWS. Para obtener más información sobre CloudWatch Logs, consulte [What is CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) (¿Qué es CloudWatch Logs?).

Existen consideraciones clave al utilizar FireLens para Amazon ECS. Para obtener información, consulte [Considerations](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html#firelens-considerations) (Consideraciones).

Para buscar las imágenes de AWS para Fluent Bit, consulte [ Uso de AWS para la imagen de Fluent Bit](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-using-fluentbit.html).

Para crear una definición de tarea que utilice una configuración FireLens, consulte [Creating a task definition that uses a FireLens configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-taskdef.html) (Creación de una definición de tarea que utilice una configuración de FireLens).

**Ejemplo**

En el siguiente ejemplo de definición de tarea se muestra cómo se especifica una configuración de registro que reenvíe registros a un grupo de registros de CloudWatch Logs. Para obtener más información, consulte [¿Qué es Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) en la *Guía del usuario de Amazon CloudWatch Logs*.

En las opciones de configuración de registro, especifique el nombre del grupo de registro y la región en la que existe. Para que Fluent Bit cree el grupo de registro en su nombre, especifique `"auto_create_group":"true"`. También puede especificar el ID de la tarea como prefijo del flujo de registros, para facilitar el filtrado. Para obtener más información, consulte la sección [Fluent Bit Plugin for CloudWatch Logs](https://github.com/aws/amazon-cloudwatch-logs-for-fluent-bit/blob/mainline/README.md).

```
{
	"family": "firelens-example-cloudwatch",
	"taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role",
	"containerDefinitions": [
		{
			"essential": true,
			"image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest",
			"name": "log_router",
			"firelensConfiguration": {
				"type": "fluentbit"
			},
			"logConfiguration": {
				"logDriver": "awslogs",
				"options": {
					"awslogs-group": "firelens-container",
					"awslogs-region": "us-west-2",
					"awslogs-create-group": "true",
					"awslogs-stream-prefix": "firelens"
				}
			},
			"memoryReservation": 50
		 },
		 {
			 "essential": true,
			 "image": "nginx",
			 "name": "app",
			 "logConfiguration": {
				 "logDriver":"awsfirelens",
				 "options": {
					"Name": "cloudwatch_logs",
					"region": "us-west-2",
					"log_key": "log",
                                 "log_group_name": "/aws/ecs/containerinsights/my-cluster/application",
					"auto_create_group": "true",
					"log_stream_name": "my-task-id"
				}
			},
			"memoryReservation": 100
		}
	]
}
```

# Configuración de Información de contenedores en Amazon EKS y Kubernetes
<a name="deploy-container-insights-EKS"></a>

Información de contenedores es compatible con las versiones 1.23 y posteriores de Amazon EKS. El método de instalación de inicio rápido solo es compatible con las versiones 1.24 y posteriores.

El proceso general para configurar Información de contenedores en Amazon EKS o Kubernetes es el siguiente:

1. Compruebe que se cumplen los requisitos previos necesarios.

1. Configure el complemento de observabilidad de EKS de Amazon CloudWatch, el agente de CloudWatch o Distro para OpenTelemetry de AWS en el clúster para que envíe métricas a CloudWatch. 
**nota**  
Para usar Información de contenedores con observabilidad mejorada para Amazon EKS, debe usar el complemento de observabilidad de EKS de Amazon CloudWatch o el agente CloudWatch. Para obtener más información sobre Información de contenedores, consulte [Información de contenedores con observabilidad mejorada para Amazon EKS](container-insights-detailed-metrics.md).  
Para usar Información de contenedores con Fargate, debe usar Distro para OpenTelemetry de AWS. Fargate no admite Información de contenedores con observabilidad mejorada para Amazon EKS.
**nota**  
Información de contenedores ahora es compatible con los nodos de trabajo de Windows en un clúster de Amazon EKS. Información de contenedores con observabilidad mejorada para Amazon EKS también es compatible con Windows. Para obtener información sobre cómo habilitar Información de contenedores en Windows, consulte [Uso del agente CloudWatch con observabilidad mejorada de Información de contenedores habilitada](Container-Insights-EKS-agent.md).

   Para usar Información de contenedores con métricas de OpenTelemetry, instale la versión `v6.0.1-eksbuild.1` o posterior del complemento de observabilidad de EKS de Amazon CloudWatch. Para obtener más información, consulte [Información de contenedores con métricas de OpenTelemetry para Amazon EKS](container-insights-otel-metrics.md).

   Configure Fluent Bit o FluentD para enviar registros a registros de CloudWatch. (Esta opción está habilitada de forma predeterminada si instala el complemento de observabilidad de EKS de Amazon CloudWatch).

   Puede realizar estos pasos a la vez como parte de la configuración de inicio rápido si está utilizando el agente de CloudWatch o realizarlos por separado.

1. (Opcional) Configure el registro del plano de control de Amazon EKS.

1. (Opcional) Configure el agente de CloudWatch como un punto de enlace de StatsD en el clúster para que envíe las métricas de StatsD a CloudWatch.

1. (Opcional) Habilite App Mesh Envoy Access Logs.

Con la versión original de Información de contenedores, las métricas recopiladas y los registros incorporados se cobran como métricas personalizadas. Con Información de contenedores, con una observabilidad mejorada para Amazon EKS, las métricas y los registros de Información de contenedores se cobran por observación en lugar de cobrarse por métrica almacenada o registro incorporado. Para obtener más información sobre los precios de CloudWatch, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

**Topics**
+ [Verificación de los requisitos previos de Información de contenedores en CloudWatch](Container-Insights-prerequisites.md)
+ [Uso del agente CloudWatch con observabilidad mejorada de Información de contenedores habilitada](Container-Insights-EKS-agent.md)
+ [Uso de AWS Distro para OpenTelemetry](Container-Insights-EKS-otel.md)
+ [Envíe los registros a CloudWatch Logs](Container-Insights-EKS-logs.md)
+ [Actualización o eliminación de Información de contenedores en Amazon EKS y en Kubernetes](ContainerInsights-update-delete.md)

# Verificación de los requisitos previos de Información de contenedores en CloudWatch
<a name="Container-Insights-prerequisites"></a>

Antes de instalar Información de contenedores en Amazon EKS o Kubernetes, verifique lo siguiente: Estos prerrequisitos se aplican tanto si utiliza el agente de CloudWatch como AWS Distro para OpenTelemetry a fin de configurar Información de contenedores en clústeres de Amazon EKS.
+ Cuenta con un clúster funcional de Amazon EKS o de Kubernetes con nodos asociados en una de las Regiones que admite Información de contenedores para Amazon EKS y Kubernetes. Para ver la lista de las regiones de admitidas, consulte [Información de contenedores](ContainerInsights.md).
+ Tiene `kubectl` instalado y se está ejecutando. Para obtener más información, consulte [Installing `kubectl`](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la *Guía del usuario de Amazon EKS*.
+ Si utiliza Kubernetes con AWS en lugar de utilizar Amazon EKS, los siguientes prerrequisitos también son necesarios:
  + Asegúrese de que el clúster de Kubernetes tiene activado el control de acceso basado en roles (RBAC). Para obtener más información, consulte [Using RBAC Authorization](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) en la documentación de Kubernetes. 
  + El kubelet ha habilitado el modo de autorización de Webhook. Para obtener más información, consulte [Kubelet authentication/authorization](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/) en la documentación de Kubernetes.

También debe conceder permisos de IAM para permitir que los nodos de trabajo de Amazon EKS envíen métricas y registros a CloudWatch. Hay dos formas de hacer esto:
+ Adjunte una política al rol de IAM de los nodos de trabajo. Esto funciona tanto para clústeres de Amazon EKS como para otros clústeres de Kubernetes.
+ Utilice un rol de IAM para las cuentas de servicio para el clúster y adjunte la política a este rol. Esto solo funciona para clústeres de Amazon EKS.

La primera opción concede permisos a CloudWatch para todo el nodo, mientras que el uso de un rol de IAM para la cuenta de servicio da acceso a CloudWatch sólo a los pods adecuados de DaemonSet .

**Asociación de una política al rol de IAM de los nodos de trabajo**

Siga estos pasos para adjuntar la política al rol de IAM de los nodos de trabajo. Esto funciona tanto para los clústeres de Amazon EKS como para clústeres de Kubernetes fuera de Amazon EKS. 

**Para adjuntar la política necesaria al rol de IAM de los nodos de trabajo**

1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Seleccione una de las instancias de nodo de trabajo y elija el rol de IAM en la descripción.

1. En la página del rol de IAM, elija **Attach policies** (Adjuntar políticas).

1. En la lista de políticas, seleccione la casilla junto a **CloudWatchAgentServerPolicy**. Si es necesario, utilice el cuadro de búsqueda para encontrar la política.

1. Seleccione **Asociar políticas**.

Si está ejecutando un clúster de Kubernetes fuera de Amazon EKS, es posible que no tenga adjunto un rol de IAM a los nodos de trabajo. En ese caso, primero debe adjuntar un rol de IAM a la instancia y, a continuación, agregar la política tal y como se explica en los pasos anteriores. Para obtener más información sobre cómo se asocia un rol a una instancia, consulte [Attaching an IAM Role to an Instance](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/iam-roles-for-amazon-ec2.html#attach-iam-role) en la *Guía del usuario de Amazon EC2*.

Si ejecuta un clúster de Kubernetes fuera de Amazon EKS y desea que se recopilen las id. de volumen de EBS en las métricas, debe agregar otra política al rol de IAM asociado a la instancia. Añada lo siguiente como política insertada. Para obtener más información consulte [Adding and Removing IAM Identity Permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) (Incorporación y eliminación de permisos de identidad de IAM) en la *Guía del usuario de IAM*.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ec2:DescribeVolumes"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

**Uso de un rol de cuenta de servicio de IAM**

Este método solo funciona en clústeres de Amazon EKS.

**Para conceder permiso a CloudWatch con un rol de cuenta de servicio IAM**

1. Si aún no lo ha hecho, debe habilitar los roles de IAM para las cuentas de servicio en el clúster. Para obtener más información, consulte [Habilitación de roles de IAM para cuentas de servicio en el clúster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html). 

1. Si aún no lo ha hecho, debe configurar la cuenta de servicio para usar un rol de IAM. Para obtener más información, consulte [Configuración de una cuenta de servicio de Kubernetes para asumir un rol de IAM](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html). 

   Cuando cree el rol, adjunte la política de IAM **CloudWatchAgentServerPolicy** al rol además de la política que cree para el rol. Además, la cuenta de servicio de Kubernetes asociada que está vinculada a este rol debe crearse en el espacio de nombres de `amazon-cloudwatch`, donde se implementarán los daemonsets CloudWatch y Fluent Bit en los próximos pasos

1. Si aún no lo ha hecho, debe adjuntar el rol de IAM con una cuenta de servicio en el clúster. Para obtener más información, consulte [Configuración de una cuenta de servicio de Kubernetes para asumir un rol de IAM](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html).

# Uso del agente CloudWatch con observabilidad mejorada de Información de contenedores habilitada
<a name="Container-Insights-EKS-agent"></a>

Utilice las instrucciones de una de las siguientes secciones para configurar Información de contenedores en un clúster de Amazon EKS o un clúster de Kubernetes mediante el agente de CloudWatch. El método de instalación de inicio rápido solo es compatible con las versiones 1.24 y posteriores de Amazon EKS.

**nota**  
Puede instalar Información de contenedores siguiendo las instrucciones de cualquiera de las siguientes secciones. No es necesario seguir los tres conjuntos de instrucciones.

**Topics**
+ [Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch](Container-Insights-setup-EKS-addon.md)
+ [Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes](Container-Insights-setup-EKS-quickstart.md)
+ [Configuración del agente de CloudWatch para recopilar las métricas del clúster](Container-Insights-setup-metrics.md)

# Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch
<a name="Container-Insights-setup-EKS-addon"></a>

Puede usar el complemento Amazon EKS para instalar Información de contenedores con observabilidad mejorada para Amazon EKS. El complemento instala el agente de CloudWatch para enviar métricas de infraestructura desde el clúster, instala Fluent Bit para enviar los registros del contenedor y también permite a [Application Signals](CloudWatch-Application-Monitoring-Sections.md) de CloudWatch enviar la telemetría de rendimiento de las aplicaciones.

Cuando utiliza la versión 1.5.0 o posterior del complemento de Amazon EKS, Información de contenedores se habilita en los nodos de trabajo de Linux y Windows del clúster. Application Signals no es compatible con Windows en Amazon EKS.

El complemento Amazon EKS no es compatible con los clústeres que ejecutan Kubernetes en lugar de Amazon EKS.

Para obtener más información acerca del complemento observabilidad EKS de Amazon CloudWatch, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md).

Si usa la versión 3.1.0 o una versión posterior del complemento, puede usar EKS Pod Identity para conceder los permisos necesarios al complemento. La opción recomendada es EKS Pod Identity, ya que ofrece ventajas como los privilegios mínimos, la rotación de credenciales y la auditabilidad. Además, al usar EKS Pod Identity también puede instalar el complemento de EKS como parte de la propia creación del clúster.

**Cómo instalar el complemento de observabilidad de EKS de Amazon CloudWatch**

1. Siga los pasos de [asociación de EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create/) para crear el rol de IAM y configurar el agente de EKS Pod Identity.

1. Asocie una política de IAM que conceda los permisos necesarios para su rol. Reemplace *my-role* por el nombre de su rol de IAM del paso anterior.

   ```
   aws iam attach-role-policy \
    --role-name my-role \
   --policy-arn=arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
   ```

1. Ingrese el siguiente comando, usando el rol de IAM que creó en el paso anterior:

   ```
   aws eks create-addon \
   --addon-name amazon-cloudwatch-observability \
   --cluster-name my-cluster-name \
   --pod-identity-associations serviceAccount=cloudwatch-agent,roleArn=arn:aws:iam::111122223333:role/my-role
   ```

# Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes
<a name="Container-Insights-setup-EKS-quickstart"></a>

**importante**  
Si va a instalar Información de contenedores en un clúster de Amazon EKS, recomendamos que utilice el complemento observabilidad de EKS de Amazon CloudWatch para la instalación, en lugar de seguir las instrucciones de esta sección. Además, para recuperar las redes de computación acelerada, debe usar el complemento de EKS Observabilidad de Amazon CloudWatch. Para obtener más información e instrucciones, consulte [Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch](Container-Insights-setup-EKS-addon.md).

Para completar la configuración de Información de contenedores, puede seguir las instrucciones de inicio rápido de esta sección. Si instala Información de contenedores en un clúster de Amazon EKS y sigue las instrucciones de esta sección a partir del 6 de noviembre de 2023, se instalará con observabilidad mejorada para Amazon EKS en el clúster.

**importante**  
Antes de completar los pasos de esta sección, debe haber verificado los prerrequisitos incluidos los permisos de IAM. Para obtener más información, consulte [Verificación de los requisitos previos de Información de contenedores en CloudWatch](Container-Insights-prerequisites.md). 

También puede seguir las instrucciones de las dos secciones siguientes: [Configuración del agente de CloudWatch para recopilar las métricas del clúster](Container-Insights-setup-metrics.md) y [Envíe los registros a CloudWatch Logs](Container-Insights-EKS-logs.md). Estas secciones proporcionan más detalles sobre cómo funciona el agente de CloudWatch con Amazon EKS y con Kubernetes, pero se requiere que realice más pasos de instalación.

Con la versión original de Información de contenedores, las métricas recopiladas y los registros incorporados se cobran como métricas personalizadas. Con Información de contenedores, con una observabilidad mejorada para Amazon EKS, las métricas y los registros de Información de contenedores se cobran por observación en lugar de cobrarse por métrica almacenada o registro incorporado. Para obtener más información sobre los precios de CloudWatch, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

**nota**  
Amazon ha lanzado recientemente Fluent Bit como la solución de registro predeterminada para Información de contenedores con importantes mejoras de rendimiento. Se recomienda que utilice Fluent Bit en lugar de Fluentd.

## Inicio rápido con el operador del agente de CloudWatch y Fluent Bit
<a name="Container-Insights-setup-EKS-quickstart-FluentBit"></a>

Hay dos configuraciones para Fluent Bit: una versión optimizada y una versión que proporciona una experiencia más similar a Fluentd. La configuración de inicio rápido utiliza la versión optimizada. Para obtener más detalles sobre la configuración compatible con Fluentd, consulte [Configure Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs](Container-Insights-setup-logs-FluentBit.md).

El operador del agente de CloudWatch es un contenedor adicional que se instala en un clúster de Amazon EKS. Sigue el modelo del operador OpenTelemetry para Kubernetes. El operador administra el ciclo de vida de los recursos de Kubernetes en un clúster. Instala el agente deCloudWatch, DCGM Exporter (NVIDIA) y AWS Neuron Monitor en un clúster de Amazon EKS y los administra. Fluent Bit y el agente de CloudWatch para Windows se instalan directamente en un clúster de Amazon EKS sin que el operador los administre. 

Si busca una solución de autoridad de certificación más segura y con más características, el operador del agente de CloudWatch necesita cert-manager, una solución ampliamente adoptada para la administración de certificados TLS en Kubernetes. El uso de cert-manager simplifica el proceso de obtención, renovación, administración y uso de estos certificados. Asegura que los certificados sean válidos y estén actualizados, e intenta renovarlos en un momento configurado antes de que caduquen. Además, cert-manager también facilita la emisión de certificados desde una variedad de orígenes compatibles, como AWS Certificate Manager Private Certificate Authority.

**Implementación de Información de contenedores mediante el inicio rápido**

1. Instale cert-manager si aún no está instalado en el clúster. Para obtener más información, consulte [cert-manager Installation](https://cert-manager.io/docs/installation/).

1. Introduzca el siguiente comando para instalar las definiciones de recursos personalizados (CRDS).

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl apply --server-side -f -
   ```

1. Introduzca el siguiente comando para instalar el operador. En este comando, *my\$1cluster\$1name* es el nombre del clúster de Amazon EKS o el de Kubernetes y *my\$1cluster\$1region* es el nombre de la región en la que se publican los registros. Le recomendamos que utilice la misma región en la que implemente el clúster para reducir los costes de transferencia de datos salientes de AWS.

   ```
   ClusterName=my-cluster-name
   RegionName=my-cluster-region
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -
   ```

   Por ejemplo, para implementar Información de contenedores en el clúster denominado `MyCluster` y publicar los registros y las métricas en el Oeste de EE. UU (Oregón), ingrese el siguiente comando.

   ```
   ClusterName='MyCluster'
   RegionName='us-west-2'
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -
   ```

**Migración desde Información de contenedores**

Si ya tiene Información de contenedores configurado en un clúster de Amazon EKS y desea migrar a Información de contenedores con observabilidad mejorada para Amazon EKS, consulte [Actualización a Información de contenedores con observabilidad mejorada para Amazon EKS en CloudWatch](Container-Insights-upgrade-enhanced.md)

**Eliminación de Información de contenedores**

Si desea eliminar Información de contenedores después de utilizar la configuración de inicio rápido, escriba los siguientes comandos.

```
ClusterName=my-cluster-name 
RegionName=my-cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl delete -f -
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl delete -f -
```

# Configuración del agente de CloudWatch para recopilar las métricas del clúster
<a name="Container-Insights-setup-metrics"></a>

**importante**  
Si instala Información de contenedores en un clúster de Amazon EKS, recomendamos que utilice el complemento observabilidad de EKS de Amazon CloudWatch, en lugar de seguir las instrucciones de esta sección. Para obtener más información e instrucciones, consulte [Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch](Container-Insights-setup-EKS-addon.md).

Para configurar Información de contenedores para recopilar métricas de, puede seguir los pasos de [Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes](Container-Insights-setup-EKS-quickstart.md) o los de esta sección. En los pasos que se describen a continuación, configure el agente de CloudWatch para que pueda recopilar las métricas de los clústeres.

Si instala Información de contenedores en un clúster de Amazon EKS y sigue las instrucciones de esta sección a partir del 6 de noviembre de 2023, se instalará con observabilidad mejorada para Amazon EKS en el clúster.

## Paso 1: Cree un espacio de nombres para CloudWatch
<a name="create-namespace-metrics"></a>

Siga el paso que se describe a continuación para crear un espacio de nombres denominado `amazon-cloudwatch` para CloudWatch. Puede omitir este paso si ya ha creado este espacio de nombres.

**Para crear un espacio de nombres para CloudWatch**
+ Escriba el siguiente comando.

  ```
  kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
  ```

## Paso 2: Cree una cuenta de servicio en el clúster
<a name="create-service-account"></a>

Utilice uno de los siguientes métodos para crear una cuenta de servicio para el agente de CloudWatch, si todavía no dispone de una.
+ Uso de `kubectl`
+ Utilizar un archivo `kubeconfig`

### Uso de `kubectl` para la autenticación
<a name="use-kubectl"></a>

**Para utilizar `kubectl` con el fin de crear una cuenta de servicio para el agente de CloudWatch**
+ Escriba el siguiente comando.

  ```
  kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
  ```

Si no ha seguido los pasos anteriores, pero ya tiene una cuenta de servicio que desea utilizar para el agente de CloudWatch, debe asegurarse de que sigue las siguientes reglas. Además, en el resto de los pasos de la instalación de Información de contenedores debe utilizar el nombre de esa cuenta de servicio en lugar de `cloudwatch-agent`.

```
rules:
  - apiGroups: [""]
    resources: ["pods", "nodes", "endpoints"]
    verbs: ["list", "watch"]
  - apiGroups: [ "" ]
    resources: [ "services" ]
    verbs: [ "list", "watch" ]
  - apiGroups: ["apps"]
    resources: ["replicasets", "daemonsets", "deployments", "statefulsets"]
    verbs: ["list", "watch"]
  - apiGroups: ["batch"]
    resources: ["jobs"]
    verbs: ["list", "watch"]
  - apiGroups: [""]
    resources: ["nodes/proxy"]
    verbs: ["get"]
  - apiGroups: [""]
    resources: ["nodes/stats", "configmaps", "events"]
    verbs: ["create", "get"]
  - apiGroups: [""]
    resources: ["configmaps"]
    resourceNames: ["cwagent-clusterleader"]
    verbs: ["get","update"]
  - nonResourceURLs: ["/metrics"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [ "discovery.k8s.io" ]
    resources: [ "endpointslices" ]
    verbs: [ "list", "watch", "get" ]
```

### Uso de `kubeconfig` para la autenticación
<a name="use-kubeconfig"></a>

También puede utilizar un archivo `kubeconfig` para la autenticación. Este método evita la necesidad de una cuenta de servicio al especificar directamente la ruta de `kubeconfig` en la configuración del agente de CloudWatch. Además, permite dejar de depender de la API del plano de control de Kubernetes para la autenticación, lo que agiliza la configuración y puede aumentar la seguridad, ya que la autenticación se administra a través del archivo kubeconfig. 

Para usar este método, actualice el archivo de configuración de su agente de CloudWatch para especificar la ruta del archivo `kubeconfig`, como en el siguiente ejemplo.

```
{
  "logs": {
    "metrics_collected": {
      "kubernetes": {
        "cluster_name": "YOUR_CLUSTER_NAME",
        "enhanced_container_insights": false,
        "accelerated_compute_metrics": false,
        "tag_service": false,
        "kube_config_path": "/path/to/your/kubeconfig" 
        "host_ip": "HOSTIP"
      }
    }
  }
}
```

Para crear un archivo `kubeconfig`, cree una solicitud de firma de certificado (CSR) para el usuario `admin/{create_your_own_user}` con el rol `system:masters` de Kubernetes. Luego, firme con la autoridad de certificación (CA) del clúster de Kubernetes y cree el archivo `kubeconfig`.

## Paso 3: Cree un ConfigMap para el agente de CloudWatch
<a name="create-configmap"></a>

Siga los pasos que se describen a continuación para crear un ConfigMap para el agente de CloudWatch.

**Para crear un ConfigMap para el agente de CloudWatch**

1. Descargue el archivo YAML de ConfigMap en el host de cliente de `kubectl` ejecutando el siguiente comando:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap-enhanced.yaml
   ```

1. Edite el archivo YAML que ha descargado, tal y como se indica a continuación:
   + **cluster\$1name**: en la sección `kubernetes`, reemplace `{{cluster_name}}` con el nombre del clúster. Elimine los caracteres `{{}}`. De forma alternativa, si utiliza un clúster de Amazon EKS, puede eliminar el campo `"cluster_name"` y el valor. Si lo hace, el agente de CloudWatch detecta el nombre del clúster a partir de las etiquetas de Amazon EC2.

1. (Opcional) Realice más cambios en ConfigMap en función de sus requisitos de supervisión, tal y como se indica a continuación:
   + **metrics\$1collection\$1interval**: en la sección `kubernetes`, puede especificar la frecuencia con la que el agente recopila las métricas. El valor predeterminado es de 60 segundos. El valor predeterminado del intervalo de recopilación de cadvisor en kubelet es de 15 segundos, por lo que no debe establecer este valor en menos de 15 segundos.
   + **endpoint\$1override**: en la sección `logs`, puede especificar el punto de enlace de CloudWatch Logs si desea anular el punto de enlace predeterminado. Es posible que desee hacerlo si realiza la publicación desde un clúster de una VPC y desea que los datos vayan a un punto de enlace de la VPC.
   + **force\$1flush\$1interval**: en la sección `logs`, puede especificar el intervalo para los eventos de registro por lotes antes de que se publiquen en CloudWatch Logs. El valor predeterminado es de 5 segundos.
   + **Región**: de forma predeterminada, el agente publica las métricas en la Región donde se encuentra el nodo de trabajo. Para cambiar este comportamiento, puede agregar un campo `region` en la sección `agent`: por ejemplo `"region":"us-west-2"`
   + Sección **statsd**: si desea que el agente CloudWatch Logs se ejecute también como agente de escucha StatsD en cada nodo de trabajo de su clúster, puede agregar una la sección`statsd` a las `metrics`, como en el ejemplo siguiente. Para obtener información sobre otras opciones de StatsD para esta sección, consulte [Recuperación de las métricas personalizadas con StatsD](CloudWatch-Agent-custom-metrics-statsd.md).

     ```
     "metrics": {
       "metrics_collected": {
         "statsd": {
           "service_address":":8125"
         }
       }
     }
     ```

     A continuación, se muestra un ejemplo completo de la sección JSON. Si utiliza un archivo `kubeconfig` para la autenticación, agregue el parámetro `kube_config_path` para especificar la ruta del archivo kubeconfig.

     ```
     {
         "agent": {
             "region": "us-east-1"
         },
         "logs": {
             "metrics_collected": {
                 "kubernetes": {
                     "cluster_name": "MyCluster",
                     "metrics_collection_interval": 60,
                     "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication
                 }
             },
             "force_flush_interval": 5,
             "endpoint_override": "logs.us-east-1.amazonaws.com"
         },
         "metrics": {
             "metrics_collected": {
                 "statsd": {
                     "service_address": ":8125"
                 }
             }
         }
     }
     ```

1. Cree el ConfigMap en el clúster ejecutando el siguiente comando.

   ```
   kubectl apply -f cwagent-configmap-enhanced.yaml
   ```

## Paso 4: Implemente el agente de CloudWatch como un DaemonSet
<a name="deploy-agent-yaml"></a>

Para terminar la instalación del agente de CloudWatch y comenzar a recopilar las métricas de contenedor, siga los pasos que se describen a continuación.

**Para implementar el agente de CloudWatch como un DaemonSet**

1. 
   + Si no desea utilizar StatsD en el clúster, escriba el siguiente comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
     ```
   + Si desea utilizar StatsD, siga estos pasos:

     1. Descargue el archivo YAML del DaemonSet en el host de cliente de `kubectl` ejecutando el siguiente comando.

        ```
        curl -O  https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
        ```

     1. Borre el comentario de la sección `port` en el archivo `cwagent-daemonset.yaml` como se indica a continuación: 

        ```
        ports:
          - containerPort: 8125
            hostPort: 8125
            protocol: UDP
        ```

     1. Implemente el agente de CloudWatch en el clúster con el siguiente comando.

        ```
        kubectl apply -f cwagent-daemonset.yaml
        ```

     1. Implemente el agente de CloudWatch en los nodos de Windows de su clúster ejecutando el siguiente comando. El oyente StatsD no es compatible con el agente de CloudWatch en Windows.

        ```
        kubectl apply -f cwagent-daemonset-windows.yaml
        ```

1. Compruebe que el agente está implementado ejecutando el siguiente comando.

   ```
   kubectl get pods -n amazon-cloudwatch
   ```

Cuando finaliza, el agente de CloudWatch crea un grupo de registros denominado `/aws/containerinsights/Cluster_Name/performance` y envía los eventos de registro de rendimiento a este grupo de registros. Si también configura el agente como un agente de escucha de StatsD, el agente también escucha las métricas de StatsD en el puerto 8125 con la dirección IP del nodo en el que está programado el pod de la aplicación.

### Solución de problemas
<a name="ContainerInsights-deploy-troubleshooting"></a>

Si el agente no se implementa correctamente, pruebe lo siguiente:
+ Ejecute el siguiente comando para obtener la lista de pods.

  ```
  kubectl get pods -n amazon-cloudwatch
  ```
+ Ejecute el siguiente comando y compruebe los eventos de la parte inferior de la salida.

  ```
  kubectl describe pod pod-name -n amazon-cloudwatch
  ```
+ Ejecute el siguiente comando para comprobar los registros.

  ```
  kubectl logs pod-name  -n amazon-cloudwatch
  ```

# Uso de AWS Distro para OpenTelemetry
<a name="Container-Insights-EKS-otel"></a>

Puede configurar Información de contenedores de manera que recopile métricas de clústeres de Amazon EKS mediante el recopilador de AWS Distro para OpenTelemetry. Para obtener más información acerca de AWS Distro para OpenTelemetry, consulte [AWS Distro para OpenTelemetry](https://aws.amazon.com/otel/). 

**importante**  
Si hace la instalación mediante AWS Distro para OpenTelemetry, instalará Información de contenedores, pero no obtendrá Información de contenedores con observabilidad mejorada para Amazon EKS. No recopilarás las métricas detalladas compatibles con Información de contenedores con observabilidad mejorada para Amazon EKS.

La forma de configurar Información de contenedores depende de si el clúster está alojado en instancias de Amazon EC2 o en AWS Fargate.

## Clústeres de Amazon EKS alojados en Amazon EC2
<a name="Container-Insights-EKS-otel-EC2"></a>

Si aún no lo ha hecho, asegúrese de que ha cumplido los prerrequisitos incluidos los roles de IAM necesarios. Para obtener más información, consulte [Verificación de los requisitos previos de Información de contenedores en CloudWatch](Container-Insights-prerequisites.md).

Amazon proporciona un gráfico de Helm que puede utilizar para configurar la supervisión de Amazon Elastic Kubernetes Service en Amazon EC2. Esta supervisión utiliza el recolector de AWS Distro para OpenTelemetry (ADOT) para las métricas, y Fluent Bit para los registros. Por lo tanto, el gráfico de Helm es útil para los clientes que utilizan Amazon EKS en Amazon EC2 y desean recopilar métricas y registros para enviarlos a Información de contenedores de CloudWatch. Para obtener más información acerca de este gráfico de Helm, consulte [Gráfico de Helm de ADOT para EKS en métricas y registros de EC2 en Información de contenedores de Amazon CloudWatch](https://github.com/aws-observability/aws-otel-helm-charts/tree/main/charts/adot-exporter-for-eks-on-ec2). 

También puede utilizar las instrucciones del resto de esta sección.

En primer lugar, implemente el recopilador de AWS Distro para OpenTelemetry como DaemonSet si escribe el siguiente comando. 

```
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml |
kubectl apply -f -
```

Utilice el siguiente comando para confirmar que el recopilador se está ejecutando.

```
kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks
```

Si el resultado de este comando incluye varios pods en el estado `Running`, el recopilador se está ejecutando y recopilando métricas del clúster. El recopilador crea un grupo de registros denominado `aws/containerinsights/cluster-name/performance` y le envía los eventos de registro de rendimiento.

Para obtener información sobre cómo ver las métricas Información de contenedores en CloudWatch, consulte [Visualización de las métricas de Información de contenedores](Container-Insights-view-metrics.md).

AWS también ha proporcionado documentación sobre GitHub para esta situación. Si desea personalizar las métricas y los registros que Información de contenedores publica, consulte [https://aws-otel.github.io/docs/getting-started/container-insights/eks-infra](https://aws-otel.github.io/docs/getting-started/container-insights/eks-infra).

## Clústeres de Amazon EKS alojados en Fargate
<a name="Container-Insights-EKS-otel-Fargate"></a>

Para obtener instrucciones acerca de cómo configurar e implementar un recopilador ADOT de manera que recopile métricas del sistema de cargas de trabajo implementadas en un clúster de Amazon EKS en Fargate y las envíe a Información de contenedores de CloudWatch, consulte [Información de contenedores de EKS en Fargate](https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate) en la documentación de AWS Distro para OpenTelemetry.

# Envíe los registros a CloudWatch Logs
<a name="Container-Insights-EKS-logs"></a>

Para enviar registros de los contenedores a Registros de Amazon CloudWatch, puede utilizar Fluent Bit. Para obtener más información, consulte [Fluent Bit](https://fluentbit.io/).

**nota**  
A partir del 10 de febrero de 2025, AWS ha dejado de admitir FluentD como reenviador de registros a Registros de CloudWatch. Recomendamos que utilice Fluent Bit, que es una alternativa ligera y eficiente en el uso de recursos. Las implantaciones existentes de FluentD seguirán en funcionamiento. Migre las canalizaciones de registro a Fluent Bit para garantizar la compatibilidad continuada y un rendimiento óptimo.   
Información de contenedores anteriormente también admitía el uso de FluentD para enviar registros desde los contenedores. FluentD ha quedado obsoleto y ya no es compatible con Información de contenedores. En su lugar, utilice Fluent Bit.

**Topics**
+ [Configure Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs](Container-Insights-setup-logs-FluentBit.md)
+ [(Opcional) Configure el registro del plano de control de Amazon EKS](Container-Insights-setup-control-plane-logging.md)
+ [(Opcional) Habilitar la característica Use\$1Kubelet para clústeres grandes](ContainerInsights-use-kubelet.md)

# Configure Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs
<a name="Container-Insights-setup-logs-FluentBit"></a>

Las siguientes secciones le ayudan a implementar Fluent Bit para enviar registros desde contenedores a CloudWatch Logs.

**Topics**
+ [Configuración de Fluent Bit](#Container-Insights-FluentBit-setup)
+ [Compatibilidad con registros de varias líneas](#ContainerInsights-fluentbit-multiline)
+ [(Opcional) Reducción del volumen de registros del Fluent Bit](#ContainerInsights-fluentbit-volume)
+ [Solución de problemas](#Container-Insights-FluentBit-troubleshoot)
+ [Panel de control](#Container-Insights-FluentBit-dashboard)

## Configuración de Fluent Bit
<a name="Container-Insights-FluentBit-setup"></a>

Para configurar Fluent Bit para recopilar registros de los contenedores, puede seguir los pasos de [Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes](Container-Insights-setup-EKS-quickstart.md) o puede seguir los pasos de esta sección.

Con cualquiera de los métodos, el rol de IAM que está adjunto a los nodos del clúster debe tener permisos suficientes. Para obtener más información sobre los permisos necesarios para ejecutar un clúster de Amazon EKS, consulte [Amazon EKS IAM Policies, Roles, and Permissions](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) (Permisos, roles y políticas de IAM de Amazon EKS) en la *Guía del usuario de Amazon EKS*.

En los pasos que se describen a continuación, va a configurar Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs. Cuando se completa este paso, Fluent Bit crea los siguientes grupos de registros si todavía no existen.

**importante**  
Si ya tiene Fluentd configurado en Información de contenedores y el DaemonSet de Fluentd no funciona según lo esperado (esto puede ocurrir si utiliza el tiempo de ejecución `containerd`), debe desinstalarlo antes de instalar FluentBit para evitar que Fluentd procese los mensajes de registro de errores de Fluentd. De lo contrario, debe desinstalar Fluentd inmediatamente después de haber instalado FluentBit correctamente. Desinstalar Fluentd después de instalar Fluent Bit garantiza la continuidad del registro durante este proceso de migración. Solo se necesita uno de Fluent Bit o Fluentd para enviar registros a registros de CloudWatch.


| Nombre de grupo de registro | Fuente de registros | 
| --- | --- | 
|  `/aws/containerinsights/Cluster_Name/application`  |  Todos los archivos de registros de `/var/log/containers`  | 
|  `/aws/containerinsights/Cluster_Name/host`  |  Archivos de registros de `/var/log/dmesg`, `/var/log/secure` y `/var/log/messages`  | 
|  `/aws/containerinsights/Cluster_Name/dataplane`  |  Los registros en `/var/log/journal` para `kubelet.service`, `kubeproxy.service` y `docker.service`.  | 

**Para instalar Fluent Bit con el fin de enviar registros desde contenedores a CloudWatch Logs**

1. Si aún no tiene un espacio de nombres llamado `amazon-cloudwatch`, cree uno con el siguiente comando:

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
   ```

1. Ejecute el siguiente comando para crear un ConfigMap denominado `cluster-info` con el nombre del clúster y la Región a la que se enviarán los registros. Sustituya *cluster-name* y *cluster-region* por el nombre y la Región del clúster.

   ```
   ClusterName=cluster-name
   RegionName=cluster-region
   FluentBitHttpPort='2020'
   FluentBitReadFromHead='Off'
   [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
   [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
   kubectl create configmap fluent-bit-cluster-info \
   --from-literal=cluster.name=${ClusterName} \
   --from-literal=http.server=${FluentBitHttpServer} \
   --from-literal=http.port=${FluentBitHttpPort} \
   --from-literal=read.head=${FluentBitReadFromHead} \
   --from-literal=read.tail=${FluentBitReadFromTail} \
   --from-literal=logs.region=${RegionName} -n amazon-cloudwatch
   ```

   En este comando, `FluentBitHttpServer` para supervisar las métricas del complemento está activado de forma predeterminada. Para desactivarlo, cambie la tercera línea del comando a `FluentBitHttpPort=''` (cadena vacía) en el comando.

   Además, de forma predeterminada, Fluent Bit lee los archivos de registro en cola y capturará solo los registros nuevos después de implementarlos. Si desea lo contrario, establezca `FluentBitReadFromHead='On'` y recopilará todos los registros en el sistema de archivos.

1. Descargue e implemente el daemonSet de Fluent Bit en el clúster con uno de los siguientes comandos.
   + Si desea la configuración optimizada de Fluent Bit para computadoras con Linux, ejecute este comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
     ```
   + Si desea la configuración optimizada de Fluent Bit para computadoras con Windows, ejecute este comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-windows.yaml
     ```
   + Si utiliza computadoras con Linux y desea la configuración de Fluent Bit que sea más similar a Fluentd, ejecute este comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-compatible.yaml
     ```
**importante**  
De forma predeterminada, la configuración daemonset de Fluent Bit establece el nivel de registro en INFO, lo que puede generar mayores costes de ingesta de registros de CloudWatch. Si quiere reducir el volumen y los costes de la ingesta de registros, puede cambiar el nivel de registro a ERROR.  
Para obtener más información acerca de cómo reducir el volumen del registro, consulte [(Opcional) Reducción del volumen de registros del Fluent Bit](#ContainerInsights-fluentbit-volume)

1. Especifique el siguiente comando para validar la implementación. Cada nodo debe tener un pod denominado **fluent-bit-\$1**.

   ```
   kubectl get pods -n amazon-cloudwatch
   ```

Los pasos anteriores crean los siguientes recursos en el clúster:
+ Una cuenta de servicio denominada `Fluent-Bit` en el espacio de nombres `amazon-cloudwatch`. Esta cuenta de servicio se utiliza para ejecutar el DaemonSet de FluentD. Para obtener más información, consulte [Managing Service Accounts](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/) en la documentación de Kubernetes.
+ Un rol de clúster denominado `Fluent-Bit-role` en el espacio de nombres `amazon-cloudwatch`. Este rol de clúster concede los permisos `get`, `list` y `watch` para los registros de los pods a la cuenta de servicio `Fluent-Bit`. Para obtener información, consulte [API Overview](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#api-overview/) en la documentación de Kubernetes.
+ Un ConfigMap denominado `Fluent-Bit-config` en el espacio de nombres `amazon-cloudwatch`. Este ConfigMap contiene la configuración que va a utilizar Fluent Bit. Para obtener más información, consulte [Configure a Pod to Use a ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/) en la documentación de tareas de Kubernetes.

Si desea verificar la configuración de Fluent Bit, siga estos pasos.

**Verifique la configuración de Fluent Bit**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, seleccione **Grupos de registro**.

1. Asegúrese de que está en la Región donde ha implementado Fluent Bit.

1. Verifique la lista de los grupos de registros de la Región. Debería ver lo siguiente:
   + `/aws/containerinsights/Cluster_Name/application`
   + `/aws/containerinsights/Cluster_Name/host`
   + `/aws/containerinsights/Cluster_Name/dataplane`

1. Desplácese a uno de estos grupos de registro y verifique la **Last Event Time** (Hora del último evento) para los flujos de registro. Si es reciente en relación con el momento en el que implementó Fluent Bit, se verifica la configuración.

   Puede haber un ligero retraso en la creación del grupo de registro de `/dataplane`. Esto es normal, ya que estos grupos de registro sólo se crean cuando el Fluent Bit comienza a enviar registros para ese grupo de registros.

## Compatibilidad con registros de varias líneas
<a name="ContainerInsights-fluentbit-multiline"></a>

Para obtener información sobre cómo usar Fluent Bit con registros de varias líneas, consulte las siguientes secciones de la documentación de Fluent Bit:
+ [Análisis multilínea](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing)
+ [Líneas múltiples y contenedores (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-and-containers-v1.8)
+ [Núcleo multilínea (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-core-v1.8)
+ [Utilice siempre líneas múltiples en la entrada trasera](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#always-use-multiline-the-tail-input)

## (Opcional) Reducción del volumen de registros del Fluent Bit
<a name="ContainerInsights-fluentbit-volume"></a>

De forma predeterminada, se envían registros de aplicaciones de Fluent Bit y metadatos de Kubernetes a CloudWatch. Si desea reducir el volumen de datos que se envía a CloudWatch, puede detener el envío de uno o ambos de estos orígenes de datos a CloudWatch. Si siguió los pasos de esta página para configurar Fluent Bit, descargue el archivo YAML del manifiesto de Kubernetes desde el comando kubectl `apply` que ejecutó anteriormente y modifíquelo con sus cambios, los cuales podrá volver a aplicar en su clúster. Como alternativa, si utiliza el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm, consulte [Configuraciones adicionales (Opcional)](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) para acceder a información sobre la administración de la configuración de Fluent Bit con la configuración avanzada del complemento o el gráfico de Helm.

Para detener los registros de aplicaciones de Fluent Bit, elimine la siguiente sección del archivo `Fluent Bit configuration`.

```
[INPUT]
        Name                tail
        Tag                 application.*
        Path                /var/log/containers/fluent-bit*
        Parser              docker
        DB                  /fluent-bit/state/flb_log.db
        Mem_Buf_Limit       5MB
        Skip_Long_Lines     On
        Refresh_Interval    10
```

Para evitar que los metadatos de Kubernetes se agreguen a los eventos de registro que se envían a CloudWatch, incluya los siguientes filtros en la sección `application-log.conf` en la configuración de Fluent Bit. Sustituya *<Metadata\$11>* y los campos similares por los identificadores de metadatos reales.

```
application-log.conf: |
    [FILTER]
        Name                nest
        Match               application.*
        Operation           lift
        Nested_under        kubernetes
        Add_prefix          Kube.

    [FILTER]
        Name                modify
        Match               application.*
        Remove              Kube.<Metadata_1>
        Remove              Kube.<Metadata_2>
        Remove              Kube.<Metadata_3>
    
    [FILTER]
        Name                nest
        Match               application.*
        Operation           nest
        Wildcard            Kube.*
        Nested_under        kubernetes
        Remove_prefix       Kube.
```

## Solución de problemas
<a name="Container-Insights-FluentBit-troubleshoot"></a>

Si no ve estos grupos de registros y está mirando en la Región correcta, verifique los registros de los pods del DaemonSet de Fluent Bit para buscar el error.

Ejecute el siguiente comando y asegúrese de que el estado es `Running`.

```
kubectl get pods -n amazon-cloudwatch
```

Si los registros tienen errores relacionados con los permisos de IAM, consulte el rol de IAM que está adjunto a los nodos del clúster. Para obtener más información sobre los permisos necesarios para ejecutar un clúster de Amazon EKS, consulte [Amazon EKS IAM Policies, Roles, and Permissions](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) (Permisos, roles y políticas de IAM de Amazon EKS) en la *Guía del usuario de Amazon EKS*.

Si el estado del pod es `CreateContainerConfigError`, obtenga el error exacto ejecutando el siguiente comando.

```
kubectl describe pod pod_name -n amazon-cloudwatch
```

## Panel de control
<a name="Container-Insights-FluentBit-dashboard"></a>

Puede crearse un panel para supervisar las métricas de cada complemento en ejecución. Puede ver los datos de los bytes de entrada y salida y de las tasas de procesamiento de registros, así como los errores de salida y las tasas de intento y error. Para visualizar estas métricas, se deberá instalar el agente de CloudWatch con la colección de métricas de Prometheus para los clústeres de Amazon EKS y de Kubernetes. Para obtener más información acerca de cómo se configuran estos paneles, consulte [Instale el agente de CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon EKS y de KubernetesInstale el agente de CloudWatch con la obtención de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes](ContainerInsights-Prometheus-Setup.md).

**nota**  
Antes de configurar este panel, debe configurar Información de contenedores de para las métricas de Prometheus. Para obtener más información, consulte [Supervisión de métricas de Información de contenedores de Prometheus](ContainerInsights-Prometheus.md).

**Para crear un panel para las métricas de Prometheus de Fluent Bit**

1. Cree variables de entorno, mediante el reemplazo de los valores de la derecha en las siguientes líneas para que concuerden con la implementación.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   REGION_NAME=your_metric_region_such_as_us-west-1
   CLUSTER_NAME=your_kubernetes_cluster_name
   ```

1. Ejecute el siguiente comando para crear el panel.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/fluent-bit/cw_dashboard_fluent_bit.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --dashboard-body
   ```

# (Opcional) Configure el registro del plano de control de Amazon EKS
<a name="Container-Insights-setup-control-plane-logging"></a>

Si utiliza Amazon EKS, tiene la opción de habilitar el registro del plano de control de Amazon EKS, para proporcionar registros de auditoría y de diagnóstico directamente desde el plano de control de Amazon EKS a CloudWatch Logs. Para obtener más información, consulte [Amazon EKS Control Plane Logging](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html) (Registro del plano de control de Amazon EKS).

# (Opcional) Habilitar la característica Use\$1Kubelet para clústeres grandes
<a name="ContainerInsights-use-kubelet"></a>

De forma predeterminada, la característica Use\$1Kubelet está deshabilitada en el complemento FluentBit Kubernetes. Habilitar esta característica puede reducir el tráfico hacia el servidor de la API y mitigar el problema de que el servidor de la API sea un cuello de botella. Recomendamos que habilite esta característica para clústeres grandes.

Para habilitar Use\$1Kubelet, agregue primero los nodos y los permisos de nodos/proxy a la configuración de ClusterRole.

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluent-bit-role
rules:
  - nonResourceURLs:
      - /metrics
    verbs:
      - get
  - apiGroups: [""]
    resources:
      - namespaces
      - pods
      - pods/logs
      - nodes
      - nodes/proxy
    verbs: ["get", "list", "watch"]
```

En la configuración de Daemonset, esta característica necesita acceso a la red de host. La versión de la imagen de `amazon/aws-for-fluent-bit` debería ser 2.12.0 o posterior, o la versión de imagen de bits fluida debería ser 1.7.2 o posterior.

```
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: amazon-cloudwatch
  labels:
    k8s-app: fluent-bit
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: fluent-bit
  template:
    metadata:
      labels:
        k8s-app: fluent-bit
        version: v1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: fluent-bit
        image: amazon/aws-for-fluent-bit:2.19.0
        imagePullPolicy: Always
        env:
            - name: AWS_REGION
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: logs.region
            - name: CLUSTER_NAME
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: cluster.name
            - name: HTTP_SERVER
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.server
            - name: HTTP_PORT
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.port
            - name: READ_FROM_HEAD
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.head
            - name: READ_FROM_TAIL
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.tail
            - name: HOST_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name      
            - name: CI_VERSION
              value: "k8s/1.3.8"
        resources:
            limits:
              memory: 200Mi
            requests:
              cpu: 500m
              memory: 100Mi
        volumeMounts:
        # Please don't change below read-only permissions
        - name: fluentbitstate
          mountPath: /var/fluent-bit/state
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: fluent-bit-config
          mountPath: /fluent-bit/etc/
        - name: runlogjournal
          mountPath: /run/log/journal
          readOnly: true
        - name: dmesg
          mountPath: /var/log/dmesg
          readOnly: true
      terminationGracePeriodSeconds: 10
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      volumes:
      - name: fluentbitstate
        hostPath:
          path: /var/fluent-bit/state
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: fluent-bit-config
        configMap:
          name: fluent-bit-config
      - name: runlogjournal
        hostPath:
          path: /run/log/journal
      - name: dmesg
        hostPath:
          path: /var/log/dmesg
      serviceAccountName: fluent-bit
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      - operator: "Exists"
        effect: "NoExecute"
      - operator: "Exists"
        effect: "NoSchedule"
```

La configuración del complemento de Kubernetes debería ser similar a la siguiente:

```
[FILTER]
        Name                kubernetes
        Match               application.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_Tag_Prefix     application.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed
        K8S-Logging.Parser  On
        K8S-Logging.Exclude Off
        Labels              Off
        Annotations         Off
        Use_Kubelet         On
        Kubelet_Port        10250 
        Buffer_Size         0
```

# Actualización o eliminación de Información de contenedores en Amazon EKS y en Kubernetes
<a name="ContainerInsights-update-delete"></a>

Siga los pasos de estas secciones para actualizar la imagen de contenedor del agente de CloudWatch o para eliminar Información de contenedores de un clúster de Amazon EKS o de Kubernetes.

**Topics**
+ [Actualización a Información de contenedores con observabilidad mejorada para Amazon EKS en CloudWatch](Container-Insights-upgrade-enhanced.md)
+ [Actualización de la imagen del contenedor del agente de CloudWatch](ContainerInsights-update-image.md)
+ [Eliminación del agente de CloudWatch y Fluen Bit para Información de contenedores](ContainerInsights-delete-agent.md)

# Actualización a Información de contenedores con observabilidad mejorada para Amazon EKS en CloudWatch
<a name="Container-Insights-upgrade-enhanced"></a>

**importante**  
Si va a actualizar o instalar Información de contenedores en un clúster de Amazon EKS, recomendamos que utilice el complemento de EKS de observabilidad de Amazon CloudWatch para la instalación, en lugar de seguir las instrucciones de esta sección. Además, para recuperar las métricas de computación acelerada, debe usar el complemento de EKS de observabilidad de Amazon CloudWatch. Para obtener más información e instrucciones, consulte [Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch](Container-Insights-setup-EKS-addon.md).

Información de contenedores con observabilidad mejorada para Amazon EKS es la versión más reciente de Información de contenedores. Recopila métricas detalladas de los clústeres que ejecutan Amazon EKS y ofrece paneles seleccionados y de uso inmediato para analizar en detalle la telemetría de las aplicaciones y la infraestructura. Para obtener más información sobre Información de contenedores, consulte [Información de contenedores con observabilidad mejorada para Amazon EKS](container-insights-detailed-metrics.md).

Si instaló la versión original de Información de contenedores en un clúster de Amazon EKS y desea actualizarla a una versión más reciente con observabilidad mejorada, siga las instrucciones de esta sección.

**importante**  
Antes de completar los pasos de esta sección, debe haber verificado los requisitos previos, incluido cert-manager. Para obtener más información, consulte [Inicio rápido con el operador del agente de CloudWatch y Fluent Bit](Container-Insights-setup-EKS-quickstart.md#Container-Insights-setup-EKS-quickstart-FluentBit).

**Para actualizar un clúster de Amazon EKS a Información de contenedores con observabilidad mejorada para Amazon EKS**

1. Introduzca el siguiente comando para instalar el operador del agente de CloudWatch. En este comando, *my\$1cluster\$1name* es el nombre del clúster de Amazon EKS o el de Kubernetes y *my\$1cluster\$1region* es el nombre de la región en la que se publican los registros. Le recomendamos que utilice la misma región en la que implemente el clúster para reducir los costes de transferencia de datos salientes de AWS.

   ```
   ClusterName=my-cluster-name
   RegionName=my-cluster-region
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -
   ```

   Si observa un error provocado por un conflicto de recursos, es probable que se deba a que ya tiene instalados en el clúster el agente de CloudWatch y Fluent Bit con sus componentes asociados, como ServiceAccount, ClusterRole y ClusterRoleBinding. Cuando el operador del agente de CloudWatch intenta instalar el agente de CloudWatch y sus componentes asociados, si detecta algún cambio en el contenido, por defecto no se realiza la instalación o la actualización para evitar sobrescribir el estado de los recursos del clúster. Le recomendamos que elimine cualquier agente de CloudWatch existente con la configuración de Información de contenedores que haya instalado anteriormente en el clúster y, a continuación, instale el operador del agente de CloudWatch.

1. (Opcional) Para aplicar una configuración de Fluent Bit personalizada existente, debe actualizar el mapa de configuración asociado al daemonset de Fluent Bit. El operador del agente de CloudWatch proporciona una configuración predeterminada para Fluent Bit y usted puede anular o modificar la configuración predeterminada según sea necesario. Para aplicar una configuración personalizada, siga estos pasos.

   1. Introduzca el siguiente comando para abrir la configuración existente.

      ```
      kubectl edit cm fluent-bit-config -n amazon-cloudwatch
      ```

   1. Realice los cambios en el archivo y, a continuación, introduzca `:wq` para guardarlo y salir del modo de edición.

   1. Introduzca el siguiente comando para reiniciar Fluent Bit.

      ```
      kubectl rollout restart ds fluent-bit -n amazon-cloudwatch
      ```

# Actualización de la imagen del contenedor del agente de CloudWatch
<a name="ContainerInsights-update-image"></a>

**importante**  
Si va a actualizar o instalar Información de contenedores en un clúster de Amazon EKS, recomendamos que utilice el complemento de EKS de observabilidad de Amazon CloudWatch para la instalación, en lugar de seguir las instrucciones de esta sección. Además, para recuperar las métricas de computación acelerada, debe usar el complemento de EKS de observabilidad de Amazon CloudWatch o el operador del agente de CloudWatch. Para obtener más información e instrucciones, consulte [Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch](Container-Insights-setup-EKS-addon.md).

Si necesita actualizar la imagen de contenedor a la versión más reciente, siga los pasos de esta sección.

**Para actualizar la imagen de contenedor, realice el siguiente procedimiento:**

1. Introduzca el siguiente comando para comprobar la definición del recurso personalizado (CRD) de `amazoncloudwatchagent`.

   ```
   kubectl get crds amazoncloudwatchagents.cloudwatch.aws.amazon.com -n amazon-cloudwatch
   ```

   Si este comando devuelve un error que indica que falta el CRD, el clúster no tiene Información de contenedores con observabilidad mejorada para Amazon EKS configurado con el operador del agente de CloudWatch. En este caso, consulte [Actualización a Información de contenedores con observabilidad mejorada para Amazon EKS en CloudWatch](Container-Insights-upgrade-enhanced.md).

1. Especifique el siguiente comando para aplicar el archivo `cwagent-version.yaml` más reciente.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-version.yaml | kubectl apply -f -
   ```

# Eliminación del agente de CloudWatch y Fluen Bit para Información de contenedores
<a name="ContainerInsights-delete-agent"></a>

Si instaló Información de contenedores mediante la instalación del complemento observabilidad de CloudWatch para Amazon EKS, puede eliminar Información de contenedores y el agente de CloudWatch introduciendo el siguiente comando:

**nota**  
El complemento de Amazon EKS ahora es compatible con Información de contenedores en los nodos de trabajo de Windows. Si elimina el complemento de Amazon EKS, también se eliminará Información de contenedores para Windows.

```
aws eks delete-addon —cluster-name my-cluster —addon-name amazon-cloudwatch-observability
```

Para eliminar todos los recursos relacionados con el agente de CloudWatch y Fluent Bit, introduzca el siguiente comando. En este comando, *My\$1Cluster\$1Name* es el nombre del clúster de Amazon EKS o el de Kubernetes y *My\$1Region* es el nombre de la región en la que se publican los registros.

```
ClusterName=My_Cluster_Name
RegionName=My-Region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl delete -f -
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl delete -f -
```

# Configuración de Información de contenedores en RedHat OpenShift en AWS (ROSA)
<a name="deploy-container-insights-RedHatOpenShift"></a>

Información de contenedores de CloudWatch con observabilidad mejorada es compatible con RedHat OpenShift en AWS (ROSA). Esta versión admite una observabilidad mejorada para los clústeres ROSA. Después de instalar el gráfico de Helm del operador del agente de CloudWatch, Información de contenedores recopila automáticamente telemetría detallada de la infraestructura desde el nivel del clúster hasta el nivel del contenedor en su entorno. A continuación, muestra estos datos de rendimiento en paneles seleccionados, lo que elimina el trabajo pesado en la configuración de la observabilidad. 

**nota**  
En el caso de RedHat para OpenShift en AWS (ROSA), cuando se instala el operador del agente de CloudWatch mediante gráficos de Helm, el agente de CloudWatch también está habilitado de forma predeterminada para recibir tanto métricas como seguimientos de sus aplicaciones que están instrumentadas para Application Signals. Si desea pasar opcionalmente reglas de configuración personalizadas, puede hacerlo pasando una configuración de agente personalizada mediante el gráfico de Helm, tal como se describe en (Opcional) [Configuración adicional], como se indica en [Configuraciones adicionales (Opcional)](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration).

**Cómo instalar Información de contenedores con observabilidad mejorada en un clúster de RedHat OpenShift en AWS (ROSA)**

1. Instale Helm si es necesario. Para obtener más información, consulte la [Guía de inicio rápido](https://helm.sh/docs/intro/quickstart/) en la documentación de Helm.

1. Introduzca los siguientes comandos para instalar el operador del agente de CloudWatch. Reemplace *my-cluster-name* por el nombre del clúster y *my-cluster-region* por la región en la que se ejecuta el clúster.

   ```
   helm repo add aws-observability https://aws-observability.github.io/helm-charts
   helm repo update aws-observability
   helm install --wait --create-namespace \
       --namespace amazon-cloudwatch amazon-cloudwatch-observability \
       aws-observability/amazon-cloudwatch-observability \
       --set clusterName=my-cluster-name \
       --set region=my-cluster-region \
       --set k8sMode=ROSA
   ```

1. Configure la autorización para el operador del agente siguiendo los pasos de la Opción 1, Opción 2 u Opción 3 en [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md).

# Visualización de las métricas de Información de contenedores
<a name="Container-Insights-view-metrics"></a>

Una vez que haya configurado Información de contenedores y esté recopilando las métricas, podrá ver esas métricas en la consola de CloudWatch.

Para que las métricas de Información de contenedores aparezcan en el panel, debe completar la configuración de Información de contenedores. Para obtener más información, consulte [Configuración de Información de contenedores](deploy-container-insights.md).

Este procedimiento explica cómo se pueden ver las métricas que Información de contenedores genera automáticamente a partir de los datos de registro recopilados. En el resto de esta sección se explica cómo profundizar en los datos y utilizar Información de registros de CloudWatch para ver más métricas en más niveles de granularidad.

**Cómo ver las métricas de Información de contenedores**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Información** y, luego, **Información de contenedores**.

1. Utilice los cuadros desplegables situados junto a la parte superior para seleccionar el tipo de recurso que desea ver, así como el recurso específico.

Se puede establecer una alarma de CloudWatch en cualquiera de las métricas que recopila Información de contenedores. Para obtener más información, consulte [Uso de las alarmas de Amazon CloudWatch](CloudWatch_Alarms.md)

**nota**  
Si ya ha configurado Información de aplicaciones de CloudWatch para supervisar las aplicaciones en contenedores, el panel de Información de aplicaciones aparece debajo del panel de Información de contenedores. Si aún no ha habilitado Información de aplicaciones, puede hacerlo si selecciona **Configuración automática de Información de aplicaciones** debajo de la vista de rendimiento en el panel de Información de contenedores.  
Para obtener más información acerca de Información de aplicaciones y aplicaciones en contenedores, consulte [Habilitación del monitoreo de recursos de Información de aplicaciones para Amazon ECS y Amazon EKS](appinsights-setting-up-console.md#appinsights-container-insights).

## Visualización de los colaboradores principales
<a name="Container-Insights-view-metrics-topn"></a>

Para algunas de las vistas de la supervisión del rendimiento de Información de contenedores, también puede ver los colaboradores principales por memoria o CPU, o los recursos activos más recientes. Está disponible cuando selecciona cualquiera de los siguientes paneles en el cuadro desplegable situado cerca de la parte superior de la página:
+ Servicios de ECS
+ Tareas de ECS
+ Espacios de nombres de EKS
+ Servicios de EKS
+ Pods de EKS

Cuando está visualizando uno de estos tipos de recursos, la parte inferior de la página muestra una tabla ordenada inicialmente por el uso de la CPU. Puede cambiarlo para ordenarlo por uso de la memoria o por la actividad reciente. Para ver más detalles acerca de una de las filas de la tabla, puede seleccionar la casilla de verificación situada junto a esa fila y, a continuación, elegir **Actions** (Acciones) y elija una de las opciones en el menú **Actions** (Acciones).

## Uso de Información de registros de CloudWatch para ver datos de Información de contenedores
<a name="Container-Insights-CloudWatch-Logs-Insights"></a>

Información de contenedores recopila métricas mediante los eventos de registro de rendimiento con el uso del [embedded metric format](CloudWatch_Embedded_Metric_Format.md) (formato de métricas integradas). Los registros se almacenan en CloudWatch Logs. CloudWatch genera varias métricas automáticamente a partir de los registros que se pueden ver en la consola de CloudWatch. También puede realizarse un análisis más profundo de los datos de rendimiento que se recopilan mediante las consultas de Información de registros de CloudWatch.

Para obtener más información sobre Información de registros de CloudWatch, consulte [Analyze Log Data with CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html). Para obtener más información sobre los campos de los registros puede utilizar en las consultas, consulte [Eventos de registro de rendimiento de Información de contenedores para Amazon EKS y Kubernetes](Container-Insights-reference-performance-logs-EKS.md).

**Para utilizar Información de registros de CloudWatch para consultar los datos de las métricas de contenedores**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Registros** y luego, **Información de registros**.

   Cerca de la parte superior de la pantalla se encuentra el editor de consultas. La primera vez que se abre Información de registros de CloudWatch, este cuadro contiene una consulta predeterminada que muestra los 20 eventos del registro más recientes.

1. En el cuadro situado encima del editor de consultas, seleccione uno de los grupos de registros de Información de contenedores que desee consultar. Para que funcionen las siguientes consultas de ejemplo, el nombre del grupo de registros debe terminar por **performance**.

   Al seleccionar un grupo de registros, Información de registros de CloudWatch detecta automáticamente los campos de los datos en el grupo de registros y los muestra en **Discovered fields** (Campos detectados) en el panel derecho. También muestra un gráfico de barras de eventos de registro en este grupo de registro con el paso del tiempo. Este gráfico de barras muestra la distribución de los eventos en el grupo de registros que coincide con la consulta y el intervalo de tiempo, no solo los eventos que se muestran en la tabla.

1. En el editor de consultas, sustituya la consulta predeterminada por la consulta siguiente y elija **Run query (Ejecutar consulta)**.

   ```
   STATS avg(node_cpu_utilization) as avg_node_cpu_utilization by NodeName
   | SORT avg_node_cpu_utilization DESC
   ```

   Esta consulta muestra una lista de nodos, ordenada por el promedio de utilización de la CPU del nodo.

1. Para probar otro ejemplo, sustituya esa consulta por otra y elija **Run query** (Ejecutar consulta). Se enumerarán más consultas de ejemplo más adelante en esta página.

   ```
   STATS avg(number_of_container_restarts) as avg_number_of_container_restarts by PodName
   | SORT avg_number_of_container_restarts DESC
   ```

   Esta consulta muestra una lista de pods ordenada por el número medio de reinicios del contenedor.

1. Si desea probar otra consulta, puede incluir campos de la lista situada a la derecha de la pantalla. Para obtener más información sobre la sintaxis de consulta, consulte [CloudWatch Logs Insights Query Syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html).

**Para ver las listas de recursos**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Recursos**.

1. La vista predeterminada contiene los recursos que Información de contenedores supervisa y las alarmas que se han configurado en estos recursos. Para ver un mapa visual de los recursos, elija **Vista de mapa**.

1. En la vista de mapa, puede detener el puntero sobre cualquier recurso del mapa para ver sus métricas básicas. Elija cualquier recurso para ver gráficos más detallados sobre él.

## Caso de uso: Visualización de métricas de nivel de tarea en contenedores de Amazon ECS
<a name="Container-Insights-CloudWatch-Logs-Insights-example"></a>

En el siguiente ejemplo se ilustra cómo se utiliza Información de registros de CloudWatch para profundizar en los registros de Información de contenedores. Para obtener más ejemplos, consulte el blog [Presentación de Información de contenedores de Amazon CloudWatch para Amazon ECS](https://aws.amazon.com/blogs/mt/introducing-container-insights-for-amazon-ecs/)).

 Información de contenedores no genera automáticamente métricas en el nivel de granularidad de la tarea. La siguiente consulta muestra métricas de nivel de tarea para el uso de la CPU y de la memoria.

```
stats avg(CpuUtilized) as CPU, avg(MemoryUtilized) as Mem by TaskId, ContainerName
| sort Mem, CPU desc
```

## Otras consultas de muestra para Información de contenedores
<a name="Container-Insights-sample-queries"></a>

**Lista de pods ordenada por el número medio de reinicios del contenedor**

```
STATS avg(number_of_container_restarts) as avg_number_of_container_restarts by PodName
| SORT avg_number_of_container_restarts DESC
```

**Pods solicitados frente a pods en ejecución**

```
fields @timestamp, @message 
| sort @timestamp desc 
| filter Type="Pod" 
| stats min(pod_number_of_containers) as requested, min(pod_number_of_running_containers) as running, ceil(avg(pod_number_of_containers-pod_number_of_running_containers)) as pods_missing by kubernetes.pod_name 
| sort pods_missing desc
```

**Número de errores de nodos del clúster**

```
stats avg(cluster_failed_node_count) as CountOfNodeFailures 
| filter Type="Cluster" 
| sort @timestamp desc
```

**Errores de registro de aplicaciones por nombre de contenedor**

```
stats count() as countoferrors by kubernetes.container_name 
| filter stream="stderr" 
| sort countoferrors desc
```

# Métricas que Información de contenedores recopila
<a name="Container-Insights-metrics"></a>

Información de contenedores recopila un conjunto de métricas para Amazon ECS y AWS Fargate en Amazon ECS y un conjunto diferente para Amazon EKS, AWS Fargate en Amazon EKS, RedHat OpenShift en AWS (ROSA) y Kubernetes.

Las métricas no están visibles hasta que las tareas del contenedor hayan estado ejecutándose durante algún tiempo.

**Topics**
+ [Métricas de Información de contenedores de Amazon ECS con observabilidad mejorada](Container-Insights-enhanced-observability-metrics-ECS.md)
+ [Métricas de Información de contenedores de Amazon ECS](Container-Insights-metrics-ECS.md)
+ [Métricas de Amazon EKS e Información de contenedores de Kubernetes con observabilidad mejorada](Container-Insights-metrics-enhanced-EKS.md)
+ [Métricas de Información de contenedores de Kubernetes y de Amazon EKS](Container-Insights-metrics-EKS.md)
+ [Referencia de registros de rendimiento de Información de contenedores](Container-Insights-reference.md)
+ [Supervisión de métricas de Información de contenedores de Prometheus](ContainerInsights-Prometheus.md)
+ [Integración con Información de aplicaciones](container-insights-appinsights.md)
+ [Consulta de los eventos del ciclo de vida de Amazon ECS en Información de contenedores](container-insights-ECS-lifecycle-events.md)
+ [Solución de problemas de Información de contenedores](ContainerInsights-troubleshooting.md)
+ [Creación de su propia imagen de Docker del agente de CloudWatch](ContainerInsights-build-docker-image.md)
+ [Implementación de otras características del agente de CloudWatch en los contenedores](ContainerInsights-other-agent-features.md)

# Métricas de Información de contenedores de Amazon ECS con observabilidad mejorada
<a name="Container-Insights-enhanced-observability-metrics-ECS"></a>

Información de contenedores con observabilidad mejorada proporciona más visibilidad de las cargas de trabajo en contenedores, ya que ofrece lo siguiente:
+ Más detalle de las métricas tanto por tarea como por contenedor
+ Capacidades mejoradas de supervisión y solución de problemas
+ Integración con Registros de CloudWatch para hacer lo siguiente:
  + Correlacionar las anomalías de las métricas con las entradas de registro
  + Llevar a cabo un análisis de la causa raíz más rápido
  + Reducir el tiempo de resolución de problemas complejos relacionados con los contenedores

**Casos de uso**

Información de contenedores con observabilidad mejorada amplía las capacidades de Información de contenedores estándar. Permite los siguientes casos de uso:
+ **Solución de problemas por tarea**: identifique los cuellos de botella en el rendimiento por tarea. Analice las métricas por tarea y compárelas con los recursos reservados para determinar si las tareas tienen suficiente capacidad de procesamiento. 
+ **Optimización de los recursos por contenedor**: haga un seguimiento del uso en comparación con los niveles de reserva para identificar los contenedores que tienen recursos limitados o que están sobreaprovisionados. 
+ **Evaluación del estado de los contenedores**: supervise los recuentos de reinicios y las transiciones de estado para detectar contenedores inestables que requieran intervención. 
+ **Supervisión del rendimiento de las aplicaciones**: haga un seguimiento de la forma en que las aplicaciones se comunican entre sí, supervise los patrones de uso de los recursos y optimice el rendimiento del almacenamiento de datos.
+ **Supervisión operativa**: supervise las implementaciones, haga un seguimiento de los conjuntos de tareas para las implementaciones azul/verde y mantenga el estado de la plataforma mediante métricas de servicio.

Para obtener más información sobre las métricas de Amazon ECS, consulte [Casos de uso de métricas de utilización de los servicios de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_utilization-metrics-explanation.html) y, para obtener información sobre Información de contenedores con observabilidad mejorada, [Métricas de Información de contenedores de Amazon ECS con observabilidad mejorada](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-enhanced-observability-metrics-ECS.html).

Información de contenedores también muestra estadísticas de clústeres, servicios y de daemon al promediar los datos de todas las tareas. Esto proporciona una visión de más alto nivel del estado de su servicio y de daemon, lo que ayuda tanto a la supervisión del entorno como a la planificación de la capacidad.

**nota**  
Las métricas de Daemons administrados de Amazon ECS utilizan el mismo espacio de nombres `ECS/ContainerInsights` y la misma dimensión `ServiceName` que las métricas de servicio. En el caso de las métricas de daemon, el valor de la dimensión `ServiceName` utiliza el formato `daemon:daemon-name`. Por ejemplo, un daemon denominado `my-daemon` tiene una dimensión `ServiceName` con el valor `daemon:my-daemon`. Todas las métricas de la tabla siguiente que incluyen la dimensión `ServiceName` también se aplican a Daemons administrados.

En la siguiente tabla, se muestran las métricas y dimensiones que recopila Información de contenedores con observabilidad mejorada para Amazon ECS. Estas métricas se encuentran en el espacio de nombres `ECS/ContainerInsights`. Para obtener más información, consulte [Métricas](cloudwatch_concepts.md#Metric).

Si no ve ninguna métrica de Información de contenedores en la consola, asegúrese de haber completado la configuración de Información de contenedores con observabilidad mejorada. Las métricas no aparecen antes de haber configurado por completo Información de contenedores con observabilidad mejorada. Para obtener más información, consulte [Configuración de Información de contenedores con observabilidad mejorada](deploy-container-insights-ECS-cluster.md#set-container-insights-ECS-cluster-enhanced).

Las métricas siguientes están disponibles para todos los tipos de lanzamiento.


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `ContainerInstanceCount`  |  `ClusterName`  |  El número de instancias EC2 que ejecutan el agente de Amazon ECS que están registradas en un clúster. Esta métrica se recopila únicamente para las instancias de contenedor que ejecutan tareas de Amazon ECS en el clúster. No se recopila para las instancias de contenedor vacías que no tienen ninguna tarea de Amazon ECS. Unidad: recuento  | 
|  `ContainerCpuUtilized`  |  `ClusterName` `ContainerName`, `TaskId`, `ServiceName`, `ClusterName` `ContainerName`, `TaskDefinitionFamily`, `ClusterName`, `TaskId` `TaskDefinitionFamily`, `ClusterName`, `ContainerName` `ServiceName`, `ClusterName`, `ContainerName`  |  Las unidades de CPU utilizadas por contenedores en el recurso especificado por el conjunto de dimensiones que está utilizando. También se aplica a Daemons administrados. Unidad: ninguna  | 
|  `ContainerCpuReserved`  |  `ClusterName` `ContainerName`, `TaskId`, `ServiceName`, `ClusterName` `ContainerName`, `TaskDefinitionFamily`, `ClusterName`, `TaskId` `TaskDefinitionFamily`, `ClusterName`, `ContainerName` `ServiceName`, `ClusterName`, `ContainerName`  |  Las unidades de CPU reservadas por los contenedores en el recurso especificado por el conjunto de dimensiones que está utilizando. Esta métrica se recopila en función de la reserva de CPU establecida en la definición de la tarea, por ejemplo, a nivel de tarea o de todos los contenedores. Si esto no se especifica en la definición de la tarea, se utiliza la reserva de CPU de la instancia. También se aplica a Daemons administrados. Unidad: ninguna  | 
|  `ContainerCpuUtilization`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`   | El porcentaje total de las unidades de CPU utilizadas por contenedores en el recurso especificado por el conjunto de dimensiones que está utilizando. Unidad: porcentaje | 
|  `ContainerMemoryUtilized`  |  `ClusterName` `ContainerName`, `TaskId`, `ServiceName`, `ClusterName` `ContainerName`, `TaskDefinitionFamily`, `ClusterName`, `TaskId` `TaskDefinitionFamily`, `ClusterName`, `ContainerName` `ServiceName`, `ClusterName`, `ContainerName`  |  La memoria que están utilizando los contenedores en el recurso especificado por el conjunto de dimensiones que está utilizando. También se aplica a Daemons administrados. Unidades: megabytes  | 
|  `ContainerMemoryReserved`  |  `ClusterName` `ContainerName`, `TaskId`, `ServiceName`, `ClusterName` `ContainerName`, `TaskDefinitionFamily`, `ClusterName`, `TaskId` `TaskDefinitionFamily`, `ClusterName`, `ContainerName` `ServiceName`, `ClusterName`, `ContainerName`  |  La memoria reservada por los contenedores en el recurso que se especifica mediante el conjunto de dimensiones que está utilizando.  Esta métrica se recopila en función de la reserva de memoria establecida en la definición de la tarea, por ejemplo, a nivel de tarea o de todos los contenedores. Si esto no se especifica en la definición de la tarea, se utiliza la reserva de memoria de la instancia. También se aplica a Daemons administrados. Unidades: megabytes  | 
|  `ContainerMemoryUtilization`  |  `ClusterName` `ContainerName`, `TaskId`, `ServiceName`, `ClusterName` `ContainerName`, `TaskDefinitionFamily`, `ClusterName`, `TaskId` `TaskDefinitionFamily`, `ClusterName`, `ContainerName` `ServiceName`, `ClusterName`, `ContainerName`  | El porcentaje total de memoria que están utilizando los contenedores en el recurso especificado por el conjunto de dimensiones que está utilizando. También se aplica a Daemons administrados. Unidad: porcentaje | 
|  `ContainerNetworkRxBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes recibidos por el contenedor que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. Esta métrica solo está disponible para los contenedores en tareas que utilizan modos de redes `awsvpc` o `bridge`. También se aplica a Daemons administrados. Unidad: bytes/segundo  | 
|  `ContainerNetworkTxBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes transmitidos por el contenedor que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. Esta métrica solo está disponible para los contenedores en tareas que utilizan modos de redes `awsvpc` o `bridge`. También se aplica a Daemons administrados. Unidad: bytes/segundo  | 
|  `ContainerStorageReadBytes`  |  `ClusterName` `ClusterName`, `ServiceName`, `ContainerName` `ClusterName`, `TaskDefinitionFamily`, `ContainerName` `ClusterName`, `ServiceName`, `TaskId`, `ContainerName` `ClusterName`, `TaskDefinitionFamily`, `TaskId`, `ContainerName`  |  La cantidad de bytes leídos desde el almacenamiento en el contenedor en el recurso que se especifica mediante las dimensiones que está utilizando. Esto no incluye los bytes de lectura de sus dispositivos de almacenamiento. Esta métrica se obtiene del tiempo de ejecución de Docker. También se aplica a Daemons administrados. Unidades: bytes  | 
|  `ContainerStorageWriteBytes`  |  `ClusterName` `ClusterName`, `ServiceName`, `ContainerName` `ClusterName`, `TaskDefinitionFamily`, `ContainerName` `ClusterName`, `ServiceName`, `TaskId`, `ContainerName` `ClusterName`, `TaskDefinitionFamily`, `TaskId`, `ContainerName`  |  El número de bytes escritos en almacenamiento en el contenedor que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. También se aplica a Daemons administrados. Unidades: bytes  | 
|  `CpuUtilized`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`   |  Las unidades de CPU utilizadas por tareas en el recurso especificado por el conjunto de dimensiones que está utilizando. También se aplica a Daemons administrados. Unidad: ninguna  | 
|  `CpuReserved`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  Las unidades de CPU reservadas por las tareas en el recurso especificado por el conjunto de dimensiones que está utilizando. Esta métrica se recopila en función de la reserva de CPU establecida en la definición de la tarea, por ejemplo, a nivel de tarea o de todos los contenedores. Si esto no se especifica en la definición de la tarea, se utiliza la reserva de CPU de la instancia. También se aplica a Daemons administrados. Unidad: ninguna  | 
|  `DeploymentCount`  |  `ServiceName`, `ClusterName`  |  El número de implementaciones en un servicio Amazon ECS. Unidad: recuento  | 
|  `DesiredTaskCount`  |  `ServiceName`, `ClusterName`  |  El número deseado de tareas para un servicio Amazon ECS. Unidad: recuento  | 
|  `EBSFilesystemSize`  |  `ClusterName` ,`TaskDefinitionFamily`, `VolumeName` `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName`  |  La cantidad total, en gigabytes (GB), del almacenamiento del sistema de archivos de Amazon EBS que se asigna a los recursos especificados por las dimensiones que está utilizando. Esta métrica solo está disponible para tareas que utilicen la infraestructura de Amazon ECS en Fargate mediante la versión de la plataforma `1.4.0` o posterior o instancias de Amazon EC2 que utilicen la versión de agente de contenedor `1.79.0` o posterior. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  `EBSFilesystemUtilized`  |  `ClusterName` ,`TaskDefinitionFamily`, `VolumeName` `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName`  |  La cantidad total, en gigabytes (GB), del almacenamiento del sistema de archivos de Amazon EBS que utilizan los recursos especificados según las dimensiones que está utilizando. Esta métrica solo está disponible para tareas que utilicen la infraestructura de Amazon ECS en Fargate mediante la versión de la plataforma `1.4.0` o posterior o instancias de Amazon EC2 que utilicen la versión de agente de contenedor `1.79.0` o posterior. Para las tareas que se ejecutan en Fargate, Fargate reserva espacio en el disco que solo utiliza Fargate. El espacio que usa Fargate no tiene ningún costo, pero verá este almacenamiento adicional con herramientas como `df`. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  `TaskEBSFilesystemUtilization`  |  `TaskDefinitionFamily`, `ClusterName` `ClusterName`, `ServiceName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `TaskDefinitionFamily`, `ClusterName`, `TaskId`  |  El porcentaje del almacenamiento del sistema de archivos de Amazon EBS que está utilizando la tarea especificada según las dimensiones que se están utilizando. Esta métrica solo está disponible para tareas que utilicen la infraestructura de Amazon ECS en Fargate mediante la versión de la plataforma `1.4.0` o posterior o instancias de Amazon EC2 que utilicen la versión de agente de contenedor `1.79.0` o posterior. También se aplica a Daemons administrados. Unidad: porcentaje  | 
|  EphemeralStorageReserved [1](#ci-enhanced-metrics-ecs-storage-fargate-note)  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes reservados desde el almacenamiento efímero en el recurso que se especifica mediante las dimensiones que está utilizando. El almacenamiento efímero se utiliza para el sistema de archivos raíz del contenedor y para cualquier volumen host de montaje enlazado definido en la imagen del contenedor y la definición de la tarea. La cantidad de almacenamiento efímero no se puede cambiar en una tarea en ejecución. Esta métrica solo está disponible para tareas que utilicen la versión de la plataforma Fargate de Linux 1.4.0 o una posterior. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  EphemeralStorageUtilized [1](Container-Insights-metrics-ECS.md#ci-metrics-ecs-storage-fargate-note)  |  `ClusterName` `ClusterName`, `TaskDefinitionFamily` `ClusterName`, `ServiceName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes que se usan desde el almacenamiento efímero en el recurso que se especifica mediante las dimensiones que está utilizando. El almacenamiento efímero se utiliza para el sistema de archivos raíz del contenedor y para cualquier volumen host de montaje enlazado definido en la imagen del contenedor y la definición de la tarea. La cantidad de almacenamiento efímero no se puede cambiar en una tarea en ejecución. Esta métrica solo está disponible para tareas que utilicen la versión de la plataforma Fargate de Linux 1.4.0 o una posterior. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  `MemoryUtilized`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  La memoria que están utilizando las tareas en el recurso especificado por el conjunto de dimensiones que está utilizando. También se aplica a Daemons administrados. Unidades: megabytes  | 
|  `MemoryReserved`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  La memoria reservada por las tareas en el recurso que se especifica mediante el conjunto de dimensiones que está utilizando.  Esta métrica se recopila en función de la reserva de memoria establecida en la definición de la tarea, por ejemplo, a nivel de tarea o de todos los contenedores. Si esto no se especifica en la definición de la tarea, se utiliza la reserva de memoria de la instancia. También se aplica a Daemons administrados. Unidades: megabytes  | 
|  `NetworkRxBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes recibidos por el recurso que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. Esta métrica solo está disponible para los contenedores en tareas que utilizan modos de redes `awsvpc` o `bridge`. También se aplica a Daemons administrados. Unidad: bytes/segundo  | 
|  `NetworkTxBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes transmitidos por el recurso que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. Esta métrica solo está disponible para los contenedores en tareas que utilizan modos de redes `awsvpc` o `bridge`. También se aplica a Daemons administrados. Unidad: bytes/segundo  | 
|  `PendingTaskCount`  |  `ServiceName`, `ClusterName`  |  El número de tareas que actualmente tienen el estado `PENDING`. Unidad: recuento  | 
|  `RunningTaskCount`  |  `ServiceName`, `ClusterName`  |  El número de tareas que actualmente tienen el estado `RUNNING`. Unidad: recuento  | 
|  `RestartCount`  |  `ClusterName` `ClusterName`, `ServiceName` `ClusterName`, `TaskDefinitionFamily` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId` `ClusterName`, `ServiceName`, `ContainerName` `ClusterName`, `ServiceName`, `TaskId`, `ContainerName` `TaskDefinitionFamily`, `ClusterName`, `ContainerName` `TaskDefinitionFamily`, `ClusterName`, `TaskId`, `ContainerName`  |  La cantidad de veces que se ha reiniciado un contenedor de una tarea de Amazon ECS. Esta métrica se recopila únicamente para los contenedores que tienen una política de reinicio habilitada. También se aplica a Daemons administrados. Unidad: recuento  | 
|  `UnHealthyContainerHealthStatus`  |  `ClusterName` `ClusterName`, `ServiceName`, `ContainerName` `ClusterName`, `TaskDefinitionFamily`, `ContainerName` `ClusterName`, `ServiceName`, `TaskId`, `ContainerName` `ClusterName`, `TaskDefinitionFamily`, `TaskId`, `ContainerName`  |  El número de contenedores en mal estado según el estado de la comprobación de estado del contenedor. Un contenedor se considera en mal estado cuando así se indica en la comprobación de estado. Esta métrica se recopila únicamente para los contenedores que tienen una comprobación de estado configurada en la definición de la tarea. El valor de la métrica es 1 cuando el estado del contenedor es `UNHEALTHY` y 0 cuando es `HEALTHY`. Unidad: recuento  | 
|  `ServiceCount`  |  `ClusterName`  |  El número de servicios en el clúster. Unidad: recuento  | 
|  `StorageReadBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  La cantidad de bytes leídos desde el almacenamiento en la instancia en el recurso que se especifica mediante las dimensiones que está utilizando. Esto no incluye los bytes de lectura de sus dispositivos de almacenamiento. Esta métrica se obtiene del tiempo de ejecución de Docker. También se aplica a Daemons administrados. Unidades: bytes  | 
|  `StorageWriteBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`  |  El número de bytes escritos en almacenamiento en el recurso que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. También se aplica a Daemons administrados. Unidades: bytes  | 
|  `TaskCount`  |  `ClusterName`  |  El número de tareas que se ejecutan en el clúster. Unidad: recuento  | 
|  `TaskCpuUtilization`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`   |  El porcentaje total de unidades de CPU que utiliza una tarea.  También se aplica a Daemons administrados. Unidad: porcentaje  | 
|  `TaskEphemeralStorageUtilization`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`   |  El porcentaje total de almacenamiento efímero que utiliza una tarea.  También se aplica a Daemons administrados. Unidad: porcentaje  | 
|  `TaskMemoryUtilization`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName` `ClusterName`, `ServiceName`, `TaskId` `ClusterName`, `TaskDefinitionFamily`, `TaskId`   |  El porcentaje total de memoria que utiliza una tarea.  También se aplica a Daemons administrados. Unidad: porcentaje  | 
|  `TaskSetCount`  |  `ServiceName`, `ClusterName`  |  El número de conjuntos de tareas en el servicio. Unidad: recuento  | 

**nota**  
Las métricas `EphemeralStorageReserved` y `EphemeralStorageUtilized` solo están disponibles para tareas que se ejecuten en la versión 1.4.0 o una versión posterior de la plataforma Fargate de Linux.  
Fargate reserva espacio en el disco. Solo lo usa Fargate. No se cobra por esto. No se muestra en estas métricas. Sin embargo, puede ver este almacenamiento adicional en otras herramientas, como `df`.

Las siguientes métricas están disponibles al completar los pasos en [Implementación del agente de CloudWatch para recopilar métricas de nivel de instancia EC2 en Amazon ECS](deploy-container-insights-ECS-instancelevel.md) y usar el tipo de lanzamiento de EC2.


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `instance_cpu_limit`  |  `ClusterName`  |  El número máximo de unidades de CPU que se pueden asignar a una única instancia de EC2 en el clúster. Unidad: ninguna  | 
|  `instance_cpu_reserved_capacity`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje de CPU reservado actualmente en una única instancia EC2 en el clúster. Unidad: porcentaje  | 
|  `instance_cpu_usage_total`  |  `ClusterName`  |  El número de unidades de CPU utilizadas en una única instancia EC2 en el clúster. Unidad: ninguna  | 
|  `instance_cpu_utilization`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje total de unidades de CPU utilizadas en una única instancia EC2 en el clúster.  Unidad: porcentaje  | 
|  `instance_filesystem_utilization`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje total de capacidad del sistema de archivos utilizada en una única instancia EC2 en el clúster.  Unidad: porcentaje  | 
|  `instance_memory_limit`  |  `ClusterName`  |  La cantidad máxima de memoria, en bytes, que se puede asignar a una única instancia de EC2 en este clúster.  Unidades: bytes  | 
|  `instance_memory_reserved_capacity`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje de memoria reservada actualmente en una única instancia de EC2 en el clúster. Unidad: porcentaje  | 
|  `instance_memory_utilization`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje total de memoria utilizada en una única instancia de EC2 en el clúster.  Si utiliza el recolector de elementos no utilizados ZGC de Java para la aplicación, es posible que esta métrica no sea precisa.  Unidad: porcentaje  | 
|  `instance_memory_working_set`  |  `ClusterName`  |  La cantidad de memoria, en bytes, utilizada en una única instancia de EC2 en el clúster.  Si utiliza el recolector de elementos no utilizados ZGC de Java para la aplicación, es posible que esta métrica no sea precisa.  Unidades: bytes  | 
|  `instance_network_total_bytes`  |  `ClusterName`  |  El número total de bytes por segundo transmitidos y recibidos a través de la red en una única instancia de EC2 en el clúster. Unidad: bytes/segundo  | 
|  `instance_number_of_running_tasks`  |  `ClusterName`  |  El número de tareas en ejecución en una única instancia de EC2 en el clúster. Unidad: recuento  | 

# Métricas de Información de contenedores de Amazon ECS
<a name="Container-Insights-metrics-ECS"></a>

Las métricas de Información de contenedores proporcionan métricas adicionales sobre red, almacenamiento y almacenamiento efímero. Estas métricas proporcionan más información que las métricas estándar de Amazon ECS. Información de contenedores se integra con Registros de CloudWatch. Puede correlacionar los cambios en las métricas con las entradas de registro para facilitar la solución de problemas. Información de contenedores también muestra estadísticas de clústeres, servicios y de daemon al promediar los datos de todas las tareas. Esto proporciona una visión de más alto nivel del estado de su servicio y de daemon, lo que ayuda tanto a la supervisión del entorno como a la planificación de la capacidad.

**Casos de uso**
+ **Identificación y solución de problemas**: haga un seguimiento de las implementaciones fallidas mediante el análisis de los patrones de transición del estado de las tareas, lo que permite identificar rápidamente los puntos de error. Diagnostique los problemas de configuración mediante un examen exhaustivo de las secuencias de inicio de las tareas y los comportamientos de inicialización.
+ **Evaluación del estado por clúster y servicio**: muestra el rendimiento medio de las tareas en todo el clúster. Este método modera los valores atípicos para ofrecer una visión más estable del estado de los clústeres y los servicios. Utilice esta información para la supervisión de los servicios generales, donde los valores extremos pueden resultar engañosos. 
+ **Problemas de disponibilidad del servicio**: detecte los errores de implementación mediante la supervisión de métricas de recuento de tareas en ejecución. Correlacione los registros de eventos del servicio con las métricas de rendimiento para comprender los impactos en la infraestructura. Haga un seguimiento de los patrones de reinicio de las tareas para identificar problemas de infraestructura o servicios inestables
+ **Planificación de la capacidad para una carga media**: ayuda a determinar las necesidades de recursos en función de los patrones de comportamiento típicos de las tareas, proporciona métricas coherentes que permiten una planificación eficaz a largo plazo y reduce el impacto de los picos efímeros en las decisiones de capacidad.
+ **Proporciona métricas adicionales**: recopila métricas adicionales de red, almacenamiento y almacenamiento efímero que no están disponibles en las métricas aconsejadas

Para obtener más información sobre las métricas de Amazon ECS, consulte [Casos de uso de métricas de utilización de los servicios de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_utilization-metrics-explanation.html) y, para obtener información sobre Información de contenedores con observabilidad mejorada, [Métricas de Información de contenedores de Amazon ECS con observabilidad mejorada](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-enhanced-observability-metrics-ECS.html).

**nota**  
Las métricas de Daemons administrados de Amazon ECS utilizan el mismo espacio de nombres `ECS/ContainerInsights` y la misma dimensión `ServiceName` que las métricas de servicio. En el caso de las métricas de daemon, el valor de la dimensión `ServiceName` utiliza el formato `daemon:daemon-name`. Por ejemplo, un daemon denominado `my-daemon` tiene una dimensión `ServiceName` con el valor `daemon:my-daemon`. Todas las métricas de la tabla siguiente que incluyen la dimensión `ServiceName` también se aplican a Daemons administrados.

En la siguiente tabla, se muestran las métricas y dimensiones que recopila Información de contenedores para Amazon ECS. Estas métricas se encuentran en el espacio de nombres `ECS/ContainerInsights`. Para obtener más información, consulte [Métricas](cloudwatch_concepts.md#Metric).

Si no ve ninguna métrica de Información de contenedores en la consola, asegúrese de haber completado la configuración de Información de contenedores. Las métricas no aparecen antes de haber configurado por completo Información de contenedores. Para obtener más información, consulte [Configuración de Información de contenedores](deploy-container-insights.md).

Las siguientes métricas están disponibles al completar los pasos en [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS-cluster.md).


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `ContainerInstanceCount`  |  `ClusterName`  |  El número de instancias EC2 que ejecutan el agente de Amazon ECS que están registradas en un clúster. Esta métrica se recopila únicamente para las instancias de contenedor que ejecutan tareas de Amazon ECS en el clúster. No se recopila para las instancias de contenedor vacías que no tienen ninguna tarea de Amazon ECS. Unidad: recuento  | 
|  `CpuUtilized`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  Las unidades de CPU utilizadas por tareas en el recurso especificado por el conjunto de dimensiones que está utilizando. También se aplica a Daemons administrados. Unidad: ninguna  | 
|  `CpuReserved`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  Las unidades de CPU reservadas por las tareas en el recurso especificado por el conjunto de dimensiones que está utilizando. Esta métrica se recopila en función de la reserva de CPU establecida en la definición de la tarea, por ejemplo, a nivel de tarea o de todos los contenedores. Si esto no se especifica en la definición de la tarea, se utiliza la reserva de CPU de la instancia. También se aplica a Daemons administrados. Unidad: ninguna  | 
|  `DeploymentCount`  |  `ServiceName`, `ClusterName`  |  El número de implementaciones en un servicio Amazon ECS. Unidad: recuento  | 
|  `DesiredTaskCount`  |  `ServiceName`, `ClusterName`  |  El número deseado de tareas para un servicio Amazon ECS. Unidad: recuento  | 
|  `EBSFilesystemSize`  |  `VolumeName`, `TaskDefinitionFamily`, `ClusterName` `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName`  |  La cantidad total, en gigabytes (GB), del almacenamiento del sistema de archivos de Amazon EBS que se asigna a los recursos especificados por las dimensiones que está utilizando. Esta métrica solo está disponible para tareas que utilicen la infraestructura de Amazon ECS en Fargate mediante la versión de la plataforma `1.4.0` o posterior o instancias de Amazon EC2 que utilicen la versión de agente de contenedor `1.79.0` o posterior. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  `EBSFilesystemUtilized`  |  `VolumeName`, `TaskDefinitionFamily`, `ClusterName` `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName`  |  La cantidad total, en gigabytes (GB), del almacenamiento del sistema de archivos de Amazon EBS que utilizan los recursos especificados según las dimensiones que está utilizando. Esta métrica solo está disponible para tareas que utilicen la infraestructura de Amazon ECS en Fargate mediante la versión de la plataforma `1.4.0` o posterior o instancias de Amazon EC2 que utilicen la versión de agente de contenedor `1.79.0` o posterior. Para las tareas que se ejecutan en Fargate, Fargate reserva espacio en el disco que solo utiliza Fargate. El espacio que usa Fargate no tiene ningún costo, pero verá este almacenamiento adicional con herramientas como `df`. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  EphemeralStorageReserved [1](#ci-metrics-ecs-storage-fargate-note)  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  El número de bytes reservados desde el almacenamiento efímero en el recurso que se especifica mediante las dimensiones que está utilizando. El almacenamiento efímero se utiliza para el sistema de archivos raíz del contenedor y para cualquier volumen host de montaje enlazado definido en la imagen del contenedor y la definición de la tarea. La cantidad de almacenamiento efímero no se puede cambiar en una tarea en ejecución. Esta métrica solo está disponible para tareas que utilicen la versión de la plataforma Fargate de Linux 1.4.0 o una posterior. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  EphemeralStorageUtilized [1](#ci-metrics-ecs-storage-fargate-note)  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  El número de bytes que se usan desde el almacenamiento efímero en el recurso que se especifica mediante las dimensiones que está utilizando. El almacenamiento efímero se utiliza para el sistema de archivos raíz del contenedor y para cualquier volumen host de montaje enlazado definido en la imagen del contenedor y la definición de la tarea. La cantidad de almacenamiento efímero no se puede cambiar en una tarea en ejecución. Esta métrica solo está disponible para tareas que utilicen la versión de la plataforma Fargate de Linux 1.4.0 o una posterior. También se aplica a Daemons administrados. Unidad: Gigabytes (GB)  | 
|  `InstanceOSFilesystemUtilization`  |  `CapacityProviderName`, `ClusterName`, `ContainerInstanceId`, `EC2InstanceId` `ClusterName`  |  El porcentaje de espacio total en disco que se utiliza por volumen del sistema operativo.  | 
|  `InstanceDataFilesystemUtilization`  |  `CapacityProviderName`, `ClusterName`, `ContainerInstanceId`, `EC2InstanceId` `ClusterName`  |  El porcentaje de espacio total en disco que se utiliza por volumen de datos.  | 
|  `MemoryUtilized`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  La memoria que están utilizando las tareas en el recurso especificado por el conjunto de dimensiones que está utilizando.  Si utiliza el recolector de elementos no utilizados ZGC de Java para la aplicación, es posible que esta métrica no sea precisa. Aunque `MemoryUtilized` y `MemoryReserved` están marcadas como “Megabytes”, las unidades reales están en MiB (Mebibytes).  También se aplica a Daemons administrados. Unidades: megabytes  | 
|  `MemoryReserved`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  La memoria reservada por las tareas en el recurso que se especifica mediante el conjunto de dimensiones que está utilizando. Esta métrica se recopila en función de la reserva de memoria establecida en la definición de la tarea, por ejemplo, a nivel de tarea o de todos los contenedores. Si esto no se especifica en la definición de la tarea, se utiliza la reserva de memoria de la instancia. También se aplica a Daemons administrados. Unidades: megabytes  Aunque `MemoryUtilized` y `MemoryReserved` están marcadas como “Megabytes”, las unidades reales están en MiB (Mebibytes).   | 
|  `NetworkRxBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  El número de bytes recibidos por el recurso que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. Esta métrica solo está disponible para los contenedores en tareas que utilizan modos de redes `awsvpc` o `bridge`. También se aplica a Daemons administrados. Unidad: bytes/segundo  | 
|  `NetworkTxBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  El número de bytes transmitidos por el recurso que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. Esta métrica solo está disponible para los contenedores en tareas que utilizan modos de redes `awsvpc` o `bridge`. También se aplica a Daemons administrados. Unidad: bytes/segundo  | 
|  `PendingTaskCount`  |  `ServiceName`, `ClusterName`  |  El número de tareas que actualmente tienen el estado `PENDING`. Unidad: recuento  | 
|  `RunningTaskCount`  |  `ServiceName`, `ClusterName`  |  El número de tareas que actualmente tienen el estado `RUNNING`. Unidad: recuento  | 
|  `RestartCount`  |  `ClusterName` `ClusterName`, `ServiceName` `ClusterName`, `TaskDefinitionFamily`  |  La cantidad de veces que se ha reiniciado un contenedor de una tarea de Amazon ECS. Esta métrica se recopila únicamente para los contenedores que tienen una política de reinicio habilitada. También se aplica a Daemons administrados. Unidad: recuento  | 
|  `ServiceCount`  |  `ClusterName`  |  El número de servicios en el clúster. Unidad: recuento  | 
|  `StorageReadBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  La cantidad de bytes leídos desde el almacenamiento en la instancia en el recurso que se especifica mediante las dimensiones que está utilizando. Esto no incluye los bytes de lectura de sus dispositivos de almacenamiento. Esta métrica se obtiene del tiempo de ejecución de Docker. También se aplica a Daemons administrados. Unidades: bytes  | 
|  `StorageWriteBytes`  |  `TaskDefinitionFamily`, `ClusterName` `ServiceName`, `ClusterName` `ClusterName`  |  El número de bytes escritos en almacenamiento en el recurso que se especifica mediante las dimensiones que está utilizando. Esta métrica se obtiene del tiempo de ejecución de Docker. También se aplica a Daemons administrados. Unidades: bytes  | 
|  `TaskCount`  |  `ClusterName`  |  El número de tareas que se ejecutan en el clúster. Unidad: recuento  | 
|  `TaskSetCount`  |  `ServiceName`, `ClusterName`  |  El número de conjuntos de tareas en el servicio. Unidad: recuento  | 

**nota**  
Las métricas `EphemeralStorageReserved` y `EphemeralStorageUtilized` solo están disponibles para tareas que se ejecuten en la versión 1.4.0 o una versión posterior de la plataforma Fargate de Linux.  
Fargate reserva espacio en el disco. Solo lo usa Fargate. No se cobra por esto. No se muestra en estas métricas. Sin embargo, puede ver este almacenamiento adicional en otras herramientas, como `df`.

Las siguientes métricas están disponibles al completar los pasos en [Implementación del agente de CloudWatch para recopilar métricas de nivel de instancia EC2 en Amazon ECS](deploy-container-insights-ECS-instancelevel.md)


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `instance_cpu_limit`  |  `ClusterName`  |  El número máximo de unidades de CPU que se pueden asignar a una única instancia EC2 en el clúster. Unidad: ninguna  | 
|  `instance_cpu_reserved_capacity`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje de CPU reservado actualmente en una única instancia EC2 en el clúster. Unidad: porcentaje  | 
|  `instance_cpu_usage_total`  |  `ClusterName`  |  El número de unidades de CPU utilizadas en una única instancia EC2 en el clúster. Unidad: ninguna  | 
|  `instance_cpu_utilization`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje total de unidades de CPU utilizadas en una única instancia EC2 en el clúster.  Unidad: porcentaje  | 
|  `instance_filesystem_utilization`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje total de capacidad del sistema de archivos utilizada en una única instancia EC2 en el clúster.  Unidad: porcentaje  | 
|  `instance_memory_limit`  |  `ClusterName`  |  La cantidad máxima de memoria, en bytes, que se puede asignar a una única instancia EC2 en este clúster.  Unidades: bytes  | 
|  `instance_memory_reserved_capacity`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje de memoria reservada actualmente en una única instancia EC2 en el clúster. Unidad: porcentaje  | 
|  `instance_memory_utilization`  |  `ClusterName` `InstanceId`, `ContainerInstanceId`, `ClusterName`  |  El porcentaje total de memoria utilizada en una única instancia EC2 en el clúster.  Si utiliza el recolector de elementos no utilizados ZGC de Java para la aplicación, es posible que esta métrica no sea precisa.  Unidad: porcentaje  | 
|  `instance_memory_working_set`  |  `ClusterName`  |  La cantidad de memoria, en bytes, utilizada en una única instancia EC2 en el clúster.  Si utiliza el recolector de elementos no utilizados ZGC de Java para la aplicación, es posible que esta métrica no sea precisa.  Unidades: bytes  | 
|  `instance_network_total_bytes`  |  `ClusterName`  |  El número total de bytes por segundo transmitidos y recibidos a través de la red en una única instancia EC2 en el clúster. Unidad: bytes/segundo  | 
|  `instance_number_of_running_tasks`  |  `ClusterName`  |  El número de tareas en ejecución en una única instancia EC2 en el clúster. Unidad: recuento  | 

# Métricas de Amazon EKS e Información de contenedores de Kubernetes con observabilidad mejorada
<a name="Container-Insights-metrics-enhanced-EKS"></a>

En las siguientes tablas, se muestran las métricas y las dimensiones que recopila Información de contenedores con observabilidad mejorada para Amazon EKS y Kubernetes. Estas métricas se encuentran en el espacio de nombres `ContainerInsights`. Para obtener más información, consulte [Métricas](cloudwatch_concepts.md#Metric).

Si no ve ninguna métrica de Información de contenedores con observabilidad mejorada en la consola, asegúrese de haber completado la configuración de Información de contenedores con observabilidad mejorada. Las métricas no aparecen antes de haber configurado por completo Información de contenedores con observabilidad mejorada. Para obtener más información, consulte [Configuración de Información de contenedores](deploy-container-insights.md).

Si utiliza la versión 1.5.0 o posterior del complemento de Amazon EKS o la versión 1.300035.0 del agente CloudWatch, la mayoría de las métricas que se muestran en la siguiente tabla se recopilan para los nodos de Linux y Windows. Consulte la columna **Nombre de métrica** de la tabla para ver qué métricas no se recopilan para Windows.

Con la versión anterior de Información de contenedores, que ofrece métricas agregadas por clúster y servicio, las métricas se cargan como métricas personalizadas. Con Información de contenedores, con una observabilidad mejorada para Amazon EKS, las métricas de Información de contenedores se cobran por observación en lugar de cobrarse por métrica almacenada o registro ingerido. Para obtener más información sobre los precios de CloudWatch, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/). 

**nota**  
En Windows, las métricas de red como `pod_network_rx_bytes` y `pod_network_tx_bytes` no se recopilan para los contenedores de procesos del host.  
En los clústeres de RedHat OpenShift en AWS (ROSA), no se recopilan métricas de disco como `node_diskio_io_serviced_total` y `node_diskio_io_service_bytes_total`.


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `cluster_failed_node_count`  |  `ClusterName`  |  El número de nodos de trabajo con errores en el clúster. Se considera que un nodo ha fallado si está sufriendo de cualquiera de las *condiciones de nodo*. Para obtener más información, consulte [Conditions](https://kubernetes.io/docs/concepts/architecture/nodes/#condition) (Condiciones) en la documentación de Kubernetes.  | 
|  `cluster_node_count`  |  `ClusterName`  |  El número total de nodos de trabajo en el clúster.  | 
|  `namespace_number_of_running_pods`  |  `Namespace` `ClusterName` `ClusterName`  |  El número de pods que se ejecutan por espacio de nombres en el recurso que se especifica mediante las dimensiones que está utilizando.  | 
|  `node_cpu_limit`  |  `ClusterName`  `ClusterName`, `InstanceId`, `NodeName`   |  El número máximo de unidades de CPU que se pueden asignar a un único nodo en este clúster.  | 
|  `node_cpu_reserved_capacity`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje de unidades de CPU que están reservadas para los componentes de nodos, como kubelet, kube-proxy y Docker. Fórmula: `node_cpu_request / node_cpu_limit`  `node_cpu_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_cpu_usage_total`  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  El número de unidades de CPU que se utilizan en los nodos del clúster.  | 
|  `node_cpu_utilization`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje total de unidades de CPU que se utilizan en los nodos del clúster. Fórmula: `node_cpu_usage_total / node_cpu_limit`  | 
|  `node_filesystem_utilization`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje total de capacidad de sistema de archivos que se utiliza en los nodos del clúster. Fórmula: `node_filesystem_usage / node_filesystem_capacity`  `node_filesystem_usage` y `node_filesystem_capacity` no se informan directamente como métricas, sino que son campos en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_memory_limit`  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad máxima de memoria, en bytes, que se puede asignar a un único nodo en este clúster.  | 
|  `node_filesystem_inodes`  No está disponible en Windows.  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad total de inodos (utilizados y no utilizados) en un nodo.  | 
|  `node_filesystem_inodes_free` No está disponible en Windows.  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad total de inodos no utilizados en un nodo.  | 
|  `node_gpu_limit` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  El número total de GPU disponibles en el nodo.  | 
|  `node_gpu_usage_total` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  El número de GPU que utilizan los pods en ejecución en el nodo.  | 
|  `node_gpu_reserved_capacity` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  | 
|  `node_memory_reserved_capacity`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje de memoria que se utiliza actualmente en los nodos del clúster. Fórmula: `node_memory_request / node_memory_limit`  `node_memory_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_memory_utilization`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje de memoria que utiliza actualmente el nodo o los nodos. Es el porcentaje de uso de memoria de nodo sobre la limitación de memoria de nodo. Fórmula: `node_memory_working_set / node_memory_limit`.   | 
|  `node_memory_working_set`  |  `ClusterName`  `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad de memoria, en bytes, que se utiliza en el conjunto de trabajo de los nodos del clúster.  | 
|  `node_network_total_bytes`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El número total de bytes por segundo transmitidos y recibidos a través de la red por nodo en un clúster. Fórmula: `node_network_rx_bytes + node_network_tx_bytes`  `node_network_rx_bytes` y `node_network_tx_bytes` no se informan directamente como métricas, sino que son campos en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_number_of_running_containers`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El número de contenedores en ejecución por nodo en un clúster.  | 
|  `node_number_of_running_pods`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El número de pods en ejecución por nodo en un clúster.  | 
|  `node_status_allocatable_pods`   |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad de pods que se pueden asignar a un nodo en función de sus recursos asignables, que se define como el resto de la capacidad de un nodo después de tener en cuenta las reservas de daemons del sistema y los umbrales de expulsión forzoso.  | 
|  `node_status_capacity_pods`  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  Cantidad de pods que se pueden asignar a un nodo en función de su capacidad.  | 
|  `node_status_condition_ready`   |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  Indica si la condición de estado `Ready` del nodo es verdadera para los nodos de Amazon EC2.  | 
|  `node_status_condition_memory_pressure`   |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  Indica si la condición de estado `MemoryPressure` del nodo es verdadera.  | 
|  `node_status_condition_pid_pressure`   |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  Indica si la condición de estado `PIDPressure` del nodo es verdadera.  | 
|  `node_status_condition_disk_pressure`   |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  Indica si la condición de estado `OutOfDisk` del nodo es verdadera.  | 
|  `node_status_condition_unknown`   |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  Indica si alguna de las condiciones de estado del nodo es Desconocida.  | 
|  `node_interface_network_rx_dropped`  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad de paquetes que una interfaz de red del nodo recibió y luego descartó.  | 
|  `node_interface_network_tx_dropped`  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad de paquetes que debían transmitirse pero que una interfaz de red del nodo descartó.  | 
|  `node_diskio_io_service_bytes_total`  No está disponible en Windows ni en clústeres ROSA.  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad total de bytes transferidos por todas las operaciones de E/S del nodo.  | 
|  `node_diskio_io_serviced_total` No está disponible en Windows ni en clústeres ROSA.  |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`   |  La cantidad total de operaciones de E/S del nodo.  | 
|  `pod_cpu_reserved_capacity`  |  `PodName`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  `ClusterName`, `Namespace`, `Service`   |  La capacidad de la CPU reservada por pod en un clúster. Fórmula: `pod_cpu_request / node_cpu_limit`  `pod_cpu_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_cpu_utilization`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`   |  El porcentaje de unidades de CPU que utilizan los pods. Fórmula: `pod_cpu_usage_total / node_cpu_limit`  | 
|  `pod_cpu_utilization_over_pod_limit`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`   |  El porcentaje de unidades de CPU utilizadas por pods en relación con el límite de pods. Fórmula: `pod_cpu_usage_total / pod_cpu_limit`  | 
|  `pod_memory_reserved_capacity`  |  `PodName`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  `ClusterName`, `Namespace`, `Service`   |  El porcentaje de memoria reservada para los pods. Fórmula: `pod_memory_request / node_memory_limit`  `pod_memory_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_memory_utilization`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`   |  El porcentaje de memoria que utiliza actualmente el pod o los pods. Fórmula: `pod_memory_working_set / node_memory_limit`  | 
|  `pod_memory_utilization_over_pod_limit`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`   |  El porcentaje de memoria utilizada por los pods en relación con el límite de pods. Si algún contenedor del pod no tiene definido un límite de memoria, esta métrica no aparecerá. Fórmula: `pod_memory_working_set / pod_memory_limit`  | 
|  `pod_network_rx_bytes`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`   |  El número de bytes por segundo que se están recibiendo a través de la red por el pod. Fórmula: `sum(pod_interface_network_rx_bytes)`  `pod_interface_network_rx_bytes` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_network_tx_bytes`  |  `PodName`, `Namespace`, `ClusterName` `Namespace,` `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`   |  El número de bytes por segundo que se están transmitiendo a través de la red por el pod. Fórmula: `sum(pod_interface_network_tx_bytes)`  `pod_interface_network_tx_bytes` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_cpu_request`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Las solicitudes de la CPU para el pod. Fórmula: `sum(container_cpu_request)`  `pod_cpu_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_memory_request`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Las solicitudes de memoria para el pod. Fórmula: `sum(container_memory_request)`  `pod_memory_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_cpu_limit`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  El límite de la CPU definido para los contenedores del pod. Si algún contenedor del pod no tiene definido un límite de la CPU, esta métrica no aparecerá.  Fórmula: `sum(container_cpu_limit)`  `pod_cpu_limit` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_memory_limit`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  El límite de memoria definido para los contenedores del pod. Si algún contenedor del pod no tiene definido un límite de memoria, esta métrica no aparecerá.  Fórmula: `sum(container_memory_limit)`  `pod_cpu_limit` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_status_failed`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que todos los contenedores del pod terminaron y que al menos un contenedor terminó con un estado distinto de cero o lo canceló el sistema.   | 
|  `pod_status_ready`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que todos los contenedores del pod están listos y alcanzaron el estado de `ContainerReady`.   | 
|  `pod_status_running`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que todos los contenedores del pod están en ejecución.   | 
|  `pod_status_scheduled`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que el pod se programó para un nodo.   | 
|  `pod_status_unknown`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que no se puede obtener el estado del pod.   | 
|  `pod_status_pending`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que el clúster aceptó el pod, pero que uno o más de los contenedores aún no están listos.   | 
|  `pod_status_succeeded`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica que todos los contenedores del pod terminaron correctamente y no se reiniciarán.   | 
|  `pod_number_of_containers`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores definido en la especificación del pod.   | 
|  `pod_number_of_running_containers`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que se encuentran actualmente en el estado `Running`.   | 
|  `pod_container_status_terminated`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que se encuentran en el estado `Terminated`.   | 
|  `pod_container_status_running`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que se encuentran en el estado `Running`.   | 
|  `pod_container_status_waiting`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que se encuentran en el estado `Waiting`.   | 
|  `pod_container_status_waiting_reason_crash_loop_back_off`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que están pendientes debido a un error `CrashLoopBackOff`, en el que un contenedor repetidamente no se puede iniciar.  | 
|  `pod_container_status_waiting_reason_create_container_config_error`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que están pendientes con la razón `CreateContainerConfigError`. Esto se debe a un error al crear la configuración del contenedor.  | 
|  `pod_container_status_waiting_reason_create_container_error`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que están pendientes con la razón `CreateContainerError` debido a un error al crear el contenedor.  | 
|  `pod_container_status_waiting_reason_image_pull_error`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica el número de contenedores del pod que están pendientes gracias a `ErrImagePull`, `ImagePullBackOff` o `InvalidImageName`. Estas situaciones se deben a un error al extraer la imagen del contenedor.  | 
|  `pod_container_status_waiting_reason_start_error`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  Indica la cantidad de contenedores del pod que están pendientes con la razón `StartError` debido a un error al iniciar el contenedor.  | 
|  `pod_container_status_terminated_reason_oom_killed`   |  `ContainerName`, `FullPodName`, `PodName`, `Namespace`, `ClusterName` `ContainerName`, `PodName`, `Namespace`, `ClusterName` `ClusterName`  |  Indica que se ha cerrado un pod por superar el límite de memoria. Esta métrica solo se muestra cuando se produce este problema.  | 
|  `pod_interface_network_rx_dropped`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  La cantidad de paquetes que esta interfaz de red recibió y luego descartó para el pod.   | 
|  `pod_interface_network_tx_dropped`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  |  La cantidad de paquetes que debían transmitirse pero que se descartaron para el pod.   | 
| `pod_memory_working_set` |  `ClusterName` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  | La memoria en bytes que utiliza actualmente un pod. | 
| `pod_cpu_usage_total` |  `ClusterName` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName`  | El número de unidades de CPU que utiliza un pod. | 
|  `container_cpu_utilization`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName`, `ContainerName` `PodName`, `Namespace`, `ClusterName`, `ContainerName`, `FullPodName`  |  El porcentaje de unidades de CPU que utiliza el contenedor. Fórmula: `container_cpu_usage_total / node_cpu_limit`  `container_cpu_utilization` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `container_cpu_utilization_over_container_limit`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName`, `ContainerName` `PodName`, `Namespace`, `ClusterName`, `ContainerName`, `FullPodName`  |  El porcentaje de unidades de CPU que utiliza el contenedor en relación con el límite de pods. Si algún contenedor no tiene definido un límite de la CPU, esta métrica no aparecerá. Fórmula: `container_cpu_usage_total / container_cpu_limit`  `container_cpu_utilization_over_container_limit` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `container_memory_utilization`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName`, `ContainerName` `PodName`, `Namespace`, `ClusterName`, `ContainerName`, `FullPodName`  |  El porcentaje de unidades de memoria que utiliza el contenedor. Fórmula: `container_memory_working_set / node_memory_limit`  `container_memory_utilization` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `container_memory_utilization_over_container_limit`    |  `ClusterName` `PodName`, `Namespace`, `ClusterName`, `ContainerName` `PodName`, `Namespace`, `ClusterName`, `ContainerName`, `FullPodName`  |  El porcentaje de unidades de memoria que utiliza el contenedor en relación con el límite del contenedor. Si algún contenedor no tiene definido un límite de memoria, esta métrica no aparecerá. Fórmula: `container_memory_working_set / container_memory_limit`  `container_memory_utilization_over_container_limit` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `container_memory_failures_total`  No está disponible en Windows.  |  `ClusterName` `PodName`, `Namespace`, `ClusterName`, `ContainerName` `PodName`, `Namespace`, `ClusterName`, `ContainerName`, `FullPodName`  |  La cantidad de errores de asignación de memoria que experimentó el contenedor.  | 
|  `pod_number_of_container_restarts`  |  PodName, `Namespace`, `ClusterName`  |  El número total de reinicios del contenedor en un pod.  | 
|  `service_number_of_running_pods`  |  Servicio, `Namespace`, `ClusterName` `ClusterName`  |  El número de pods que ejecutan el servicio o servicios en el clúster.  | 
|  `replicas_desired`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName`  |  La cantidad de pods deseada para una carga de trabajo, tal como se define en la especificación de la carga de trabajo.  | 
|  `replicas_ready`   |  `ClusterName` `PodName`, `Namespace`, `ClusterName`  |  La cantidad de pods de una carga de trabajo que alcanzó el estado listo.  | 
|  `status_replicas_available`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName`  |  La cantidad de pods disponibles para una carga de trabajo. Un pod está disponible cuando está listo para cumplir con los `minReadySeconds` definidos en la especificación de la carga de trabajo.  | 
|  `status_replicas_unavailable`  |  `ClusterName` `PodName`, `Namespace`, `ClusterName`  |  La cantidad de pods de una carga de trabajo que no están disponibles. Un pod está disponible cuando está listo para cumplir con los `minReadySeconds` definidos en la especificación de la carga de trabajo. Los pods no están disponibles si no cumplen este criterio.  | 
|  `apiserver_storage_objects`  |  `ClusterName` `ClusterName`, `resource`  |  La cantidad de objetos almacenados en etcd en el momento de la última comprobación.  | 
|  `apiserver_storage_db_total_size_in_bytes`  |  `ClusterName` `ClusterName`, `endpoint`  |  El tamaño total del archivo de base de datos de almacenamiento asignado físicamente en bytes. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes. Unidades: bytes Estadísticas significativas: suma, promedio, mínimo, máximo  | 
|  `apiserver_request_total`  |  `ClusterName` `ClusterName`, `code`, `verb`  |  La cantidad total de solicitudes de la API al servidor de la API de Kubernetes.  | 
|  `apiserver_request_duration_seconds`  |  `ClusterName` `ClusterName`, `verb`  |  La latencia de respuesta a las solicitudes de la API al servidor de la API de Kubernetes.  | 
|  `apiserver_admission_controller_admission_duration_seconds`  |  `ClusterName` `ClusterName`, `operation`  |  La latencia del controlador de admisión en segundos. Un controlador de admisión es un código que intercepta las solicitudes al servidor de la API de Kubernetes.  | 
|  `rest_client_request_duration_seconds`   |  `ClusterName` `ClusterName`, `operation`  |  La latencia de respuesta que experimentan los clientes que llaman al servidor de la API de Kubernetes. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 
|  `rest_client_requests_total`   |  `ClusterName` `ClusterName`, `code`, `method`  |  La cantidad total de solicitudes de la API al servidor de la API de Kubernetes que hacen los clientes. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 
|  `etcd_request_duration_seconds`   |  `ClusterName` `ClusterName`, `operation`  |  La latencia de respuesta de las llamadas de la API a Etcd. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 
|  `apiserver_storage_size_bytes`   |  `ClusterName` `ClusterName`, `endpoint`  |  El tamaño del archivo de base de datos de almacenamiento asignado físicamente en bytes. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 
|  `apiserver_longrunning_requests`  |  `ClusterName` `ClusterName`, `resource`  |  La cantidad de solicitudes activas de larga duración al servidor de la API de Kubernetes.  | 
|  `apiserver_current_inflight_requests`  |  `ClusterName` `ClusterName`, `request_kind`  |  La cantidad de solicitudes que procesa el servidor de la API de Kubernetes.  | 
|  `apiserver_admission_webhook_admission_duration_seconds`  |  `ClusterName` `ClusterName`, `name`  |  La latencia del webhook de admisión en segundos. Los webhooks de admisión son devoluciones de llamadas HTTP que reciben las solicitudes de admisión y hacen algo con ellas.  | 
|  `apiserver_admission_step_admission_duration_seconds`   |  `ClusterName` `ClusterName`, `operation`  |  La latencia del subpaso de admisión en segundos.  | 
|  `apiserver_requested_deprecated_apis`   |  `ClusterName` `ClusterName`, `group`  |  La cantidad de solicitudes a API obsoletas en el servidor de la API de Kubernetes.  | 
|  `apiserver_request_total_5xx`  |  `ClusterName` `ClusterName`, `code`, `verb`  |  La cantidad de solicitudes al servidor de la API de Kubernetes a las que se respondió con un código de respuesta HTTP 5XX.  | 
|  `apiserver_storage_list_duration_seconds`   |  `ClusterName` `ClusterName`, `resource`  |  La latencia de respuesta de los objetos listados de Etc. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 
|  `apiserver_flowcontrol_request_concurrency_limit`   |  `ClusterName` `ClusterName`, `priority_level`  |  El número de subprocesos que utilizan las solicitudes que se están ejecutando actualmente en el Subsistema de prioridad y equidad de la API.  | 
|  `apiserver_flowcontrol_rejected_requests_total`   |  `ClusterName` `ClusterName`, `reason`  |  La cantidad de solicitudes rechazadas por el Subsistema de prioridad y equidad de la API. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 
|  `apiserver_current_inqueue_requests`   |  `ClusterName` `ClusterName`, `request_kind`  |  La cantidad de solicitudes en cola que colocó el servidor de la API de Kubernetes. Esta métrica es experimental y puede cambiar en futuras versiones de Kubernetes.  | 

## Métricas de GPU de NVIDIA
<a name="Container-Insights-metrics-EKS-GPU"></a>

A partir de la versión `1.300034.0` del agente de CloudWatch, Información de contenedores con observabilidad mejorada para Amazon EKS recopila las métricas de GPU de NVIDIA de las cargas de trabajo de EKS de forma predeterminada. El agente de CloudWatch debe instalarse con la versión `v1.3.0-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch. Para obtener más información, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md). Estas métricas de GPU de NVIDIA que se recopilan se muestran en la tabla de esta sección. 

Para que Información de contenedores recopile métricas de GPU de NVIDIA, debe cumplir los siguientes requisitos previos:
+ Debe utilizar Información de contenedores con observabilidad mejorada para Amazon EKS, con la versión `v1.3.0-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch.
+ [El complemento de dispositivo de NVIDIA para Kubernetes](https://github.com/NVIDIA/k8s-device-plugin) debe estar instalado en el clúster.
+ [El kit de herramientas de contenedor de NVIDIA](https://github.com/NVIDIA/nvidia-container-toolkit) debe estar instalado en los nodos del clúster. Por ejemplo, las AMI aceleradas optimizadas para Amazon EKS se crearon con los componentes necesarios.

Para dejar de recopilar métricas de GPU de NVIDIA, establezca la opción `accelerated_compute_metrics` del inicio del archivo de configuración del agente de CloudWatch como `false`. Para obtener más información y un ejemplo de configuración de desactivación, consulte [Configuraciones adicionales (Opcional)](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration).


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `container_gpu_memory_total` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El tamaño total del búfer del marco, en bytes, en las GPU asignadas al contenedor.  | 
|  `container_gpu_memory_used` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  Los bytes del búfer del marco que se usan en las GPU asignadas al contenedor.  | 
|  `container_gpu_memory_utilization` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El porcentaje del búfer del marco que se usa en las GPU asignadas al contenedor.  | 
|  `container_gpu_power_draw` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El consumo de energía en vatios de las GPU asignadas al contenedor.  | 
|  `container_gpu_temperature` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  La temperatura en grados centígrados de las GPU asignadas al contenedor.  | 
|  `container_gpu_utilization` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El porcentaje de uso de las GPU asignadas al contenedor.  | 
|  `container_gpu_tensor_core_utilization` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El porcentaje de uso de los núcleos tensoriales de las GPU asignados al contenedor.  | 
|  `node_gpu_memory_total` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  El tamaño total del búfer del marco, en bytes, en las GPU asignadas al nodo.  | 
|  `node_gpu_memory_used` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  Los bytes del búfer del marco que se usan en las GPU asignadas al nodo.  | 
|  `node_gpu_memory_utilization` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  El porcentaje del búfer del marco que se usa en las GPU asignadas al nodo.  | 
|  `node_gpu_power_draw` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  El consumo de energía en vatios de las GPU asignadas al nodo.  | 
|  `node_gpu_temperature` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  La temperatura en grados centígrados de las GPU asignadas al nodo.  | 
|  `node_gpu_utilization` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  El porcentaje de uso de las GPU asignadas al nodo.  | 
|  `node_gpu_tensor_core_utilization` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `GpuDevice`  |  El porcentaje de uso de los núcleos tensoriales de las GPU asignados al nodo.  | 
|  `pod_gpu_memory_total` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`. `GpuDevice`  |  El tamaño total del búfer del marco, en bytes, en las GPU asignadas al pod.  | 
|  `pod_gpu_memory_used` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`. `GpuDevice`  |  Los bytes del búfer del marco que se usan en las GPU asignadas al pod.  | 
|  `pod_gpu_memory_utilization` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`. `GpuDevice`  |  El porcentaje del búfer del marco que se usa en las GPU asignadas al pod.  | 
|  `pod_gpu_power_draw` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`. `GpuDevice`  |  El consumo de energía en vatios de las GPU asignadas al pod.  | 
|  `pod_gpu_temperature` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`. `GpuDevice`  |  La temperatura en grados Celsius de las GPU asignadas al pod.  | 
|  `pod_gpu_utilization` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El porcentaje de uso de las GPU asignadas al pod.  | 
|  `pod_gpu_tensor_core_utilization` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `GpuDevice`  |  El porcentaje de uso de los núcleos tensoriales de las GPU asignados al pod.  | 

### Supervisión detallada de GPU
<a name="Container-Insights-detailed-GPU-monitoring"></a>

A partir de la versión `1.300062.0` del agente de CloudWatch, Información de contenedores con observabilidad mejorada para Amazon EKS permite supervisar GPU de forma detallada con intervalos de recopilación inferiores a un minuto. Esto corrige las deficiencias de supervisión de las cargas de trabajo de inferencia de machine learning de corta duración que pueden pasar completamente desapercibidas en los intervalos de recopilación estándar. El agente de CloudWatch debe instalarse con la versión `v4.7.0-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch. Para obtener más información, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md).

De forma predeterminada, las métricas de GPU se recopilan e ingieren en intervalos de 60 segundos. Con la supervisión detallada activada, el agente de CloudWatch recopila las métricas de GPU en intervalos de menos de un minuto (1 segundo como mínimo), pero las métricas se siguen transfiriendo a CloudWatch en intervalos de 1 minuto. Sin embargo, puede consultar agregaciones estadísticas (como el mínimo, el máximo y los percentiles, como p90) de los puntos de datos inferiores a un minuto en cada periodo de 1 minuto, lo que proporciona datos precisos sobre el uso de GPU y una mejor optimización de los recursos.

#### Configuración
<a name="Container-Insights-detailed-GPU-monitoring-configuration"></a>

Para activar la supervisión detallada de GPU, actualice la configuración del agente de CloudWatch para incluir el parámetro `accelerated_compute_gpu_metrics_collection_interval` en la sección `kubernetes`, como en el siguiente ejemplo.

```
{  
    "logs": {  
        "metrics_collected": {  
            "kubernetes": {  
                "cluster_name": "MyCluster",  
                "enhanced_container_insights": true,  
                "accelerated_compute_metrics": true,  
                "accelerated_compute_gpu_metrics_collection_interval": 1  
            }  
        }  
    }  
}
```

El parámetro `accelerated_compute_gpu_metrics_collection_interval` acepta valores en segundos, con un valor mínimo de 1 segundo. Al configurarlo en `1`, se activan intervalos de recopilación de 1 segundo. Si no se especifica este parámetro, se utiliza el intervalo predeterminado de 60 segundos.

Para obtener las instrucciones de configuración completas, consulte [Configuración del agente de CloudWatch para recopilar las métricas del clúster](Container-Insights-setup-metrics.md).

## Métricas de AWS Neuron para AWS Trainium y AWS Inferentia
<a name="Container-Insights-metrics-EKS-Neuron"></a>

A partir de la versión `1.300036.0` del agente de CloudWatch, Información de contenedores con observabilidad mejorada para Amazon EKS recopila métricas de computación aceleradas de los aceleradores de AWS Trainium y AWS Inferentia de forma predeterminada. El agente de CloudWatch debe instalarse con la versión `v1.5.0-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch. Para obtener más información acerca del complemento, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md). Para obtener más información acerca de AWS Trainium, consulte [AWS Trainium](https://aws.amazon.com/machine-learning/trainium/). Para obtener más información acerca de AWS Inferentia, consulte [AWS Inferentia](https://aws.amazon.com/machine-learning/inferentia/).

Para que Información de contenedores recopile métricas de AWS Neuron, debe cumplir los siguientes requisitos previos:
+ Debe utilizar Información de contenedores con observabilidad mejorada para Amazon EKS, con la versión `v1.5.0-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch.
+ El [controlador Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/setup/neuron-setup/pytorch/neuronx/ubuntu/torch-neuronx-ubuntu22.html#setup-torch-neuronx-ubuntu22) debe estar instalado en los nodos del clúster.
+ El [complemento del dispositivo Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html) debe estar instalado en el clúster. Por ejemplo, las AMI aceleradas optimizadas para Amazon EKS se crearon con los componentes necesarios.

Las métricas que se recopilan se muestran en la tabla de esta sección. Las métricas se recopilan para AWS Trainium, AWS Inferentia y AWS Inferentia2.

El agente CloudWatch recopila estas métricas de [Neuron Monitor](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/tools/neuron-sys-tools/neuron-monitor-user-guide.html) y lleva a cabo la correlación de recursos de Kubernetes necesaria para entregar las métricas por pod y contenedor.


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `container_neuroncore_utilization` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  Utilización de NeuronCore, durante el período de captura del NeuronCore asignado al contenedor. Unidad: porcentaje  | 
|  `container_neuroncore_memory_usage_constants` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para las constantes durante el entrenamiento y que se asigna al contenedor (o a los pesos durante la inferencia). Unidades: bytes  | 
|  `container_neuroncore_memory_usage_model_code` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el código ejecutable de los modelos y que se asigna al contenedor. Unidades: bytes  | 
|  `container_neuroncore_memory_usage_model_shared_scratchpad` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el scratchpad compartido de los modelos y que se asigna al contenedor. Esta región de memoria está reservada para los modelos. Unidades: bytes  | 
|  `container_neuroncore_memory_usage_runtime_memory` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el tiempo de ejecución de Neuron y que se asigna al contenedor. Unidades: bytes  | 
|  `container_neuroncore_memory_usage_tensors` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para los tensores y que se asigna al contenedor. Unidades: bytes  | 
|  `container_neuroncore_memory_usage_total` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`, `NeuronCore`  |  La cantidad total de memoria que NeuronCore utiliza y que se asigna al contenedor. Unidades: bytes  | 
|  `container_neurondevice_hw_ecc_events_total` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NeuronDevice`  |  El número de eventos de ECC corregidos y no corregidos para la SRAM integrada en el chip y la memoria del dispositivo Neuron del nodo. Unidad: recuento  | 
|  `pod_neuroncore_utilization` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La utilización de NeuronCore durante el período de captura de NeuronCore asignada al pod. Unidad: porcentaje  | 
|  `pod_neuroncore_memory_usage_constants` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para las constantes durante el entrenamiento y que se asigna al pod (o a los pesos durante la inferencia). Unidades: bytes  | 
|  `pod_neuroncore_memory_usage_model_code` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el código ejecutable de los modelos y que se asigna al pod. Unidades: bytes  | 
|  `pod_neuroncore_memory_usage_model_shared_scratchpad` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el scratchpad compartido de los modelos y que se asigna al pod. Esta región de memoria está reservada para los modelos. Unidades: bytes  | 
|  `pod_neuroncore_memory_usage_runtime_memory` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el tiempo de ejecución de Neuron y que se asigna al pod. Unidades: bytes  | 
|  `pod_neuroncore_memory_usage_tensors` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para los tensores y que se asigna al pod. Unidades: bytes  | 
|  `pod_neuroncore_memory_usage_total` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`, `NeuronCore`  |  La cantidad total de memoria que NeuronCore utiliza y que se asigna al pod. Unidades: bytes  | 
|  `pod_neurondevice_hw_ecc_events_total` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NeuronDevice`  |  La cantidad de eventos de ECC corregidos y no corregidos para la SRAM en el chip y la memoria del dispositivo Neuron asignada a un pod. Unidades: bytes  | 
|  `node_neuroncore_utilization` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La utilización de NeuronCore durante el período de captura de NeuronCore asignada al nodo. Unidad: porcentaje  | 
|  `node_neuroncore_memory_usage_constants` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para las constantes durante el entrenamiento y que se asigna al nodo (o a los pesos durante la inferencia). Unidades: bytes  | 
|  `node_neuroncore_memory_usage_model_code` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el código ejecutable de los modelos y que se asigna al nodo. Unidades: bytes  | 
|  `node_neuroncore_memory_usage_model_shared_scratchpad` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el scratchpad compartido de los modelos y que se asigna al nodo. Esta es una región de memoria reservada para los modelos. Unidades: bytes  | 
|  `node_neuroncore_memory_usage_runtime_memory` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para el tiempo de ejecución de Neuron y que se asigna al nodo. Unidades: bytes  | 
|  `node_neuroncore_memory_usage_tensors` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La cantidad de memoria del dispositivo que NeuronCore utiliza para los tensores y que se asigna al nodo. Unidades: bytes  | 
|  `node_neuroncore_memory_usage_total` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceType`, `InstanceId`, `NodeName`, `NeuronDevice`, `NeuronCore`  |  La cantidad total de memoria que NeuronCore utiliza y que se asigna al nodo. Unidades: bytes  | 
|  `node_neuron_execution_errors_total` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName`  |  El número total de errores de ejecución del nodo. El agente de CloudWatch lo calcula agregando los errores de los siguientes tipos: `generic`, `numerical`, `transient`, `model`, `runtime` y `hardware` Unidad: recuento  | 
|  `node_neurondevice_runtime_memory_used_bytes` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName`  |  El uso total de memoria del dispositivo Neuron en bytes en el nodo. Unidades: bytes  | 
| `node_neuron_execution_latency` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName`  |  En segundos, la latencia para una ejecución en el nodo medida por el tiempo de ejecución de Neuron. Unidad: segundos  | 
| `node_neurondevice_hw_ecc_events_total` |  `ClusterName` `ClusterName`, `UltraServer` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `NodeName`, `NeuronDevice`  |  El número de eventos de ECC corregidos y no corregidos para la SRAM integrada en el chip y la memoria del dispositivo Neuron del nodo. Unidad: recuento  | 

## Métricas de AWS Elastic Fabric Adapter (EFA)
<a name="Container-Insights-metrics-EFA"></a>

A partir de la versión `1.300037.0` del agente de CloudWatch, Información de contenedores con observabilidad mejorada para Amazon EKS recopila métricas de AWS Elastic Fabric Adapter (EFA) de clústeres de Amazon EKS en instancias de Linux. El agente de CloudWatch debe instalarse con la versión `v1.5.2-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch. Para obtener más información acerca del complemento, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md). Para obtener más información sobre AWS Elastic Fabric Adapter (EFA), consulte [Elastic Fabric Adapter](https://aws.amazon.com/hpc/efa/).

Para que Información de contenedores recopile métricas de AWS Elastic Fabric Adapter, debe cumplir los siguientes requisitos previos:
+ Debe utilizar Información de contenedores con observabilidad mejorada para Amazon EKS, con la versión `v1.5.2-eksbuild.1` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch.
+ El complemento del dispositivo EFA debe estar instalado en el clúster. Para obtener más información, consulte [aws-efa-k8s-device-plugin](https://github.com/aws/eks-charts/tree/master/stable/aws-efa-k8s-device-plugin) en GitHub.

Las métricas que se recopilan se enumeran en la siguiente tabla. 


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `container_efa_rx_bytes` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NetworkInterfaceId`   |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al contenedor. Unidad: bytes/segundo  | 
|  `container_efa_tx_bytes` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NetworkInterfaceId`   |  El número de bytes por segundo que han transmitido los dispositivos EFA asignados al contenedor. Unidad: bytes/segundo  | 
|  `container_efa_rx_dropped` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NetworkInterfaceId`   |  El número de paquetes que han recibido y luego descartado los dispositivos EFA asignados al contenedor. Unidad: recuento/segundo  | 
|  `container_efa_rdma_read_bytes` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NetworkInterfaceId`   |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al contenedor mediante operaciones de lectura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `container_efa_rdma_write_bytes` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NetworkInterfaceId`   |  El número de bytes por segundo que han transmitido los dispositivos EFA asignados al contenedor mediante operaciones de lectura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `container_efa_rdma_write_recv_bytes` |  `ClusterName` `ClusterName`, `Namespace`, `PodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `ContainerName`, `NetworkInterfaceId`   |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al contenedor durante operaciones de escritura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `pod_efa_rx_bytes` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al pod. Unidad: bytes/segundo  | 
|  `pod_efa_tx_bytes` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han transmitido los dispositivos EFA asignados al pod. Unidad: bytes/segundo  | 
|  `pod_efa_rx_dropped` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NetworkInterfaceId`  |  El número de paquetes que han recibido y luego descartado los dispositivos EFA asignados al pod. Unidad: recuento/segundo  | 
|  `pod_efa_rdma_read_bytes` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al pod mediante operaciones de lectura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `pod_efa_rdma_write_bytes` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han transmitido los dispositivos EFA asignados al pod mediante operaciones de lectura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `pod_efa_rdma_write_recv_bytes` |  `ClusterName` `ClusterName`, `Namespace` `ClusterName`, `Namespace`, `Service` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName` `ClusterName`, `Namespace`, `PodName`, `FullPodName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al pod durante operaciones de escritura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `node_efa_rx_bytes` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al nodo. Unidad: bytes/segundo  | 
|  `node_efa_tx_bytes` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han transmitido los dispositivos EFA asignados al nodo. Unidad: bytes/segundo  | 
|  `node_efa_rx_dropped` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `NetworkInterfaceId`  |  El número de paquetes que han recibido y luego descartado los dispositivos EFA asignados al nodo. Unidad: recuento/segundo  | 
|  `node_efa_rdma_read_bytes` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al nodo mediante operaciones de lectura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `node_efa_rdma_write_bytes` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han transmitido los dispositivos EFA asignados al pod mediante operaciones de lectura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 
|  `node_efa_rdma_write_recv_bytes` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName` `ClusterName`, `InstanceId`, `InstanceType`, `NodeName`, `NetworkInterfaceId`  |  El número de bytes por segundo que han recibido los dispositivos EFA asignados al nodo durante operaciones de escritura de acceso remoto directo a la memoria. Unidad: bytes/segundo  | 

## Métricas de Amazon SageMaker AI HyperPod
<a name="Container-Insights-metrics-Sagemaker-HyperPod"></a>

A partir de la versión `v2.0.1-eksbuild.1` del complemento de observabilidad de EKS de CloudWatch, Información de contenedores con observabilidad mejorada para Amazon EKS recopila automáticamente métricas de Amazon SageMaker AI HyperPod de clústeres de Amazon EKS. Para obtener más información acerca del complemento, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md). Para obtener más información sobre Amazon SageMaker AI HyperPod, consulte [Amazon SageMaker AI HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks.html).

Las métricas que se recopilan se enumeran en la siguiente tabla. 


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `hyperpod_node_health_status_unschedulable` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  Indica si Amazon SageMaker AI HyperPod ha etiquetado un nodo como `Unschedulable`. Esto significa que el nodo está llevando a cabo comprobaciones de estado exhaustivas y no está disponible para ejecutar cargas de trabajo. Unidad: recuento  | 
|  `hyperpod_node_health_status_schedulable` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  Indica si Amazon SageMaker AI HyperPod ha etiquetado un nodo como `Schedulable`. Esto significa que el nodo ha superado las comprobaciones de estado básicas o exhaustivas y está disponible para ejecutar cargas de trabajo. Unidad: recuento  | 
|  `hyperpod_node_health_status_unschedulable_pending_replacement` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  Indica si HyperPod ha etiquetado un nodo como `UnschedulablePendingReplacement`. Esto significa que el nodo no ha superado las comprobaciones de estado exhaustivas o las comprobaciones del agente de supervisión del estado y tiene que reemplazarse. Si la recuperación automática de nodos está habilitada, Amazon SageMaker AI HyperPod reemplazará automáticamente el nodo. Unidad: recuento  | 
|  `hyperpod_node_health_status_unschedulable_pending_reboot` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  Indica si Amazon SageMaker AI HyperPod ha etiquetado un nodo como `UnschedulablePendingReboot`. Esto significa que el nodo está haciendo comprobaciones de estado exhaustivas y es necesario reiniciarlo. Si la recuperación automática de nodos está habilitada, Amazon SageMaker AI HyperPod reiniciará automáticamente el nodo. Unidad: recuento  | 

## Métricas del controlador NVMe de Amazon EBS
<a name="Container-Insights-metrics-EBS"></a>

A partir de la versión ` 1.300056.0` del agente de CloudWatch, Información de contenedores con observabilidad mejorada para Amazon EKS recopila automáticamente métricas del controlador NVMe de Amazon EBS de clústeres de Amazon EKS en instancias de Linux. El agente de CloudWatch debe instalarse con la versión `4.1.0` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch. Para obtener más información acerca del complemento, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md). Para obtener más información sobre Amazon EBS, consulte [Estadísticas de rendimiento detalladas de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/nvme-detailed-performance-stats.html).

Para que Información de contenedores recopile métricas del controlador NVMe de Amazon EBS, debe cumplir los siguientes requisitos previos:
+ Debe utilizar Información de contenedores con observabilidad mejorada para Amazon EKS, con la versión `4.1.0` o posterior del complemento de EKS de observabilidad de Amazon CloudWatch.
+ El complemento `1.42.0` del controlador CSI de EBS o el gráfico de Helm deben estar instalados en el clúster con las métricas habilitadas.
  + Para habilitar las métricas cuando utilice el complemento del controlador CSI de Amazon EBS, use la siguiente opción durante la creación o actualización del complemento. `--configuration-values '{ "node": { "enableMetrics": true } }'`
  + Para habilitar las métricas si utiliza el gráfico de Helm, use la siguiente opción durante la creación o actualización del complemento. `--set node.enableMetrics=true`

Las métricas que se recopilan se enumeran en la siguiente tabla. 


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `node_diskio_ebs_total_read_ops` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El número total de operaciones de lectura completadas. | 
|  `node_diskio_ebs_total_write_ops` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El número total de operaciones de escritura completadas. | 
|  `node_diskio_ebs_total_read_bytes` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El número total de bytes de lectura transferidos. | 
|  `node_diskio_ebs_total_write_bytes` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El número total de bytes de escritura transferidos. | 
|  `node_diskio_ebs_total_read_time` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El tiempo total empleado, en microsegundos, por todas las operaciones de lectura completadas. | 
|  `node_diskio_ebs_total_write_time` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El tiempo total empleado, en microsegundos, por todas las operaciones de escritura completadas. | 
|  `node_diskio_ebs_volume_performance_exceeded_iops` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El tiempo total, en microsegundos, durante el que la demanda de IOPS superó el rendimiento de las IOPS aprovisionadas para el volumen. | 
|  `node_diskio_ebs_volume_performance_exceeded_tp` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El tiempo total, en microsegundos, durante el que la demanda de rendimiento superó el rendimiento aprovisionado para el volumen. | 
|  `node_diskio_ebs_ec2_instance_performance_exceeded_iops` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El tiempo total, en microsegundos, durante el que el volumen de EBS superó el rendimiento máximo de IOPS de la instancia de Amazon EC2 asociada. | 
|  `node_diskio_ebs_ec2_instance_performance_exceeded_tp` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El tiempo total, en microsegundos, durante el que el volumen de EBS superó el rendimiento máximo de la instancia de Amazon EC2 asociada. | 
|  `node_diskio_ebs_volume_queue_length` |  `ClusterName` `ClusterName`, `NodeName`, `InstanceId` `ClusterName`, `NodeName`, `InstanceId` `VolumeId`  | El número de operaciones de lectura y escritura a la espera de completarse. | 

# Métricas de Información de contenedores de Kubernetes y de Amazon EKS
<a name="Container-Insights-metrics-EKS"></a>

En las siguientes tablas, se muestran las métricas y las dimensiones que recopila Información de contenedores para Amazon EKS y Kubernetes. Estas métricas se encuentran en el espacio de nombres `ContainerInsights`. Para obtener más información, consulte [Métricas](cloudwatch_concepts.md#Metric).

Si no ve ninguna métrica de Información de contenedores en la consola, asegúrese de haber completado la configuración de Información de contenedores. Las métricas no aparecen antes de haber configurado por completo Información de contenedores. Para obtener más información, consulte [Configuración de Información de contenedores](deploy-container-insights.md).


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `cluster_failed_node_count`  |  `ClusterName`  |  El número de nodos de trabajo con errores en el clúster. Se considera que un nodo ha fallado si está sufriendo de cualquiera de las *condiciones de nodo*. Para obtener más información, consulte [Conditions](https://kubernetes.io/docs/concepts/architecture/nodes/#condition) (Condiciones) en la documentación de Kubernetes.  | 
|  `cluster_node_count`  |  `ClusterName`  |  El número total de nodos de trabajo en el clúster.  | 
|  `namespace_number_of_running_pods`  |  `Namespace` `ClusterName` `ClusterName`  |  El número de pods que se ejecutan por espacio de nombres en el recurso que se especifica mediante las dimensiones que está utilizando.  | 
|  `node_cpu_limit`  |  `ClusterName`   |  El número máximo de unidades de CPU que se pueden asignar a un único nodo en este clúster.  | 
|  `node_cpu_reserved_capacity`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje de unidades de CPU que están reservadas para los componentes de nodos, como kubelet, kube-proxy y Docker. Fórmula: `node_cpu_request / node_cpu_limit`  `node_cpu_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_cpu_usage_total`  |  `ClusterName`  |  El número de unidades de CPU que se utilizan en los nodos del clúster.  | 
|  `node_cpu_utilization`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje total de unidades de CPU que se utilizan en los nodos del clúster. Fórmula: `node_cpu_usage_total / node_cpu_limit`  | 
|  `node_gpu_limit` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  El número total de GPU disponibles en el nodo.  | 
|  `node_gpu_usage_total` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  El número de GPU que utilizan los pods en ejecución en el nodo.  | 
|  `node_gpu_reserved_capacity` |  `ClusterName` `ClusterName`, `InstanceId`, `NodeName`  |  El porcentaje de GPU que se reserva actualmente en el nodo. La fórmula es, `node_gpu_request / node_gpu_limit`.  `node_gpu_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).   | 
|  `node_filesystem_utilization`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje total de capacidad de sistema de archivos que se utiliza en los nodos del clúster. Fórmula: `node_filesystem_usage / node_filesystem_capacity`  `node_filesystem_usage` y `node_filesystem_capacity` no se informan directamente como métricas, sino que son campos en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_memory_limit`  |  `ClusterName`  |  La cantidad máxima de memoria, en bytes, que se puede asignar a un único nodo en este clúster.  | 
|  `node_memory_reserved_capacity`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje de memoria que se utiliza actualmente en los nodos del clúster. Fórmula: `node_memory_request / node_memory_limit`  `node_memory_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_memory_utilization`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El porcentaje de memoria que utiliza actualmente el nodo o los nodos. Es el porcentaje de uso de memoria de nodo sobre la limitación de memoria de nodo. Fórmula: `node_memory_working_set / node_memory_limit`.   | 
|  `node_memory_working_set`  |  `ClusterName`   |  La cantidad de memoria, en bytes, que se utiliza en el conjunto de trabajo de los nodos del clúster.  | 
|  `node_network_total_bytes`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El número total de bytes por segundo transmitidos y recibidos a través de la red por nodo en un clúster. Fórmula: `node_network_rx_bytes + node_network_tx_bytes`  `node_network_rx_bytes` y `node_network_tx_bytes` no se informan directamente como métricas, sino que son campos en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `node_number_of_running_containers`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El número de contenedores en ejecución por nodo en un clúster.  | 
|  `node_number_of_running_pods`  |  `NodeName`, `ClusterName`, `InstanceId` `ClusterName`  |  El número de pods en ejecución por nodo en un clúster.  | 
|  `pod_cpu_reserved_capacity`  |  `PodName`, `Namespace`, `ClusterName` `ClusterName`  |  La capacidad de la CPU reservada por pod en un clúster. Fórmula: `pod_cpu_request / node_cpu_limit`  `pod_cpu_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_cpu_utilization`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El porcentaje de unidades de CPU que utilizan los pods. Fórmula: `pod_cpu_usage_total / node_cpu_limit`  | 
|  `pod_cpu_utilization_over_pod_limit`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El porcentaje de unidades de CPU utilizadas por pods en relación con el límite de pods. Fórmula: `pod_cpu_usage_total / pod_cpu_limit`  | 
|  `pod_gpu_request` |  `ClusterName` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `FullPodName`, `Namespace`, `PodName`  |  Las solicitudes de la GPU para el pod. Este valor siempre debe ser igual a `pod_gpu_limit`.  | 
|  `pod_gpu_limit` |  `ClusterName` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `FullPodName`, `Namespace`, `PodName`  |  El número máximo de GPU de un nodo que se pueden asignar al pod de un nodo.  | 
|  `pod_gpu_usage_total` |  `ClusterName` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `FullPodName`, `Namespace`, `PodName`  |  El número de GPU que se asignan al pod.  | 
|  `pod_gpu_reserved_capacity` |  `ClusterName` `ClusterName`, `Namespace`, `PodName` `ClusterName`, `FullPodName`, `Namespace`, `PodName`  |  El porcentaje de GPU que se reserva actualmente en el pod. La fórmula es pod\$1gpu\$1request/node\$1gpu\$1reserved\$1capacity.  | 
|  `pod_memory_reserved_capacity`  |  `PodName`, `Namespace`, `ClusterName` `ClusterName`  |  El porcentaje de memoria reservada para los pods. Fórmula: `pod_memory_request / node_memory_limit`  `pod_memory_request` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_memory_utilization`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El porcentaje de memoria que utiliza actualmente el pod o los pods. Fórmula: `pod_memory_working_set / node_memory_limit`  | 
|  `pod_memory_utilization_over_pod_limit`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El porcentaje de memoria utilizada por los pods en relación con el límite de pods. Si algún contenedor del pod no tiene definido un límite de memoria, esta métrica no aparecerá. Fórmula: `pod_memory_working_set / pod_memory_limit`  | 
|  `pod_network_rx_bytes`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El número de bytes por segundo que se están recibiendo a través de la red por el pod. Fórmula: `sum(pod_interface_network_rx_bytes)`  `pod_interface_network_rx_bytes` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_network_tx_bytes`  |  `PodName`, `Namespace`, `ClusterName` `Namespace`, `ClusterName` `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El número de bytes por segundo que se están transmitiendo a través de la red por el pod. Fórmula: `sum(pod_interface_network_tx_bytes)`  `pod_interface_network_tx_bytes` no se informa directamente como una métrica, sino que es un campo en el registro de eventos del rendimiento. Para obtener más información, consulte [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md).    | 
|  `pod_number_of_container_restarts`  |  `PodName`, `Namespace`, `ClusterName`  |  El número total de reinicios del contenedor en un pod.  | 
|  `service_number_of_running_pods`  |  `Service`, `Namespace`, `ClusterName` `ClusterName`  |  El número de pods que ejecutan el servicio o servicios en el clúster.  | 

## Métricas de Kueue
<a name="Container-Insights-metrics-Kueue"></a>

A partir de la versión `v2.4.0-eksbuild.1` del complemento de observabilidad de EKS de CloudWatch, Información de contenedores para Amazon EKS admite la recopilación de métricas de Kueue de clústeres de Amazon EKS. Para obtener más información acerca del complemento, consulte [Instalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm](install-CloudWatch-Observability-EKS-addon.md).

Para obtener más información sobre la habilitación de las métricas, consulte [Habilitación de las métricas de Kueue](install-CloudWatch-Observability-EKS-addon.md#enable-Kueue-metrics) para habilitarlas.

Las métricas de Kueue que se recopilan se enumeran en la siguiente tabla. Estas métricas se publican en el espacio de nombres `ContainerInsights/Prometheus` de CloudWatch. Algunas de estas métricas utilizan las siguientes dimensiones:
+ `ClusterQueue` es el nombre de ClusterQueue
+ Los valores posibles de `Status` son `active` y `inadmissible`.
+ Los valores posibles de `Reason` son `Preempted`, `PodsReadyTimeout`, `AdmissionCheck`, `ClusterQueueStopped` y `InactiveWorkload`.
+ `Flavor` es la variedad a la que se hace referencia.
+ `Resource` hace referencia a los recursos de computación en clústeres, como `cpu`, `memory`, `gpu`, etc. 


| Nombre de métrica | Dimensiones | Descripción | 
| --- | --- | --- | 
|  `kueue_pending_workloads` |  `ClusterName`, `ClusterQueue`, `Status` `ClusterName`, `ClusterQueue` `ClusterName`, `Status` `ClusterName`  |  El número de cargas de trabajo pendientes.  | 
|  `kueue_evicted_workloads_total` |  `ClusterName`, `ClusterQueue`, `Reason` `ClusterName`, `ClusterQueue` `ClusterName`, `Reason` `ClusterName`  |  El número total de cargas de trabajo expulsadas.  | 
|  `kueue_admitted_active_workloads` |  `ClusterName`, `ClusterQueue` `ClusterName`  |  El número de cargas de trabajo admitidas que están activas (no suspendidas y no terminadas).  | 
|  `kueue_cluster_queue_resource_usage` |  `ClusterName`, `ClusterQueue`, `Resource`, `Flavor` `ClusterName`, `ClusterQueue`, `Resource` `ClusterName`, `ClusterQueue`, `Flavor` `ClusterName`, `ClusterQueue` `ClusterName`  |  Indica el uso total de recursos de ClusterQueue.  | 
|  `kueue_cluster_queue_nominal_quota` |  `ClusterName`, `ClusterQueue`, `Resource`, `Flavor` `ClusterName`, `ClusterQueue`, `Resource` `ClusterName`, `ClusterQueue`, `Flavor` `ClusterName`, `ClusterQueue` `ClusterName`  |  Indica la cuota de recursos de ClusterQueue.  | 

# Referencia de registros de rendimiento de Información de contenedores
<a name="Container-Insights-reference"></a>

Esta sección incluye información de referencia sobre cómo Información de contenedores utiliza los eventos de registro de rendimiento para recopilar métricas. Al implementar Información de contenedores, este crea automáticamente un grupo de registro para los eventos del registro de rendimiento. No es necesario que usted mismo cree este grupo de registro.

**Topics**
+ [Eventos de registro de rendimiento de Información de contenedores para Amazon ECS](Container-Insights-reference-performance-logs-ECS.md)
+ [Eventos de registro de rendimiento de Información de contenedores para Amazon EKS y Kubernetes](Container-Insights-reference-performance-logs-EKS.md)
+ [Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes](Container-Insights-reference-performance-entries-EKS.md)

# Eventos de registro de rendimiento de Información de contenedores para Amazon ECS
<a name="Container-Insights-reference-performance-logs-ECS"></a>

A continuación, se muestran ejemplos de los eventos de registro de rendimiento que Información de contenedores recopila de Amazon ECS.

Estos registros se encuentran en registros de CloudWatch, en un grupo de registro denominado `/aws/ecs/containerinsights/CLUSTER_NAME/performance`. Dentro de ese grupo de registro, cada instancia de contenedor tendrá un flujo de registro denominado `AgentTelemetry-CONTAINER_INSTANCE_ID`.

Puede consultar estos registros mediante consultas como, por ejemplo, `{ $.Type = "Container" }` para ver todos los eventos del registro del contenedor. 

**Tipo: Contenedor**

```
{
	"Version":"0",
	"Type":"Container",
	"ContainerName":"sleep",
	"TaskId":"7ac4dfba69214411b4783a3b8189c9ba",
	"TaskDefinitionFamily":"sleep360",
	"TaskDefinitionRevision":"1",
	"ContainerInstanceId":"0d7650e6dec34c1a9200f72098071e8f",
	"EC2InstanceId":"i-0c470579dbcdbd2f3",
	"ClusterName":"MyCluster",
	"Image":"busybox",
	"ContainerKnownStatus":"RUNNING",
	"Timestamp":1623963900000,
	"CpuUtilized":0.0,
	"CpuReserved":10.0,
	"MemoryUtilized":0,
	"MemoryReserved":10,
	"StorageReadBytes":0,
	"StorageWriteBytes":0,
	"NetworkRxBytes":0,
	"NetworkRxDropped":0,
	"NetworkRxErrors":0,
	"NetworkRxPackets":14,
	"NetworkTxBytes":0,
	"NetworkTxDropped":0,
	"NetworkTxErrors":0,
	"NetworkTxPackets":0
}
```

**Tipo: Tarea**

Aunque las unidades para `StorageReadBytes` y `StorageWriteBytes` están en bytes/segundo, los valores representan el número acumulado de bytes leídos y escritos en el almacenamiento, respectivamente. 

```
{
    "Version": "0",
    "Type": "Task",
    "TaskId": "7ac4dfba69214411b4783a3b8189c9ba",
    "TaskDefinitionFamily": "sleep360",
    "TaskDefinitionRevision": "1",
    "ContainerInstanceId": "0d7650e6dec34c1a9200f72098071e8f",
    "EC2InstanceId": "i-0c470579dbcdbd2f3",
    "ClusterName": "MyCluster",
    "AccountID": "637146863587",
    "Region": "us-west-2",
    "AvailabilityZone": "us-west-2b",
    "KnownStatus": "RUNNING",
    "LaunchType": "EC2",
    "PullStartedAt": 1623963608201,
    "PullStoppedAt": 1623963610065,
    "CreatedAt": 1623963607094,
    "StartedAt": 1623963610382,
    "Timestamp": 1623963900000,
    "CpuUtilized": 0.0,
    "CpuReserved": 10.0,
    "MemoryUtilized": 0,
    "MemoryReserved": 10,
    "StorageReadBytes": 0,
    "StorageWriteBytes": 0,
    "NetworkRxBytes": 0,
    "NetworkRxDropped": 0,
    "NetworkRxErrors": 0,
    "NetworkRxPackets": 14,
    "NetworkTxBytes": 0,
    "NetworkTxDropped": 0,
    "NetworkTxErrors": 0,
    "NetworkTxPackets": 0,
    "EBSFilesystemUtilized": 10,
    "EBSFilesystemSize": 20,
    "CloudWatchMetrics": [
        {
            "Namespace": "ECS/ContainerInsights",
            "Metrics": [
                {
                    "Name": "CpuUtilized",
                    "Unit": "None"
                },
                {
                    "Name": "CpuReserved",
                    "Unit": "None"
                },
                {
                    "Name": "MemoryUtilized",
                    "Unit": "Megabytes"
                },
                {
                    "Name": "MemoryReserved",
                    "Unit": "Megabytes"
                },
                {
                    "Name": "StorageReadBytes",
                    "Unit": "Bytes/Second"
                },
                {
                    "Name": "StorageWriteBytes",
                    "Unit": "Bytes/Second"
                },
                {
                    "Name": "NetworkRxBytes",
                    "Unit": "Bytes/Second"
                },
                {
                    "Name": "NetworkTxBytes",
                    "Unit": "Bytes/Second"
                },
                {
                    "Name": "EBSFilesystemSize",
                    "Unit": "Gigabytes"
                },
                {
                    "Name": "EBSFilesystemUtilzed",
                    "Unit": "Gigabytes"
                }
            ],
            "Dimensions": [
                ["ClusterName"],
                [
                    "ClusterName",
                    "TaskDefinitionFamily"
                ]
            ]
        }
    ]
}
```

**Tipo: Servicio**

```
{   
    "Version": "0",
    "Type": "Service",
    "ServiceName": "myCIService",
    "ClusterName": "myCICluster",
    "Timestamp": 1561586460000,
    "DesiredTaskCount": 2,
    "RunningTaskCount": 2,
    "PendingTaskCount": 0,
    "DeploymentCount": 1,
    "TaskSetCount": 0,
    "CloudWatchMetrics": [
        {
            "Namespace": "ECS/ContainerInsights",
            "Metrics": [
                {
                    "Name": "DesiredTaskCount",
                    "Unit": "Count"
                },
                {
                    "Name": "RunningTaskCount",
                    "Unit": "Count"
                },
                {
                    "Name": "PendingTaskCount",
                    "Unit": "Count"
                },
                {
                    "Name": "DeploymentCount",
                    "Unit": "Count"
                },
                {
                    "Name": "TaskSetCount",
                    "Unit": "Count"
                }
            ],
            "Dimensions": [
                [
                    "ServiceName",
                    "ClusterName"
                ]
            ]
        }
    ]
}
```

**Tipo: volumen**

```
{
    "Version": "0",
    "Type": "Volume",
    "TaskDefinitionFamily": "myCITaskDef",
    "TaskId": "7ac4dfba69214411b4783a3b8189c9ba",
    "ClusterName": "myCICluster",
    "ServiceName": "myCIService",
    "VolumeId": "vol-1233436545ff708cb",
    "InstanceId": "i-0c470579dbcdbd2f3",
    "LaunchType": "EC2",
    "VolumeName": "MyVolumeName",
    "EBSFilesystemUtilized": 10,
    "EBSFilesystemSize": 20,
    "CloudWatchMetrics": [
        {
            "Namespace": "ECS/ContainerInsights",
            "Metrics": [
                {
                    "Name": "EBSFilesystemSize",
                    "Unit": "Gigabytes"
                },
                {
                    "Name": "EBSFilesystemUtilzed",
                    "Unit": "Gigabytes"
                }
            ],
            "Dimensions": [
                ["ClusterName"],
                [
                    "VolumeName",
                    "TaskDefinitionFamily",
                    "ClusterName"
                ],
                [
                    "ServiceName",
                    "ClusterName"
                ]
            ]
        }
    ]
}
```

**Tipo: Clúster**

```
{
    "Version": "0",
    "Type": "Cluster",
    "ClusterName": "myCICluster",
    "Timestamp": 1561587300000,
    "TaskCount": 5,
    "ContainerInstanceCount": 5,
    "ServiceCount": 2,
    "CloudWatchMetrics": [
        {
            "Namespace": "ECS/ContainerInsights",
            "Metrics": [
                {
                    "Name": "TaskCount",
                    "Unit": "Count"
                },
                {
                    "Name": "ContainerInstanceCount",
                    "Unit": "Count"
                },
                {
                    "Name": "ServiceCount",
                    "Unit": "Count"
                }
            ],
            "Dimensions": [
                [
                    "ClusterName"
                ]
            ]
        }
    ]
}
```

# Eventos de registro de rendimiento de Información de contenedores para Amazon EKS y Kubernetes
<a name="Container-Insights-reference-performance-logs-EKS"></a>

A continuación, se muestran ejemplos de los eventos de registro de rendimiento que Información de contenedores recopila de clústeres de Amazon EKS y de Kubernetes.

**Tipo: Node**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "CloudWatchMetrics": [
    {
      "Metrics": [
        {
          "Unit": "Percent",
          "Name": "node_cpu_utilization"
        },
        {
          "Unit": "Percent",
          "Name": "node_memory_utilization"
        },
        {
          "Unit": "Bytes/Second",
          "Name": "node_network_total_bytes"
        },
        {
          "Unit": "Percent",
          "Name": "node_cpu_reserved_capacity"
        },
        {
          "Unit": "Percent",
          "Name": "node_memory_reserved_capacity"
        },
        {
          "Unit": "Count",
          "Name": "node_number_of_running_pods"
        },
        {
          "Unit": "Count",
          "Name": "node_number_of_running_containers"
        }
      ],
      "Dimensions": [
        [
          "NodeName",
          "InstanceId",
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    },
    {
      "Metrics": [
        {
          "Unit": "Percent",
          "Name": "node_cpu_utilization"
        },
        {
          "Unit": "Percent",
          "Name": "node_memory_utilization"
        },
        {
          "Unit": "Bytes/Second",
          "Name": "node_network_total_bytes"
        },
        {
          "Unit": "Percent",
          "Name": "node_cpu_reserved_capacity"
        },
        {
          "Unit": "Percent",
          "Name": "node_memory_reserved_capacity"
        },
        {
          "Unit": "Count",
          "Name": "node_number_of_running_pods"
        },
        {
          "Unit": "Count",
          "Name": "node_number_of_running_containers"
        },
        {
          "Name": "node_cpu_usage_total"
        },
        {
          "Name": "node_cpu_limit"
        },
        {
          "Unit": "Bytes",
          "Name": "node_memory_working_set"
        },
        {
          "Unit": "Bytes",
          "Name": "node_memory_limit"
        }
      ],
      "Dimensions": [
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    }
  ],
  "ClusterName": "myCICluster",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "Sources": [
    "cadvisor",
    "/proc",
    "pod",
    "calculated"
  ],
  "Timestamp": "1567096682364",
  "Type": "Node",
  "Version": "0",
  "kubernetes": {
    "host": "ip-192-168-75-26.us-west-2.compute.internal"
  },
  "node_cpu_limit": 4000,
  "node_cpu_request": 1130,
  "node_cpu_reserved_capacity": 28.249999999999996,
  "node_cpu_usage_system": 33.794636630852764,
  "node_cpu_usage_total": 136.47852169244098,
  "node_cpu_usage_user": 71.67075111567326,
  "node_cpu_utilization": 3.4119630423110245,
  "node_memory_cache": 3103297536,
  "node_memory_failcnt": 0,
  "node_memory_hierarchical_pgfault": 0,
  "node_memory_hierarchical_pgmajfault": 0,
  "node_memory_limit": 16624865280,
  "node_memory_mapped_file": 406646784,
  "node_memory_max_usage": 4230746112,
  "node_memory_pgfault": 0,
  "node_memory_pgmajfault": 0,
  "node_memory_request": 1115684864,
  "node_memory_reserved_capacity": 6.7109407818311055,
  "node_memory_rss": 798146560,
  "node_memory_swap": 0,
  "node_memory_usage": 3901444096,
  "node_memory_utilization": 6.601302600149552,
  "node_memory_working_set": 1097457664,
  "node_network_rx_bytes": 35918.392817386324,
  "node_network_rx_dropped": 0,
  "node_network_rx_errors": 0,
  "node_network_rx_packets": 157.67565245448117,
  "node_network_total_bytes": 68264.20276554905,
  "node_network_tx_bytes": 32345.80994816272,
  "node_network_tx_dropped": 0,
  "node_network_tx_errors": 0,
  "node_network_tx_packets": 154.21455923431654,
  "node_number_of_running_containers": 16,
  "node_number_of_running_pods": 13
}
```

**Tipo: NodeFS**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "CloudWatchMetrics": [
    {
      "Metrics": [
        {
          "Unit": "Percent",
          "Name": "node_filesystem_utilization"
        }
      ],
      "Dimensions": [
        [
          "NodeName",
          "InstanceId",
          "ClusterName"
        ],
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    }
  ],
  "ClusterName": "myCICluster",
  "EBSVolumeId": "aws://us-west-2b/vol-0a53108976d4a2fda",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "Sources": [
    "cadvisor",
    "calculated"
  ],
  "Timestamp": "1567097939726",
  "Type": "NodeFS",
  "Version": "0",
  "device": "/dev/nvme0n1p1",
  "fstype": "vfs",
  "kubernetes": {
    "host": "ip-192-168-75-26.us-west-2.compute.internal"
  },
  "node_filesystem_available": 17298395136,
  "node_filesystem_capacity": 21462233088,
  "node_filesystem_inodes": 10484720,
  "node_filesystem_inodes_free": 10367158,
  "node_filesystem_usage": 4163837952,
  "node_filesystem_utilization": 19.400767547940255
}
```

**Tipo: NodeDiskIO**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "ClusterName": "myCICluster",
  "EBSVolumeId": "aws://us-west-2b/vol-0a53108976d4a2fda",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "Sources": [
    "cadvisor"
  ],
  "Timestamp": "1567096928131",
  "Type": "NodeDiskIO",
  "Version": "0",
  "device": "/dev/nvme0n1",
  "kubernetes": {
    "host": "ip-192-168-75-26.us-west-2.compute.internal"
  },
  "node_diskio_io_service_bytes_async": 9750.505814277016,
  "node_diskio_io_service_bytes_read": 0,
  "node_diskio_io_service_bytes_sync": 230.6174506688036,
  "node_diskio_io_service_bytes_total": 9981.123264945818,
  "node_diskio_io_service_bytes_write": 9981.123264945818,
  "node_diskio_io_serviced_async": 1.153087253344018,
  "node_diskio_io_serviced_read": 0,
  "node_diskio_io_serviced_sync": 0.03603397666700056,
  "node_diskio_io_serviced_total": 1.1891212300110185,
  "node_diskio_io_serviced_write": 1.1891212300110185
}
```

**Tipo: NodeNet**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "ClusterName": "myCICluster",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "Sources": [
    "cadvisor",
    "calculated"
  ],
  "Timestamp": "1567096928131",
  "Type": "NodeNet",
  "Version": "0",
  "interface": "eni972f6bfa9a0",
  "kubernetes": {
    "host": "ip-192-168-75-26.us-west-2.compute.internal"
  },
  "node_interface_network_rx_bytes": 3163.008420864309,
  "node_interface_network_rx_dropped": 0,
  "node_interface_network_rx_errors": 0,
  "node_interface_network_rx_packets": 16.575629266820258,
  "node_interface_network_total_bytes": 3518.3935157426017,
  "node_interface_network_tx_bytes": 355.385094878293,
  "node_interface_network_tx_dropped": 0,
  "node_interface_network_tx_errors": 0,
  "node_interface_network_tx_packets": 3.9997714100370625
}
```

**Tipo: Pod**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "CloudWatchMetrics": [
    {
      "Metrics": [
        {
          "Unit": "Percent",
          "Name": "pod_cpu_utilization"
        },
        {
          "Unit": "Percent",
          "Name": "pod_memory_utilization"
        },
        {
          "Unit": "Bytes/Second",
          "Name": "pod_network_rx_bytes"
        },
        {
          "Unit": "Bytes/Second",
          "Name": "pod_network_tx_bytes"
        },
        {
          "Unit": "Percent",
          "Name": "pod_cpu_utilization_over_pod_limit"
        },
        {
          "Unit": "Percent",
          "Name": "pod_memory_utilization_over_pod_limit"
        }
      ],
      "Dimensions": [
        [
          "PodName",
          "Namespace",
          "ClusterName"
        ],
        [
          "Service",
          "Namespace",
          "ClusterName"
        ],
        [
          "Namespace",
          "ClusterName"
        ],
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    },
    {
      "Metrics": [
        {
          "Unit": "Percent",
          "Name": "pod_cpu_reserved_capacity"
        },
        {
          "Unit": "Percent",
          "Name": "pod_memory_reserved_capacity"
        }
      ],
      "Dimensions": [
        [
          "PodName",
          "Namespace",
          "ClusterName"
        ],
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    },
    {
      "Metrics": [
        {
          "Unit": "Count",
          "Name": "pod_number_of_container_restarts"
        }
      ],
      "Dimensions": [
        [
          "PodName",
          "Namespace",
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    }
  ],
  "ClusterName": "myCICluster",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "Namespace": "amazon-cloudwatch",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "PodName": "cloudwatch-agent-statsd",
  "Service": "cloudwatch-agent-statsd",
  "Sources": [
    "cadvisor",
    "pod",
    "calculated"
  ],
  "Timestamp": "1567097351092",
  "Type": "Pod",
  "Version": "0",
  "kubernetes": {
    "host": "ip-192-168-75-26.us-west-2.compute.internal",
    "labels": {
      "app": "cloudwatch-agent-statsd",
      "pod-template-hash": "df44f855f"
    },
    "namespace_name": "amazon-cloudwatch",
    "pod_id": "2f4ff5ac-c813-11e9-a31d-06e9dde32928",
    "pod_name": "cloudwatch-agent-statsd-df44f855f-ts4q2",
    "pod_owners": [
      {
        "owner_kind": "Deployment",
        "owner_name": "cloudwatch-agent-statsd"
      }
    ],
    "service_name": "cloudwatch-agent-statsd"
  },
  "pod_cpu_limit": 200,
  "pod_cpu_request": 200,
  "pod_cpu_reserved_capacity": 5,
  "pod_cpu_usage_system": 1.4504841104992765,
  "pod_cpu_usage_total": 5.817016867430125,
  "pod_cpu_usage_user": 1.1281543081661038,
  "pod_cpu_utilization": 0.14542542168575312,
  "pod_cpu_utilization_over_pod_limit": 2.9085084337150624,
  "pod_memory_cache": 8192,
  "pod_memory_failcnt": 0,
  "pod_memory_hierarchical_pgfault": 0,
  "pod_memory_hierarchical_pgmajfault": 0,
  "pod_memory_limit": 104857600,
  "pod_memory_mapped_file": 0,
  "pod_memory_max_usage": 25268224,
  "pod_memory_pgfault": 0,
  "pod_memory_pgmajfault": 0,
  "pod_memory_request": 104857600,
  "pod_memory_reserved_capacity": 0.6307275170893897,
  "pod_memory_rss": 22777856,
  "pod_memory_swap": 0,
  "pod_memory_usage": 25141248,
  "pod_memory_utilization": 0.10988455961791709,
  "pod_memory_utilization_over_pod_limit": 17.421875,
  "pod_memory_working_set": 18268160,
  "pod_network_rx_bytes": 9880.697124714186,
  "pod_network_rx_dropped": 0,
  "pod_network_rx_errors": 0,
  "pod_network_rx_packets": 107.80005532263283,
  "pod_network_total_bytes": 10158.829201483635,
  "pod_network_tx_bytes": 278.13207676944796,
  "pod_network_tx_dropped": 0,
  "pod_network_tx_errors": 0,
  "pod_network_tx_packets": 1.146027574644318,
  "pod_number_of_container_restarts": 0,
  "pod_number_of_containers": 1,
  "pod_number_of_running_containers": 1,
  "pod_status": "Running"
}
```

**Tipo: PodNet**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "ClusterName": "myCICluster",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "Namespace": "amazon-cloudwatch",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "PodName": "cloudwatch-agent-statsd",
  "Service": "cloudwatch-agent-statsd",
  "Sources": [
    "cadvisor",
    "calculated"
  ],
  "Timestamp": "1567097351092",
  "Type": "PodNet",
  "Version": "0",
  "interface": "eth0",
  "kubernetes": {
    "host": "ip-192-168-75-26.us-west-2.compute.internal",
    "labels": {
      "app": "cloudwatch-agent-statsd",
      "pod-template-hash": "df44f855f"
    },
    "namespace_name": "amazon-cloudwatch",
    "pod_id": "2f4ff5ac-c813-11e9-a31d-06e9dde32928",
    "pod_name": "cloudwatch-agent-statsd-df44f855f-ts4q2",
    "pod_owners": [
      {
        "owner_kind": "Deployment",
        "owner_name": "cloudwatch-agent-statsd"
      }
    ],
    "service_name": "cloudwatch-agent-statsd"
  },
  "pod_interface_network_rx_bytes": 9880.697124714186,
  "pod_interface_network_rx_dropped": 0,
  "pod_interface_network_rx_errors": 0,
  "pod_interface_network_rx_packets": 107.80005532263283,
  "pod_interface_network_total_bytes": 10158.829201483635,
  "pod_interface_network_tx_bytes": 278.13207676944796,
  "pod_interface_network_tx_dropped": 0,
  "pod_interface_network_tx_errors": 0,
  "pod_interface_network_tx_packets": 1.146027574644318
}
```

**Tipo: Contenedor**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-sample",
  "ClusterName": "myCICluster",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "Namespace": "amazon-cloudwatch",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "PodName": "cloudwatch-agent-statsd",
  "Service": "cloudwatch-agent-statsd",
  "Sources": [
    "cadvisor",
    "pod",
    "calculated"
  ],
  "Timestamp": "1567097399912",
  "Type": "Container",
  "Version": "0",
  "container_cpu_limit": 200,
  "container_cpu_request": 200,
  "container_cpu_usage_system": 1.87958283771964,
  "container_cpu_usage_total": 6.159993652997942,
  "container_cpu_usage_user": 1.6707403001952357,
  "container_cpu_utilization": 0.15399984132494854,
  "container_memory_cache": 8192,
  "container_memory_failcnt": 0,
  "container_memory_hierarchical_pgfault": 0,
  "container_memory_hierarchical_pgmajfault": 0,
  "container_memory_limit": 104857600,
  "container_memory_mapped_file": 0,
  "container_memory_max_usage": 24580096,
  "container_memory_pgfault": 0,
  "container_memory_pgmajfault": 0,
  "container_memory_request": 104857600,
  "container_memory_rss": 22736896,
  "container_memory_swap": 0,
  "container_memory_usage": 24453120,
  "container_memory_utilization": 0.10574541028701798,
  "container_memory_working_set": 17580032,
  "container_status": "Running",
  "kubernetes": {
    "container_name": "cloudwatch-agent",
    "docker": {
      "container_id": "8967b6b37da239dfad197c9fdea3e5dfd35a8a759ec86e2e4c3f7b401e232706"
    },
    "host": "ip-192-168-75-26.us-west-2.compute.internal",
    "labels": {
      "app": "cloudwatch-agent-statsd",
      "pod-template-hash": "df44f855f"
    },
    "namespace_name": "amazon-cloudwatch",
    "pod_id": "2f4ff5ac-c813-11e9-a31d-06e9dde32928",
    "pod_name": "cloudwatch-agent-statsd-df44f855f-ts4q2",
    "pod_owners": [
      {
        "owner_kind": "Deployment",
        "owner_name": "cloudwatch-agent-statsd"
      }
    ],
    "service_name": "cloudwatch-agent-statsd"
  },
  "number_of_container_restarts": 0
}
```

**Tipo: ContainerFS**

```
{
  "AutoScalingGroupName": "eksctl-myCICluster-nodegroup-standard-workers-NodeGroup-1174PV2WHZAYU",
  "ClusterName": "myCICluster",
  "EBSVolumeId": "aws://us-west-2b/vol-0a53108976d4a2fda",
  "InstanceId": "i-1234567890123456",
  "InstanceType": "t3.xlarge",
  "Namespace": "amazon-cloudwatch",
  "NodeName": "ip-192-0-2-0.us-west-2.compute.internal",
  "PodName": "cloudwatch-agent-statsd",
  "Service": "cloudwatch-agent-statsd",
  "Sources": [
    "cadvisor",
    "calculated"
  ],
  "Timestamp": "1567097399912",
  "Type": "ContainerFS",
  "Version": "0",

  "device": "/dev/nvme0n1p1",
  "fstype": "vfs",
  "kubernetes": {
    "container_name": "cloudwatch-agent",
    "docker": {
      "container_id": "8967b6b37da239dfad197c9fdea3e5dfd35a8a759ec86e2e4c3f7b401e232706"
    },
    "host": "ip-192-168-75-26.us-west-2.compute.internal",
    "labels": {
      "app": "cloudwatch-agent-statsd",
      "pod-template-hash": "df44f855f"
    },
    "namespace_name": "amazon-cloudwatch",
    "pod_id": "2f4ff5ac-c813-11e9-a31d-06e9dde32928",
    "pod_name": "cloudwatch-agent-statsd-df44f855f-ts4q2",
    "pod_owners": [
      {
        "owner_kind": "Deployment",
        "owner_name": "cloudwatch-agent-statsd"
      }
    ],
    "service_name": "cloudwatch-agent-statsd"
  }
}
```

**Tipo: Clúster**

```
{
  "CloudWatchMetrics": [
    {
      "Metrics": [
        {
          "Unit": "Count",
          "Name": "cluster_node_count"
        },
        {
          "Unit": "Count",
          "Name": "cluster_failed_node_count"
        }
      ],
      "Dimensions": [
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    }
  ],
  "ClusterName": "myCICluster",
  "Sources": [
    "apiserver"
  ],
  "Timestamp": "1567097534160",
  "Type": "Cluster",
  "Version": "0",
  "cluster_failed_node_count": 0,
  "cluster_node_count": 3
}
```

**Tipo: ClusterService**

```
{
  "CloudWatchMetrics": [
    {
      "Metrics": [
        {
          "Unit": "Count",
          "Name": "service_number_of_running_pods"
        }
      ],
      "Dimensions": [
        [
          "Service",
          "Namespace",
          "ClusterName"
        ],
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    }
  ],
  "ClusterName": "myCICluster",
  "Namespace": "amazon-cloudwatch",
  "Service": "cloudwatch-agent-statsd",
  "Sources": [
    "apiserver"
  ],
  "Timestamp": "1567097534160",
  "Type": "ClusterService",
  "Version": "0",
  "kubernetes": {
    "namespace_name": "amazon-cloudwatch",
    "service_name": "cloudwatch-agent-statsd"
  },
  "service_number_of_running_pods": 1
}
```

**Tipo: ClusterNamespace**

```
{
  "CloudWatchMetrics": [
    {
      "Metrics": [
        {
          "Unit": "Count",
          "Name": "namespace_number_of_running_pods"
        }
      ],
      "Dimensions": [
        [
          "Namespace",
          "ClusterName"
        ],
        [
          "ClusterName"
        ]
      ],
      "Namespace": "ContainerInsights"
    }
  ],
  "ClusterName": "myCICluster",
  "Namespace": "amazon-cloudwatch",
  "Sources": [
    "apiserver"
  ],
  "Timestamp": "1567097594160",
  "Type": "ClusterNamespace",
  "Version": "0",
  "kubernetes": {
    "namespace_name": "amazon-cloudwatch"
  },
  "namespace_number_of_running_pods": 7
}
```

# Campos relevantes en eventos de registro de rendimiento para Amazon EKS y Kubernetes
<a name="Container-Insights-reference-performance-entries-EKS"></a>

En Amazon EKS y Kubernetes, el agente de CloudWatch en contenedores emite los datos como eventos de registro de rendimiento. Esto permite a CloudWatch capturar y almacenar datos de alta cardinalidad. CloudWatch utiliza los datos en los eventos de registro de rendimiento para crear métricas de CloudWatch agregadas en el nivel de clúster, de nodo y de pod sin necesidad de perder detalles pormenorizados.

En la siguiente tabla, se muestran los campos de estos eventos de registro de rendimiento que son relevantes para la recopilación de datos de las métricas de Información de contenedores. Puede utilizar Información de registros de CloudWatch para consultar cualquiera de estos campos con el fin de recopilar datos o investigar problemas. Para obtener más información, consulte [Analyze Log Data With CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html).


| Tipo | Campo de registro | Origen | Fórmula o notas | 
| --- | --- | --- | --- | 
|  Pod |  `pod_cpu_utilization`  |  Calculado  |  Fórmula: `pod_cpu_usage_total / node_cpu_limit`  | 
|  Pod |  `pod_cpu_usage_total` `pod_cpu_usage_total` se mide en milinúcleos.  |  cadvisor  |   | 
|  Pod |  `pod_cpu_limit`  |  Calculado  |  Fórmula: `sum(container_cpu_limit)`  `sum(container_cpu_limit)` incluye los pods ya completados. Si no se ha definido un límite de CPU para alguno de los contenedores del pod, este campo no aparece en el evento de registro. Esto incluye los [contenedores init](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#resources).  | 
|  Pod |  `pod_cpu_request`  |  Calculado  |  Fórmula: `sum(container_cpu_request)` `container_cpu_request`No se garantiza que se vaya a establecer. En la suma solo se incluyen las que se establezcan.  | 
|  Pod |  `pod_cpu_utilization_over_pod_limit`  |  Calculado  |  Fórmula: `pod_cpu_usage_total / pod_cpu_limit`  | 
|  Pod |  `pod_cpu_reserved_capacity`  |  Calculado  |  Fórmula: `pod_cpu_request / node_cpu_limit`  | 
|  Pod |  `pod_memory_utilization`  |  Calculado  |  Fórmula: `pod_memory_working_set / node_memory_limit` Es el porcentaje de uso de memoria de pod sobre la limitación de memoria de nodo.  | 
|  Pod |  `pod_memory_working_set`  |  cadvisor  |   | 
|  Pod |  `pod_memory_limit`  |  Calculado  |  Fórmula: `sum(container_memory_limit)` Si algún contenedor del pod no tiene definido un límite de memoria, este campo no aparece en el evento de registro. Esto incluye los [contenedores init](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#resources).  | 
|  Pod |  `pod_memory_request`  |  Calculado  |  Fórmula: `sum(container_memory_request)` `container_memory_request`No se garantiza que se vaya a establecer. En la suma solo se incluyen las que se establezcan.  | 
|  Pod |  `pod_memory_utilization_over_pod_limit`  |  Calculado  |  Fórmula: `pod_memory_working_set / pod_memory_limit` Si algún contenedor del pod no tiene definido un límite de memoria, este campo no aparece en el evento de registro. Esto incluye los [contenedores init](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#resources).  | 
|  Pod |  `pod_memory_reserved_capacity`  |  Calculado  |  Fórmula: `pod_memory_request / node_memory_limit`  | 
|  Pod |  `pod_network_tx_bytes`  |  Calculado  |  Fórmula: `sum(pod_interface_network_tx_bytes)` Estos datos están disponibles para todas las interfaces de red de cada pod. El agente de CloudWatch calcula el total y agrega las reglas de extracción de las métricas.  | 
|  Pod |  `pod_network_rx_bytes`  |  Calculado  |  Fórmula: `sum(pod_interface_network_rx_bytes)`  | 
|  Pod |  `pod_network_total_bytes`  |  Calculado  |  Fórmula: `pod_network_rx_bytes + pod_network_tx_bytes`  | 
|  PodNet |  `pod_interface_network_rx_bytes`  |  cadvisor  | Este dato son los bytes rx de red por segundo de la interfaz de red de un pod.  | 
|  PodNet |  `pod_interface_network_tx_bytes`  |  cadvisor  | Este dato son los bytes tx de red por segundo de la interfaz de red de un pod. | 
|  Contenedor |  `container_cpu_usage_total`  |  cadvisor  |   | 
|  Contenedor |  `container_cpu_limit`  |  cadvisor  |  No garantiza que se vaya a establecer. Si no se establece, no se emite. | 
|  Contenedor |  `container_cpu_request`  |  cadvisor  |  No garantiza que se vaya a establecer. Si no se establece, no se emite. | 
|  Contenedor |  `container_memory_working_set`  |  cadvisor  |   | 
|  Contenedor |  `container_memory_limit`  |  pod  |  No garantiza que se vaya a establecer. Si no se establece, no se emite. | 
|  Contenedor |  `container_memory_request`  |  pod  |  No garantiza que se vaya a establecer. Si no se establece, no se emite. | 
|  Nodo |  `node_cpu_utilization`  |  Calculado  |  Fórmula: `node_cpu_usage_total / node_cpu_limit`  | 
|  Nodo |  `node_cpu_usage_total`  |  cadvisor  |   | 
|  Nodo |  `node_cpu_limit`  |  /proc  |   | 
|  Nodo |  `node_cpu_request`  |  Calculado  | Fórmula: `sum(pod_cpu_request)` En el caso de los cronjobs, `node_cpu_request` también incluye las solicitudes de módulos completados. Esto puede generar un alto valor para `node_cpu_reserved_capacity`.  | 
|  Nodo |  `node_cpu_reserved_capacity`  |  Calculado  | Fórmula: `node_cpu_request / node_cpu_limit`  | 
|  Nodo |  `node_memory_utilization`  |  Calculado  | Fórmula: `node_memory_working_set / node_memory_limit`  | 
|  Nodo |  `node_memory_working_set`  |  cadvisor  |   | 
|  Nodo |  `node_memory_limit`  |  /proc  |   | 
|  Nodo |  `node_memory_request`  |  Calculado  |  Fórmula: `sum(pod_memory_request)`  | 
|  Nodo |  `node_memory_reserved_capacity`  |  Calculado  | Fórmula: `node_memory_request / node_memory_limit`  | 
|  Nodo |  `node_network_rx_bytes`  |  Calculado  | Fórmula: `sum(node_interface_network_rx_bytes)`  | 
|  Nodo |  `node_network_tx_bytes`  |  Calculado  | Fórmula: `sum(node_interface_network_tx_bytes)`  | 
|  Nodo |  `node_network_total_bytes`  |  Calculado  | Fórmula: `node_network_rx_bytes + node_network_tx_bytes`  | 
|  Nodo |  `node_number_of_running_pods`  |  Lista de pods  |   | 
|  Nodo |  `node_number_of_running_containers`  |  Lista de pods  |   | 
|  NodeNet |  `node_interface_network_rx_bytes`  |  cadvisor  |  Este dato son los bytes rx de red por segundo de la interfaz de red de un nodo de trabajo.  | 
|  NodeNet |  `node_interface_network_tx_bytes`  |  cadvisor  |  Este dato son los bytes tx de red por segundo de la interfaz de red de un nodo de trabajo.  | 
|  NodeFS |  `node_filesystem_capacity`  |  cadvisor  |   | 
|  NodeFS |  `node_filesystem_usage`  |  cadvisor  |   | 
|  NodeFS |  `node_filesystem_utilization`  |  Calculado  |  Fórmula: `node_filesystem_usage / node_filesystem_capacity` Estos datos están disponibles para cada nombre de dispositivo.  | 
|  Clúster |  `cluster_failed_node_count`  |  Servidor de API  |   | 
|  Clúster |  `cluster_node_count`  |  Servidor de API  |   | 
|  Servicio |  `service_number_of_running_pods`  |  Servidor de API  |   | 
|  `Namespace` |  `namespace_number_of_running_pods`  |  Servidor de API  |   | 

## Ejemplos de cálculo de métricas
<a name="Container-Insights-calculation-examples"></a>

En esta sección, se incluyen ejemplos que muestran cómo se calculan algunos de los valores de la tabla anterior.

Suponga que tiene un clúster en el estado siguiente.

```
Node1
   node_cpu_limit = 4
   node_cpu_usage_total = 3
   
   Pod1
     pod_cpu_usage_total = 2
     
     Container1
        container_cpu_limit = 1
        container_cpu_request = 1
        container_cpu_usage_total = 0.8
        
     Container2
        container_cpu_limit = null
        container_cpu_request = null
        container_cpu_usage_total = 1.2
        
   Pod2
     pod_cpu_usage_total = 0.4
     
     Container3
        container_cpu_limit = 1
        container_cpu_request = 0.5
        container_cpu_usage_total = 0.4
        
Node2
   node_cpu_limit = 8
   node_cpu_usage_total = 1.5
   
   Pod3
     pod_cpu_usage_total = 1
     
     Container4
        container_cpu_limit = 2
        container_cpu_request = 2
        container_cpu_usage_total = 1
```

En la tabla siguiente, se muestra cómo se calculan las métricas de CPU de los pods utilizando estos datos.


| Métrica | Formula | Pod1 | Pod2 | Pod3 | 
| --- | --- | --- | --- | --- | 
|  `pod_cpu_utilization` |  `pod_cpu_usage_total / node_cpu_limit`  |  2 / 4 = 50 %  |  0,4 / 4 = 10 %  |  1 / 8 = 12,5 %  | 
|  `pod_cpu_utilization_over_pod_limit` |  `pod_cpu_usage_total / sum(container_cpu_limit)`  |  N/A, porque no se ha definido el límite de CPU para `Container2`.  |  0,4 / 1 = 40 %  |  1 / 2 = 50 %  | 
|  `pod_cpu_reserved_capacity` |  `sum(container_cpu_request) / node_cpu_limit`  |  (1 \$1 0) / 4 = 25 %  |  0,5 / 4 = 12,5 %  |  2 / 8 = 25 %  | 

En la tabla siguiente, se muestra cómo se calculan las métricas de CPU de los nodos utilizando estos datos.


| Métrica | Formula | Node1 | Node2 | 
| --- | --- | --- | --- | 
|  `node_cpu_utilization` |  `node_cpu_usage_total / node_cpu_limit`  |  3 / 4 = 75 %  |  1,5 / 8 = 18,75 %  | 
|  `node_cpu_reserved_capacity` |  `sum(pod_cpu_request) / node_cpu_limit`  |  1,5 / 4 = 37,5 %  |  2 / 8 = 25 %  | 

# Supervisión de métricas de Información de contenedores de Prometheus
<a name="ContainerInsights-Prometheus"></a>

La supervisión de Información de contenedores de CloudWatch para Prometheus automatiza la detección de métricas de Prometheus de cargas de trabajo y de sistemas en contenedores. Prometheus es un conjunto de herramientas de alerta y supervisión de sistemas de código abierto. Para obtener más información, consulte [s Prometheus?](https://prometheus.io/docs/introduction/overview/) en la documentación de Prometheus.

La detección de métricas de Prometheus es compatible con los clústeres de [Amazon Elastic Container Service](https://aws.amazon.com/ecs/), [Amazon Elastic Kubernetes Service](https://aws.amazon.com/eks/) y [Kubernetes](https://aws.amazon.com/kubernetes/) que se ejecutan en instancias de Amazon EC2. Se recopilan los tipos de métricas de contador, de medición y de resumen de Prometheus.

Para los clústeres de Amazon ECS y de Amazon EKS, se admiten los tipos de lanzamiento de EC2 y Fargate. Información de contenedores recopila automáticamente métricas de varias cargas de trabajo, y puede configurarse para recopilar métricas de cualquier carga de trabajo.

Puede adoptar Prometheus como método de código abierto y estándar abierto para capturar métricas personalizadas en CloudWatch. El agente de CloudWatch compatible con Prometheus detecta y recopila métricas de Prometheus para supervisar, solucionar errores y crear alarmas con más rapidez cuando el rendimiento de las aplicaciones se ve degradado y existen errores. Esto reduce también el número de herramientas de supervisión necesarias para mejorar la capacidad de observación.

Información de contenedores de Prometheus permite utilizar un sistema de pago por uso con las métricas y registros, incluida su recopilación, almacenamiento y análisis. Para obtener más información, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

**Paneles estándar para algunas cargas de trabajo**

La solución Información de contenedores de Prometheus incluye paneles estándar para las cargas de trabajo populares que se enumeran en esta sección. Para obtener configuraciones de ejemplo para estas cargas de trabajo, consulte [(Opcional) Configure de cargas de trabajo en contenedores de Amazon ECS de muestra para realizar pruebas con las métricas de Prometheus](ContainerInsights-Prometheus-Sample-Workloads-ECS.md) y [(Opcional) Configure las cargas de trabajo de muestra de Amazon EKS en contenedores para realizar pruebas con las métricas de Prometheus](ContainerInsights-Prometheus-Sample-Workloads.md).

También puede configurar Información de contenedores para que recopile métricas de Prometheus de otras aplicaciones y servicios en contenedores mediante la edición del archivo de configuración del agente.

Las cargas de trabajo con paneles prediseñados para clústeres de Amazon EKS y de Kubernetes que se ejecutan en instancias de Amazon EC2:
+ AWS App Mesh
+ NGINX
+ Memcached
+ Java/JMX
+ HAProxy

Cargas de trabajo con paneles prediseñados para clústeres de Amazon ECS:
+ AWS App Mesh
+ Java/JMX
+ NGINX
+ NGINX Plus

# Instale y configure la recopilación de métricas de Prometheus en clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-ECS"></a>

Para recopilar métricas de Prometheus de clústeres de Amazon ECS, se puede utilizar el agente de CloudWatch como recopilador o utilizar el recopilador de AWS Distro para OpenTelemetry. Para obtener información sobre el uso del recopilador AWS Distro para OpenTelemetry, consulte [https://aws-otel.github.io/docs/getting-started/container-insights/ecs-prometheus](https://aws-otel.github.io/docs/getting-started/container-insights/ecs-prometheus).

En las siguientes secciones se explica cómo se utiliza el agente de CloudWatch como recopilador para recuperar métricas de Prometheus. Se instala el agente CloudWatch con supervisión de Prometheus en clústeres que ejecutan Amazon ECS y, opcionalmente, se puede configurar el agente para que raspe destinos adicionales. Estas secciones también proporcionan tutoriales opcionales para configurar cargas de trabajo de muestra con el fin de utilizarlas en pruebas con supervisión de Prometheus. 

Información de contenedores en Amazon ECS admite las siguientes combinaciones de tipo de lanzamiento y modo de redes para las métricas de Prometheus:


| Tipo de lanzamiento de Amazon ECS | Modos de redes compatibles | 
| --- | --- | 
|  EC2 (Linux)  |  puente, host y awsvpc  | 
|  Fargate  |  awsvpc  | 

**Requisitos del grupo de seguridad de la VPC**

Las reglas de entrada de los grupos de seguridad para las cargas de trabajo de Prometheus deben abrir los puertos de Prometheus al agente de CloudWatch para raspar las métricas de Prometheus por la IP privada.

Las reglas de salida del grupo de seguridad para el agente de CloudWatch deben permitir que el agente de CloudWatch se conecte al puerto de cargas de trabajo de Prometheus mediante la IP privada. 

**Topics**
+ [Instale el agente CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon ECS](ContainerInsights-Prometheus-install-ECS.md)
+ [Paspado de fuentes adicionales de Prometheus e importación de esas métricas](ContainerInsights-Prometheus-Setup-configure-ECS.md)
+ [(Opcional) Configure de cargas de trabajo en contenedores de Amazon ECS de muestra para realizar pruebas con las métricas de Prometheus](ContainerInsights-Prometheus-Sample-Workloads-ECS.md)

# Instale el agente CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-install-ECS"></a>

En esta sección se explica cómo se configura el agente de CloudWatch con la supervisión de Prometheus en un clúster que ejecute Amazon ECS. Después de hacerlo, el agente raspa e importa automáticamente métricas para las siguientes cargas de trabajo que se ejecutan en ese clúster.
+ AWS App Mesh
+ Java/JMX

También puede configurar el agente para que recopile e importe métricas de fuentes y cargas de trabajo adicionales de Prometheus.

## Configuración de los roles de IAM
<a name="ContainerInsights-Prometheus-Setup-ECS-IAM"></a>

Se necesitan dos roles de IAM para la definición de la tarea del agente de CloudWatch. Si especifica **CreateIAMRoles=True** en la pila de CloudFormation para que Información de contenedores cree estos roles por usted, los roles se crearán con los permisos correctos. Si desea crearlos o usar roles existentes, se requieren los siguientes roles y permisos.
+ **Rol de tarea de ECS del agente de CloudWatch**: el contenedor del agente de CloudWatch utiliza este rol. Debe incluirse la política **CloudWatchAgentServerPolicy** y una política administrada por el cliente que contiene los siguientes permisos que son solo de lectura:
  + `ec2:DescribeInstances`
  + `ecs:ListTasks`
  + `ecs:ListServices`
  + `ecs:DescribeContainerInstances`
  + `ecs:DescribeServices`
  + `ecs:DescribeTasks`
  + `ecs:DescribeTaskDefinition`
+ **Rol de ejecución de tareas de ECS del agente de CloudWatch**: es el rol que Amazon ECS requiere para lanzar y ejecutar los contenedores. Asegúrese de que el rol de ejecución de la tarea tenga adjuntas las políticas **AmazonSSMReadOnlyAccess**, **AmazonECSTaskExecutionRolePolicy**, y .**CloudWatchAgentServerPolicy**. Si desea almacenar más información confidencial para que Amazon ECS la use, consulte [Specifying sensitive data](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) (Especificación de información confidencial).

## Instalación del agente de CloudWatch con la supervisión de Prometheus mediante CloudFormation
<a name="ContainerInsights-Prometheus-Setup-ECS-CFN"></a>

Se utiliza AWS CloudFormation para instalar el agente CloudWatch con supervisión de Prometheus para clústeres de Amazon ECS. En la siguiente lista, se enumeran los parámetros que utilizará en la plantilla de CloudFormation.
+ **ECSClusterName**: especifica el clúster de Amazon ECS de destino.
+ **CreateIAMRoles**: especifique **True** para crear roles nuevos para el rol de tareas de Amazon ECS y el rol de ejecución de tareas de Amazon ECS. Especifique **False** para reutilizar los roles existentes.
+ **TaskRoleName**: si ha especificado **True** en **CreateIAMRoles**, esto especifica el nombre que debe usarse para el nuevo rol de tareas de Amazon ECS. Si ha especificado **False** en **CreateIAMRoles**, esto especifica el rol existente que se va a utilizar como función de tarea de Amazon ECS. 
+ **ExecutionRoleName**: si ha especificado **True** en **CreateIAMRoles**, esto especifica el nombre que debe usarse para el nuevo rol de ejecución de tareas de Amazon ECS. Si ha especificado **False** en **CreateIAMRoles**, esto especifica el rol existente que se va a utilizar como función de ejecución de tareas de Amazon ECS. 
+ **ECSNetworkMode**: si utiliza el tipo de lanzamiento EC2, especifique aquí el modo de redes. Debe ser **bridge** o **host**.
+ **ECSLaunchType**: especifique **fargate** o **EC2**.
+ **SecurityGroupID**: si el **ECSNetworkMode** es **awsvpc**, especifique aquí el ID del grupo de seguridad.
+ **SubnetID**: si el **ECSNetworkMode** es **awsvpc**, especifique aquí el ID de la subred.

### Ejemplos de comandos
<a name="ContainerInsights-Prometheus-Setup-ECS-CFNcommands"></a>

En esta sección se incluyen ejemplos de comandos de CloudFormation para instalar Información de contenedores con supervisión de Prometheus en varias situaciones.

**Cree una pila de CloudFormation para un clúster de Amazon ECS en modo de red bridge**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_NETWORK_MODE=bridge
export CREATE_IAM_ROLES=True
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name

curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
    --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

**Cree una pila de CloudFormation para un clúster de Amazon ECS en modo de red host**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_NETWORK_MODE=host
export CREATE_IAM_ROLES=True
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name


curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
    --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ 
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

**Cree una pila de CloudFormation para un clúster de Amazon ECS en modo de red awsvpc**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_LAUNCH_TYPE=EC2
export CREATE_IAM_ROLES=True
export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx
export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name

curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \
    --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \
                 ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \
                 ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

**Creación de una pila de CloudFormation para un clúster de Fargate en modo de red awsvpc**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_LAUNCH_TYPE=FARGATE
export CREATE_IAM_ROLES=True
export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx
export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name            

curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \
    --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \
                 ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \
                 ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

### Recursos de AWS que crea la pila de CloudFormation
<a name="ContainerInsights-Prometheus-Setup-ECS-resources"></a>

En la siguiente tabla se enumeran los recursos de AWS que se crean cuando se utiliza CloudFormation para configurar Información de contenedores con supervisión de Prometheus en un clúster de Amazon ECS.


| Tipo de recurso | Nombre del recurso | Comentarios | 
| --- | --- | --- | 
|  AWS::SSM::Parameter  |  AmazonCloudWatch-CWAgentConfig-\$1*ECS\$1CLUSTER\$1NAME*-\$1*ECS\$1LAUNCH\$1TYPE*-\$1*ECS\$1NETWORK\$1MODE*  |  Este es el agente de CloudWatch con la definición predeterminada de formato de métrica integrada de App Mesh y Java/JMX.  | 
|  AWS::SSM::Parameter  |  AmazonCloudWatch-PrometheusConfigName-\$1*ECS\$1CLUSTER\$1NAME*-\$1*ECS\$1LAUNCH\$1TYPE*-\$1*ECS\$1NETWORK\$1MODE*  |  Esta es la configuración de raspado de Prometheus.  | 
|  AWS::IAM::Role  |  **\$1ECS\$1TASK\$1ROLE\$1NAME**.   |  Rol de tarea de Amazon ECS. Esto se crea solo si ha especificado **True** para `CREATE_IAM_ROLES`.  | 
|  AWS::IAM::Role  |  **\$1\$1ECS\$1EXECUTION\$1ROLE\$1NAME\$1**   |  Rol de ejecución de tareas de Amazon ECS. Esto se crea solo si ha especificado **True** para `CREATE_IAM_ROLES`.  | 
|  AWS::ECS::TaskDefinition  |  cwagent-prometheus-\$1*ECS\$1CLUSTER\$1NAME*-\$1*ECS\$1LAUNCH\$1TYPE*-\$1*ECS\$1NETWORK\$1MODE*   |   | 
|  AWS::ECS::Service  |  cwagent-prometheus-replica-service-\$1*ECS\$1LAUNCH\$1TYPE*-\$1*ECS\$1NETWORK\$1MODE*  |   | 

### Eliminación de la pila de CloudFormation para el agente de CloudWatch con supervisión de Prometheus
<a name="ContainerInsights-Prometheus-ECS-delete"></a>

Para eliminar el agente de CloudWatch de un clúster de Amazon ECS, ingrese estos comandos.

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export CLOUDFORMATION_STACK_NAME=your_cloudformation_stack_name

aws cloudformation delete-stack \
--stack-name ${CLOUDFORMATION_STACK_NAME} \
--region ${AWS_DEFAULT_REGION} \
--profile ${AWS_PROFILE}
```

# Paspado de fuentes adicionales de Prometheus e importación de esas métricas
<a name="ContainerInsights-Prometheus-Setup-configure-ECS"></a>

El agente CloudWatch con supervisión de Prometheus necesita dos configuraciones para raspar las métricas de Prometheus. Una de ellas es para las configuraciones estándar de Prometheus que como se documenta en [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) en la documentación de Prometheus. La otra configuración es para la configuración del agente de CloudWatch.

Para los clústeres de Amazon ECS, las configuraciones se integran con Parameter Store de AWS Systems Manager según los secretos de la definición de tareas de Amazon ECS:
+ El secreto `PROMETHEUS_CONFIG_CONTENT` es para la configuración de raspado de Prometheus.
+ El secreto `CW_CONFIG_CONTENT` es para la configuración del agente de CloudWatch. 

Para raspar las fuentes adicionales de las métricas de Prometheus e importarlas a CloudWatch, debe modificar tanto la configuración de raspado de Prometheus como la configuración del agente de CloudWatch y, a continuación, debe volver a implementar el agente con la configuración actualizada.

**Requisitos del grupo de seguridad de la VPC**

Las reglas de entrada de los grupos de seguridad para las cargas de trabajo de Prometheus deben abrir los puertos de Prometheus al agente de CloudWatch para raspar las métricas de Prometheus por la IP privada.

Las reglas de salida del grupo de seguridad para el agente de CloudWatch deben permitir que el agente de CloudWatch se conecte al puerto de cargas de trabajo de Prometheus mediante la IP privada. 

## Configuración de raspado de Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-global"></a>

El agente de CloudWatch es compatible con la configuración de raspado estándar de Prometheus como se describe en [ <scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) en la documentación de Prometheus. Se puede editar esta sección para actualizar las configuraciones que ya están en este archivo y agregar destinos adicionales de raspado de Prometheus. De forma predeterminada, el archivo de configuración de muestra contiene las siguientes líneas de configuración global:

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
```
+ **scrape\$1interval**: define la frecuencia con la que se deben raspar los destinos.
+ **scrape\$1timeout**: define cuánto tiempo debe esperar antes de que se agote el tiempo de espera de una petición de raspado.

También puede definir valores diferentes para estos parámetros en el nivel de trabajo, para anular las configuraciones globales.

### Trabajos de raspado de Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-scrape"></a>

Los archivos YAML del agente de CloudWatch ya tienen algunos trabajos de raspado configurados de forma predeterminada. Por ejemplo, en los archivos YAML para Amazon ECS, como `cwagent-ecs-prometheus-metric-for-bridge-host.yaml`, los trabajos de raspado predeterminados se configuran en la sección `ecs_service_discovery`.

```
"ecs_service_discovery": {
                  "sd_frequency": "1m",
                  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
                  "docker_label": {
                  },
                  "task_definition_list": [
                    {
                      "sd_job_name": "ecs-appmesh-colors",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition\/.*-ColorTeller-(white):[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    },
                    {
                      "sd_job_name": "ecs-appmesh-gateway",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition/.*-ColorGateway:[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    }
                  ]
                }
```

Cada uno de estos destinos predeterminados se raspan y las métricas se envían a CloudWatch en eventos de registro mediante un formato de métrica integrada. Para obtener más información, consulte [Incrustar métricas en los registros](CloudWatch_Embedded_Metric_Format.md).

Los eventos de registro de los clústeres de Amazon ECS se almacenan en el grupo de registros **/aws/ecs/containerinsights/*cluster\$1name*/prometheus**.

Cada trabajo de extracción está contenido en un flujo de registros diferente en este grupo de registros.

Para agregar un nuevo destino de raspado, se debe agregar una entrada nueva en la sección `task_definition_list` en la sección `ecs_service_discovery` del archivo YAML y reiniciar el agente. Para obtener un ejemplo de este proceso, consulte [Tutorial para agregar un destino de raspado nuevo de Prometheus: métricas del servidor de la API de Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).

## Configuración del agente de CloudWatch para Prometheus
<a name="ContainerInsights-Prometheus-Setup-cw-agent-config"></a>

El archivo de configuración del agente de CloudWatch cuenta con una sección `prometheus` en `metrics_collected` para la configuración de raspado de Prometheus. Incluye las siguientes opciones de configuración:
+ **nombre\$1clúster**: especifica el nombre del clúster que se va a agregar como etiqueta en el evento de registro. Este campo es opcional. Si lo omite, el agente puede detectar el nombre del clúster de Amazon ECS.
+ **log\$1group\$1name**: especifica el nombre del grupo de registros para las métricas de Prometheus raspadas. Este campo es opcional. Si lo omite, CloudWatch usa **/aws/ecs/containerinsights/*cluster\$1name*/prometheus** para los registros de clústeres de Amazon ECS.
+ **prometheus\$1config\$1path**: especifica la ruta del archivo de configuración de raspado de Prometheus. Si el valor de este campo comienza con `env:`, el contenido del archivo de configuración de raspado de Prometheus se recuperará de la variable de entorno del contenedor. No cambie este campo.
+ **ecs\$1service\$1discovery**: es la sección para especificar las configuraciones de las funciones de detección automática de destino de Prometheus de Amazon ECS . Se admiten dos modos para detectar los destinos de Prometheus: detección basada en la etiqueta de docker del contenedor o detección basada en la expresión regular ARN de definición de tarea de Amazon ECS. Puede utilizar los dos modos juntos y el agente de CloudWatch desduplicará los destinos detectados en función de: *\$1private\$1ip\$1:\$1port\$1/\$1metrics\$1path\$1*.

  La sección `ecs_service_discovery` puede incluir los siguientes campos:
  + `sd_frequency` es la frecuencia para detectar a los exportadores de Prometheus. Especifique un número y un sufijo de unidad. Por ejemplo, `1m` para una vez por minuto o `30s` para una vez cada 30 segundos. Los sufijos de unidad válidos son `ns`, `us`, `ms`, `s`, `m` y `h`.

    Este campo es opcional. El valor predeterminado es 60 segundos (1 minuto).
  + `sd_target_cluster` es el nombre de clúster de Amazon ECS de destino para la detección automática. Este campo es opcional. El valor predeterminado es el nombre del clúster de Amazon ECS donde está instalado el agente de CloudWatch. 
  + `sd_cluster_region` es la Región del clúster de Amazon ECS de destino. Este campo es opcional. El valor predeterminado es la Región del clúster de Amazon ECS donde está instalado el agente de CloudWatch.
  + `sd_result_file` es la ruta del archivo YAML para los resultados de destino de Prometheus. La configuración de raspado de Prometheus hará referencia a este archivo.
  + `docker_label` es una sección opcional que se puede utilizar para especificar la configuración para la detección de servicios basada en etiquetas docker. Si omite esta sección, no se utiliza la detección basada en etiquetas docker. Esta sección puede incluir los siguientes campos:
    + `sd_port_label` es el nombre de etiqueta docker del contenedor que especifica el puerto del contenedor para las métricas de Prometheus. El valor predeterminado es `ECS_PROMETHEUS_EXPORTER_PORT`. Si el contenedor no tiene esta etiqueta docker, el agente de CloudWatch lo omitirá.
    + `sd_metrics_path_label` es el nombre de etiqueta docker del contenedor que especifica la ruta de métricas de Prometheus. El valor predeterminado es `ECS_PROMETHEUS_METRICS_PATH`. Si el contenedor no tiene esta etiqueta docker, el agente asume la ruta predeterminada `/metrics`.
    + `sd_job_name_label` es el nombre de etiqueta docker del contenedor que especifica el nombre del trabajo de raspado de Prometheus. El valor predeterminado es `job`. Si el contenedor no tiene esta etiqueta docker, el agente de CloudWatch utiliza el nombre del trabajo en la configuración de raspado de Prometheus.
  + `task_definition_list` es una sección opcional que se puede utilizar para especificar la configuración de la detección de servicios basada en definiciones de tareas. Si omite esta sección, no se utiliza la detección basada en definiciones de tareas. Esta sección puede incluir los siguientes campos:
    + `sd_task_definition_arn_pattern` es el patrón que se utiliza para especificar las definiciones de tareas de Amazon ECS que se van a detectar. Esta es una expresión regular.
    + `sd_metrics_ports` enumera el containerPort para las métricas de Prometheus. Separe los containerPorts con punto y coma.
    + `sd_container_name_pattern` especifica los nombres de contenedor de tareas de Amazon ECS. Esta es una expresión regular.
    + `sd_metrics_path` especifica la ruta de la métrica de Prometheus. Si omite esto, el agente asume la ruta de acceso predeterminada de las `/metrics`
    + `sd_job_name` especifica el nombre del trabajo de raspado de Prometheus. Si omite este campo, el agente de CloudWatch utilizará el nombre de trabajo en la configuración de borrado de Prometheus.
  + `service_name_list_for_tasks` es una sección opcional que puede utilizar para especificar la configuración de la detección basada en nombres de servicio. Si omite esta sección, no se utiliza la detección basada en nombres de servicio. Esta sección puede incluir los siguientes campos:
    + `sd_service_name_pattern` es el patrón que se debe utilizar para especificar el servicio Amazon ECS en el que se van a detectar las tareas. Esta es una expresión regular.
    + `sd_metrics_ports` enumera el `containerPort` para ver las métricas de Prometheus. Separe varios `containerPorts` con punto y coma.
    + `sd_container_name_pattern` especifica los nombres de contenedor de tareas de Amazon ECS. Esta es una expresión regular.
    + `sd_metrics_path` especifica la ruta de las métricas de Prometheus. Si omite esto, el agente asume la ruta de acceso predeterminada `/metrics`.
    + `sd_job_name` especifica el nombre del trabajo de raspado de Prometheus. Si omite este campo, el agente de CloudWatch utilizará el nombre de trabajo en la configuración de raspado de Prometheus. 
+ **metric\$1declaration**: son secciones que especifican la matriz de registros con formato de métrica integrada que se van a generar. Hay secciones `metric_declaration` para cada fuente de Prometheus desde las que el agente de CloudWatch importa de forma predeterminada. Cada una de estas secciones incluye los siguientes campos:
  + `label_matcher` es una expresión regular que verifica el valor de las etiquetas que aparecen en `source_labels`. Las métricas que concuerdan se pueden incorporar al formato de métrica integrada que se envía a CloudWatch. 

    Si tiene varias etiquetas especificadas en `source_labels`, se recomienda que evite el uso de los caracteres `^` o `$` en la expresión regular para `label_matcher`.
  + `source_labels` especifica el valor de las etiquetas que se comprueban con `label_matcher`.
  + `label_separator` especifica el separador que se utilizará en la línea ` label_matcher` si se especifican múltiples `source_labels`. El valor predeterminado es `;`. Puede ver este valor predeterminado utilizado en la línea `label_matcher` en el siguiente ejemplo.
  + `metric_selectors` es una expresión regular que especifica las métricas que se van a recopilar y enviar a CloudWatch.
  + `dimensions` es la lista de etiquetas que se van a utilizar como dimensiones de CloudWatch en cada métrica seleccionada.

Consulte el siguiente ejemplo, `metric_declaration`.

```
"metric_declaration": [
  {
     "source_labels":[ "Service", "Namespace"],
     "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system$",
     "dimensions":[
        ["Service", "Namespace"]
     ],
     "metric_selectors":[
        "^coredns_dns_request_type_count_total$"
     ]
  }
]
```

En este ejemplo se configura una sección de formato de métricas integradas para que se envíe como evento de registro si se cumplen las condiciones siguientes:
+ El valor de `Service` contiene `node-exporter` o `kube-dns`.
+ El valor de `Namespace` es `kube-system`.
+ La métrica de Prometheus `coredns_dns_request_type_count_total` contiene ambas etiquetas, `Service` y `Namespace`.

El evento de registro que se envía incluye la siguiente sección resaltada:

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"coredns_dns_request_type_count_total"
            }
         ],
         "Dimensions":[
            [
               "Namespace",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "Namespace":"kube-system",
   "Service":"kube-dns",
   "coredns_dns_request_type_count_total":2562,
   "eks_amazonaws_com_component":"kube-dns",
   "instance":"192.168.61.254:9153",
   "job":"kubernetes-service-endpoints",
   ...
}
```

# Guía detallada para la detección automática en clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-autodiscovery-ecs"></a>

Prometheus proporciona docenas de mecanismos dinámicos de detección de servicios, como se describe en [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config). Sin embargo, no existe una detección de servicios integrado para Amazon ECS. El agente CloudWatch agrega este mecanismo.

Cuando se habilita la detección de servicios de Amazon ECS Prometheus, el agente de CloudWatch realiza periódicamente las siguientes llamadas a la API a Amazon ECS y a los frontends de Amazon EC2 para recuperar los metadatos de las tareas ECS en ejecución en el clúster de ECS de destino. 

```
EC2:DescribeInstances
ECS:ListTasks
ECS:ListServices
ECS:DescribeContainerInstances
ECS:DescribeServices
ECS:DescribeTasks
ECS:DescribeTaskDefinition
```

El agente de CloudWatch utiliza los metadatos para examinar los destinos de Prometheus dentro del clúster de ECS. El agente de CloudWatch admite tres modos de detección de servicio:
+ Detección de servicio basada en etiquetas docker de contenedor
+ Detección de servicio basada en expresiones regulares ARN de definición de tarea de ECS
+ Detección de servicio basada en expresiones regulares de nombre de servicio de ECS

Todos los modos se pueden utilizar de forma conjunta. El agente de CloudWatch desduplica los destinos detectados en función de: `{private_ip}:{port}/{metrics_path}`.

Todos los destinos detectados se registran en un archivo de resultados que el campo de configuración `sd_result_file` especifica dentro del contenedor del agente de CloudWatch. A continuación se muestra un archivo de resultados de ejemplo. 

```
- targets:
  - 10.6.1.95:32785
  labels:
    __metrics_path__: /metrics
    ECS_PROMETHEUS_EXPORTER_PORT: "9406"
    ECS_PROMETHEUS_JOB_NAME: demo-jar-ec2-bridge-dynamic
    ECS_PROMETHEUS_METRICS_PATH: /metrics
    InstanceType: t3.medium
    LaunchType: EC2
    SubnetId: subnet-123456789012
    TaskDefinitionFamily: demo-jar-ec2-bridge-dynamic-port
    TaskGroup: family:demo-jar-ec2-bridge-dynamic-port
    TaskRevision: "7"
    VpcId: vpc-01234567890
    container_name: demo-jar-ec2-bridge-dynamic-port
    job: demo-jar-ec2-bridge-dynamic
- targets:
  - 10.6.3.193:9404
  labels:
    __metrics_path__: /metrics
    ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_B: "9404"
    ECS_PROMETHEUS_JOB_NAME: demo-tomcat-ec2-bridge-mapped-port
    ECS_PROMETHEUS_METRICS_PATH: /metrics
    InstanceType: t3.medium
    LaunchType: EC2
    SubnetId: subnet-123456789012
    TaskDefinitionFamily: demo-tomcat-ec2-bridge-mapped-port
    TaskGroup: family:demo-jar-tomcat-bridge-mapped-port
    TaskRevision: "12"
    VpcId: vpc-01234567890
    container_name: demo-tomcat-ec2-bridge-mapped-port
    job: demo-tomcat-ec2-bridge-mapped-port
```

Puede integrar directamente este archivo de resultados con la detección de servicios basada en archivos de Prometheus. Para obtener más información acerca de la detección de servicios basada en archivos de Prometheus, consulte [<file\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#file_sd_config).

 Suponga que el archivo de resultados se registra en `/tmp/cwagent_ecs_auto_sd.yaml`, la siguiente configuración de raspado de Prometheus lo consumirá.

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
scrape_configs:
  - job_name: cwagent-ecs-file-sd-config
    sample_limit: 10000
    file_sd_configs:
      - files: [ "/tmp/cwagent_ecs_auto_sd.yaml" ]
```

El agente de CloudWatch también agrega las siguientes etiquetas adicionales para los destinos detectados.
+ `container_name`
+ `TaskDefinitionFamily`
+ `TaskRevision`
+ `TaskGroup`
+ `StartedBy`
+ `LaunchType`
+ `job`
+ `__metrics_path__`
+ Etiquetas docker

Cuando el clúster tiene el tipo de lanzamiento EC2, se agregan las tres etiquetas siguientes.
+ `InstanceType`
+ `VpcId`
+ `SubnetId`

**nota**  
Las etiquetas docker que no concuerdan con la expresión regular `[a-zA-Z_][a-zA-Z0-9_]*` se filtran. Coincide con las convenciones de Prometheus enumeradas en `label_name` en [Configuration file](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#labelname) (Archivo de configuración) en la documentación de Prometheus.

## Ejemplos de configuración de detección de servicios de ECS
<a name="ContainerInsights-Prometheus-Setup-autodiscovery-ecs-examples"></a>

En esta sección se incluyen ejemplos que demuestran la detección de servicios de ECS.

**Ejemplo 1**

```
"ecs_service_discovery": {
  "sd_frequency": "1m",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "docker_label": {
  }
}
```

En este ejemplo se habilita la detección de servicios basada en etiquetas docker El agente de CloudWatch consultará los metadatos de las tareas de ECS una vez por minuto y registrará los destinos detectados en el archivo `/tmp/cwagent_ecs_auto_sd.yaml` dentro del contenedor del agente de CloudWatch.

El valor predeterminado de `sd_port_label` en la sección `docker_label` es `ECS_PROMETHEUS_EXPORTER_PORT`. Si algún contenedor en ejecución en las tareas de ECS tiene una etiqueta docker `ECS_PROMETHEUS_EXPORTER_PORT`, el agente CloudWatch utiliza el valor como `container port` para examinar todos los puertos expuestos del contenedor. Si hay una concordancia, el puerto del host mapeado más la IP privada del contenedor se utilizan para construir el destino del exportador de Prometheus en el siguiente formato: `private_ip:host_port`. 

El valor predeterminado de `sd_metrics_path_label` en la sección `docker_label` es `ECS_PROMETHEUS_METRICS_PATH`. Si el contenedor tiene esta etiqueta docker, el valor se utilizará como la `__metrics_path__` . Si el contenedor no tiene esta etiqueta, se utiliza el valor predeterminado `/metrics`.

El valor predeterminado de `sd_job_name_label` en la sección `docker_label` es `job`. Si el contenedor tiene esta etiqueta docker, el valor se agregará como una de las etiquetas para que el destino reemplace el nombre de trabajo predeterminado que se especifica en la configuración de Prometheus. El valor de esta etiqueta docker se utiliza como nombre de flujo de registro en el grupo de registros de CloudWatch Logs. 

**Ejemplo 2**

```
"ecs_service_discovery": {
  "sd_frequency": "15s",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "docker_label": {
    "sd_port_label": "ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A",
    "sd_job_name_label": "ECS_PROMETHEUS_JOB_NAME"  
  }
}
```

En este ejemplo se habilita la detección de servicios basada en etiquetas docker. El agente de CloudWatch consultará los metadatos de las tareas de ECS cada 15 segundos y registrará los destinos detectados en el archivo `/tmp/cwagent_ecs_auto_sd.yaml` dentro del contenedor del agente de CloudWatch. Los contenedores con una etiqueta docker de `ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A` se examinarán. El valor de la etiqueta docker `ECS_PROMETHEUS_JOB_NAME` se utiliza como el nombre del trabajo.

**Ejemplo 3**

```
"ecs_service_discovery": {
  "sd_frequency": "5m",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "task_definition_list": [
    {
      "sd_job_name": "java-prometheus",
      "sd_metrics_path": "/metrics",
      "sd_metrics_ports": "9404; 9406",
      "sd_task_definition_arn_pattern": ".*:task-definition/.*javajmx.*:[0-9]+"
    },
    {
      "sd_job_name": "envoy-prometheus",
      "sd_metrics_path": "/stats/prometheus",
      "sd_container_name_pattern": "^envoy$", 
      "sd_metrics_ports": "9901",
      "sd_task_definition_arn_pattern": ".*:task-definition/.*appmesh.*:23"
    }
  ]
}
```

Este ejemplo habilita la detección de servicios basada en expresiones ARN regulares de definición de tareas de ECS. El agente de CloudWatch consultará los metadatos de las tareas de ECS cada cinco minutos y registrará los destinos detectados en el archivo `/tmp/cwagent_ecs_auto_sd.yaml` dentro del contenedor del agente de CloudWatch.

Se definen dos secciones de expresión regular de ARN de definición de tarea:
+  Para la primera sección, las tareas de ECS con `javajmx` en la definición de tarea de ECS de ARN se filtran para el análisis del puerto del contenedor. Si los contenedores dentro de estas tareas de ECS exponen el puerto del contenedor en 9404 o 9406, el puerto del host mapeado junto con la IP privada del contenedor se utilizan para crear los destinos del exportador de Prometheus. El valor de `sd_metrics_path` establece `__metrics_path__` a `/metrics`. Por lo tanto, el agente de CloudWatch raspará las métricas de Prometheus de `private_ip:host_port/metrics` y las métricas raspadas se enviarán al flujo de registro `java-prometheus` en CloudWatch Logs en el grupo de registros `/aws/ecs/containerinsights/cluster_name/prometheus`. 
+  Para la segunda sección, las tareas de ECS con `appmesh` en los ARN de definición de tareas de ECS y con `version` de `:23` se filtran para el análisis del puerto del contenedor. Para contenedores con un nombre de `envoy` que exponen el puerto del contenedor en `9901`, el puerto del host mapeado junto con la IP privada del contenedor se utilizan para crear los destinos del exportador de Prometheus. El valor dentro de estas tareas de ECS expone el puerto contenedor en 9404 o 9406, el puerto del host mapeado junto con la IP privada del contenedor se utilizan para crear los destinos del exportador de Prometheus. El valor de `sd_metrics_path` establece `__metrics_path__` a `/stats/prometheus`. Por lo tanto, el agente de CloudWatch eliminará las métricas de Prometheus de `private_ip:host_port/stats/prometheus` y enviará las métricas raspadas al flujo de registros `envoy-prometheus` en CloudWatch Logs en el grupo de registros `/aws/ecs/containerinsights/cluster_name/prometheus`. 

**Ejemplo 4**

```
"ecs_service_discovery": {
  "sd_frequency": "5m",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "service_name_list_for_tasks": [
    {
      "sd_job_name": "nginx-prometheus",
      "sd_metrics_path": "/metrics",
      "sd_metrics_ports": "9113",
      "sd_service_name_pattern": "^nginx-.*"
    },
    {
      "sd_job_name": "haproxy-prometheus",
      "sd_metrics_path": "/stats/metrics",
      "sd_container_name_pattern": "^haproxy$",
      "sd_metrics_ports": "8404",
      "sd_service_name_pattern": ".*haproxy-service.*"
    }
  ]
}
```

En este ejemplo se habilita la detección de servicios basada en expresiones regulares del nombre de servicio de ECS. El agente de CloudWatch consultará los metadatos de los servicios de ECS cada cinco minutos y registrará los destinos detectados en el archivo `/tmp/cwagent_ecs_auto_sd.yaml` dentro del contenedor del agente de CloudWatch.

Se definen dos secciones de expresiones regulares de nombre de servicio:
+  Para la primera sección, las tareas de ECS asociadas con los servicios de ECS que tienen nombres que concuerdan con la expresión regular `^nginx-.*` se filtran para el análisis del puerto del contenedor. Si los contenedores dentro de estas tareas de ECS exponen el puerto del contenedor en 9113, el puerto del host mapeado junto con la IP privada del contenedor se utilizan para crear los destinos del exportador de Prometheus. El valor de `sd_metrics_path` establece `__metrics_path__` a `/metrics`. Por lo tanto, el agente de CloudWatch raspará las métricas de Prometheus de `private_ip:host_port/metrics`, y las métricas raspadas se enviarán al flujo de registro `nginx-prometheus` en CloudWatch Logs en el grupo de registros `/aws/ecs/containerinsights/cluster_name/prometheus`. 
+  Para la segunda sección, las tareas de ECS asociadas con los servicios de ECS que tienen nombres que concuerdan con la expresión regular `.*haproxy-service.*` se filtran para el análisis del puerto del contenedor. En contenedores con un nombre de `haproxy` que exponen el puerto del contenedor en 8404, el puerto del host mapeado junto con la IP privada del contenedor se utilizan para crear los destinos del exportador de Prometheus. El valor de `sd_metrics_path` establece `__metrics_path__` a `/stats/metrics`. Por lo tanto, el agente de CloudWatch raspará las métricas de Prometheus de `private_ip:host_port/stats/metrics`, y las métricas de raspado se enviarán al flujo de registro `haproxy-prometheus` en CloudWatch Logs en el grupo de registros `/aws/ecs/containerinsights/cluster_name/prometheus`. 

**Ejemplo 5**

```
"ecs_service_discovery": {
  "sd_frequency": "1m30s",
  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
  "docker_label": {
    "sd_port_label": "MY_PROMETHEUS_EXPORTER_PORT_LABEL",
    "sd_metrics_path_label": "MY_PROMETHEUS_METRICS_PATH_LABEL",
    "sd_job_name_label": "MY_PROMETHEUS_METRICS_NAME_LABEL"  
  }
  "task_definition_list": [
    {
      "sd_metrics_ports": "9150",
      "sd_task_definition_arn_pattern": "*memcached.*"
    }
  ]
}
```

En este ejemplo se habilitan los dos modos de detección de servicios de ECS. El agente de CloudWatch consultará los metadatos de las tareas de ECS cada 90 segundos y registrará los destinos detectados en el archivo `/tmp/cwagent_ecs_auto_sd.yaml` dentro del contenedor del agente de CloudWatch. 

Para la configuración de detección de servicios basada en docker:
+ Las tareas de ECS con etiqueta docker `MY_PROMETHEUS_EXPORTER_PORT_LABEL` se filtrarán para el análisis del puerto de Prometheus. El puerto de destino del contenedor de Prometheus se especifica por el valor de la etiqueta `MY_PROMETHEUS_EXPORTER_PORT_LABEL`. 
+ El valor de la etiqueta docker `MY_PROMETHEUS_EXPORTER_PORT_LABEL` se utiliza para `__metrics_path__`. Si el contenedor no tiene esta etiqueta docker, se utiliza el valor predeterminado `/metrics`. 
+ El valor de la etiqueta docker `MY_PROMETHEUS_EXPORTER_PORT_LABEL` se utiliza como etiqueta de trabajo. Si el contenedor no tiene esta etiqueta docker, se utiliza el nombre del trabajo definido en la configuración de Prometheus.

Para la configuración de la detección de servicio basada en expresiones regulares ARN de definición de tareas de ECS:
+ Las tareas de ECS con `memcached` en los ARN de definición de tareas de ECS se filtran para el análisis del puerto del contenedor. El puerto del contenedor del destino de Prometheus es 9150 de acuerdo a la definición de `sd_metrics_ports`. Se utiliza la ruta de métricas predeterminada `/metrics`. Se utiliza el nombre del trabajo definido en la configuración de Prometheus.

# (Opcional) Configure de cargas de trabajo en contenedores de Amazon ECS de muestra para realizar pruebas con las métricas de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS"></a>

Para probar la compatibilidad de las métricas de Prometheus en Información de contenedores de CloudWatch, puede configurar una o varias de las siguientes cargas de trabajo en contenedores. El agente de CloudWatch compatible con Prometheus recopila automáticamente las métricas de cada una de estas cargas de trabajo. Para ver las métricas que se recopilan de forma predeterminada, consulte [Métricas de Prometheus que el agente de CloudWatch recopila](ContainerInsights-Prometheus-metrics.md).

**Topics**
+ [Carga de trabajo de App Mesh de muestra para clústeres de Amazon ECS](ContainerInsights-Prometheus-Sample-Workloads-ECS-appmesh.md)
+ [Carga de trabajo Java/JMX de muestra para clústeres de Amazon ECS](ContainerInsights-Prometheus-Sample-Workloads-ECS-javajmx.md)
+ [Carga de trabajo NGINX de muestra para clústeres de Amazon ECS](ContainerInsights-Prometheus-Setup-nginx-ecs.md)
+ [Carga de trabajo de muestra de NGINX Plus para clústeres de Amazon ECS](ContainerInsights-Prometheus-Setup-nginx-plus-ecs.md)
+ [Tutorial para añadir un nuevo destino de raspado de Prometheus: Memcached en Amazon ECS](ContainerInsights-Prometheus-Setup-memcached-ecs.md)
+ [Tutorial para el raspado de métricas de Redis OSS Prometheus en Amazon ECS Fargate](ContainerInsights-Prometheus-Setup-redis-ecs.md)

# Carga de trabajo de App Mesh de muestra para clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS-appmesh"></a>

Para recopilar métricas de una carga de trabajo de muestra de Prometheus para Amazon ECS, se debe ejecutar Información de contenedores en el clúster. Para obtener más información sobre la instalación de Información de contenedores, consulte [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS.md).

En primer lugar, siga esta [walkthrough](https://github.com/aws/aws-app-mesh-examples/tree/main/examples/apps/colorapp#app-mesh-walkthrough-deploy-the-color-app-on-ecs) (explicación) para implementar la aplicación de color de muestra en el clúster de Amazon ECS. Una vez finalizado, tendrá las métricas de Prometheus de App Mesh expuestas en el puerto 9901.

A continuación, siga estos pasos para instalar el agente de CloudWatch con supervisión de Prometheus en el mismo clúster de Amazon ECS en el que instaló la aplicación de color. Los pasos descritos en esta sección instalan el agente de CloudWatch en modo de redes puente. 

Las variables de entorno `ENVIRONMENT_NAME`, `AWS_PROFILE` y `AWS_DEFAULT_REGION` que establezca en la explicación también se utilizarán en los siguientes pasos.

**Para instalar el agente de CloudWatch con supervisión de Prometheus para las pruebas**

1. Descargue la plantilla de CloudFormation con el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
   ```

1. Configure el modo de red con los siguientes comandos.

   ```
   export ECS_CLUSTER_NAME=${ENVIRONMENT_NAME}
   export ECS_NETWORK_MODE=bridge
   ```

1. Cree la pila de CloudFormation con los siguientes comandos.

   ```
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                    ParameterKey=CreateIAMRoles,ParameterValue=True \
                    ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \
                    ParameterKey=TaskRoleName,ParameterValue=CWAgent-Prometheus-TaskRole-${ECS_CLUSTER_NAME} \
                    ParameterKey=ExecutionRoleName,ParameterValue=CWAgent-Prometheus-ExecutionRole-${ECS_CLUSTER_NAME} \
       --capabilities CAPABILITY_NAMED_IAM \
       --region ${AWS_DEFAULT_REGION} \
       --profile ${AWS_PROFILE}
   ```

1. (Opcional) Cuando se crea la pila de CloudFormation, se observa un mensaje de `CREATE_COMPLETE`. Si desea verificar el estado antes de ver el mensaje, ingrese el siguiente comando.

   ```
   aws cloudformation describe-stacks \
   --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
   --query 'Stacks[0].StackStatus' \
   --region ${AWS_DEFAULT_REGION} \
   --profile ${AWS_PROFILE}
   ```

**Solución de problemas**

En los pasos de la explicación se utiliza jq para analizar el resultado de salida de AWS CLI. Para obtener más información sobre la instalación de jq, consulte [jq](https://stedolan.github.io/jq/). Utilice el siguiente comando para establecer el formato de salida predeterminado de AWS CLI a formato JSON para que jq pueda analizarlo de forma correcta. 

```
$ aws configure
```

Cuando la respuesta llegue a `Default output format`, ingrese **json**.

## Desinstale el agente de CloudWatch con supervisión de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS-appmesh-uninstall"></a>

Cuando termine de realizar la prueba, ingrese el siguiente comando para desinstalar el agente de CloudWatch mediante la eliminación de la pila de CloudFormation.

```
aws cloudformation delete-stack \
--stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
--region ${AWS_DEFAULT_REGION} \
--profile ${AWS_PROFILE}
```

# Carga de trabajo Java/JMX de muestra para clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS-javajmx"></a>

JMX Exporter es un exportador oficial de Prometheus que puede extraer y exponer mBeans de JMX como métricas de Prometheus. Para obtener más información, consulte [prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter).

El agente de CloudWatch compatible con Prometheus raspa las métricas de Java/JMX Prometheus en función de la configuración de detección de servicios en el clúster de Amazon ECS. Puede configurar JMX Exporter para exponer las métricas en un puerto o ruta (metrics\$1path) diferente. Si cambia el puerto o la ruta, actualice la sección `ecs_service_discovery` predeterminada en la configuración del agente de CloudWatch.

Para recopilar métricas de una carga de trabajo de Prometheus de muestra para Amazon ECS, debe ejecutar Información de contenedores en el clúster. Para obtener más información sobre la instalación de Información de contenedores, consulte [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS.md).

**Para instalar la carga de trabajo de ejemplo de Java/JMX para clústeres de Amazon ECS**

1. Siga los pasos descritos en estas secciones para crear las imágenes de Docker.
   + [Ejemplo: Imagen de Docker de una aplicación Jar de Java con métricas de Prometheus](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md#ContainerInsights-Prometheus-Sample-Workloads-javajmx-jar)
   + [Ejemplo: Imagen de Apache Tomcat Docker con métricas de Prometheus](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md#ContainerInsights-Prometheus-Sample-Workloads-javajmx-tomcat)

1. Especifique las dos etiquetas docker siguientes en el archivo de definición de tareas de Amazon ECS. A continuación, se puede ejecutar la definición de tarea como un Servicio ECS de Amazon o como una tarea de Amazon ECS en el clúster.
   + Establezca `ECS_PROMETHEUS_EXPORTER_PORT` para apuntar al ContainerPort donde están expuestas las métricas de Prometheus.
   + Establece `Java_EMF_Metrics` en `true`. El agente de CloudWatch utiliza este indicador para generar el formato de métrica integrada en el evento de registro.

   A continuación, se muestra un ejemplo:

   ```
   {
     "family": "workload-java-ec2-bridge",
     "taskRoleArn": "{{task-role-arn}}",
     "executionRoleArn": "{{execution-role-arn}}",
     "networkMode": "bridge",
     "containerDefinitions": [
       {
         "name": "tomcat-prometheus-workload-java-ec2-bridge-dynamic-port",
         "image": "your_docker_image_tag_for_tomcat_with_prometheus_metrics",
         "portMappings": [
           {
             "hostPort": 0,
             "protocol": "tcp",
             "containerPort": 9404
           }
         ],
         "dockerLabels": {
           "ECS_PROMETHEUS_EXPORTER_PORT": "9404",
           "Java_EMF_Metrics": "true"
         }
       }
     ],
     "requiresCompatibilities": [
       "EC2"  ],
     "cpu": "256",
     "memory": "512"
     }
   ```

La configuración predeterminada del agente de CloudWatch en la plantilla de CloudFormation permite tanto la detección de servicios basados en etiquetas docker como la detección de servicios basada en ARN de definición de tareas. Para ver estas configuraciones predeterminadas, consulte la línea 65 del [CloudWatch agent YAML configuration file](https://github.com/aws-samples/amazon-cloudwatch-container-insights/blob/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml#L65) (Archivo de configuración YAML del agente de CloudWatch). Los contenedores con etiquetas `ECS_PROMETHEUS_EXPORTER_PORT` se detectarán automáticamente en función del puerto de contenedor especificado para el raspado de Prometheus. 

La configuración predeterminada del agente de CloudWatch también tiene la configuración `metric_declaration` para Java/JMX en la línea 112 del mismo archivo. Todas las etiquetas docker de los contenedores de destino se agregarán como etiquetas adicionales en las métricas de Prometheus y se enviarán a CloudWatch Logs. Para los contenedores Java/JMX con etiqueta docker `Java_EMF_Metrics=“true”`, se generará el formato de métrica integrada. 

# Carga de trabajo NGINX de muestra para clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-nginx-ecs"></a>

El exportador NGINX de Prometheus puede raspar y exponer datos NGINX como métricas de Prometheus. En este ejemplo se utiliza el exportador junto con el servicio proxy inverso NGINX para Amazon ECS.

Para obtener más información sobre el exportador NGINX de Prometheus, consulte [nginx-prometheus-exporter](https://github.com/nginxinc/nginx-prometheus-exporter) en Github. Para obtener más información sobre el proxy inverso NGINX, consulte [ecs-nginx-reverse-proxy](https://github.com/awslabs/ecs-nginx-reverse-proxy) en Github.

El agente de CloudWatch compatible con Prometheus raspa las métricas de NGINX de Prometheus basadas en la configuración de detección de servicios en el clúster de Amazon ECS. Puede configurar el exportador NGINX de Prometheus para exponer las métricas en un puerto o una ruta diferente. Si cambia el puerto o la ruta, actualice la sección `ecs_service_discovery` en el archivo de configuración del agente de CloudWatch.

## Instale la carga de trabajo de muestra del proxy inverso NGINX para clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-ecs-setup"></a>

Siga los pasos para instalar la carga de trabajo de muestra del proxy inverso NGINX.

### Cree las imágenes de Docker
<a name="ContainerInsights-Prometheus-nginx-ecs-setup-docker"></a>

**Para crear las imágenes de Docker para la carga de trabajo de muestra del proxy inverso NGINX**

1. Descargue la siguiente carpeta del repositorio proxy inverso NGINX: [https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/).

1. Busque el directorio de la `app` y cree una imagen desde ese directorio:

   ```
   docker build -t web-server-app ./path-to-app-directory
   ```

1. Cree una imagen personalizada para NGINX. Primero, cree un directorio con los dos siguientes archivos:
   + Un archivo Dockerfile de muestra:

     ```
     FROM nginx
     COPY nginx.conf /etc/nginx/nginx.conf
     ```
   + Un archivo `nginx.conf`, modificado desde [https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/):

     ```
     events {
       worker_connections 768;
     }
     
     http {
       # Nginx will handle gzip compression of responses from the app server
       gzip on;
       gzip_proxied any;
       gzip_types text/plain application/json;
       gzip_min_length 1000;
     
       server{
         listen 8080;
         location /stub_status {
             stub_status   on;
         }
       }
     
       server {
         listen 80;
     
         # Nginx will reject anything not matching /api
         location /api {
           # Reject requests with unsupported HTTP method
           if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
             return 405;
           }
     
           # Only requests matching the whitelist expectations will
           # get sent to the application server
           proxy_pass http://app:3000;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache_bypass $http_upgrade;
         }
       }
     }
     ```
**nota**  
`stub_status` debe estar habilitado en el mismo puerto que `nginx-prometheus-exporter` está configurado para raspar métricas desde allí. En nuestra definición de tarea de ejemplo, `nginx-prometheus-exporter` está configurado para raspar métricas del puerto 8080.

1. Cree una imagen a partir de archivos en el directorio nuevo:

   ```
   docker build -t nginx-reverse-proxy ./path-to-your-directory
   ```

1. Cargue las imágenes nuevas en un repositorio de imágenes para usarlas posteriormente.

### Cree la definición de tarea para ejecutar NGINX y la aplicación de servidor web en Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-ecs-setup-task"></a>

A continuación, se debe configurar la definición de tarea.

Esta definición de tarea permite la recopilación y exportación de métricas de NGINX de Prometheus. El contenedor NGINX realiza un seguimiento de la entrada desde la aplicación y expone esos datos al puerto 8080, como se establece en `nginx.conf`. El contenedor exportador NGINX de Prometheus raspa estas métricas y las publica en el puerto 9113, para usarlas en CloudWatch.

**Para configurar la definición de tarea para la carga de trabajo de muestra de NGINX de Amazon ECS**

1. Cree un archivo de definición de tarea JSON con el siguiente contenido. Reemplace *your-customized-nginx-iamge* con el URI de imagen para la imagen NGINX personalizada y reemplace *your-web-server-app-image* con el URI de imagen para la imagen de la aplicación del servidor web.

   ```
   {
     "containerDefinitions": [
       {
         "name": "nginx",
         "image": "your-customized-nginx-image",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "portMappings": [
           {
             "containerPort": 80,
             "protocol": "tcp"
           }
         ],
         "links": [
           "app"
         ]
       },
       {
         "name": "app",
         "image": "your-web-server-app-image",
         "memory": 256,
         "cpu": 256,
         "essential": true
       },
       {
         "name": "nginx-prometheus-exporter",
         "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "command": [
           "-nginx.scrape-uri",
           "http://nginx:8080/stub_status"
       ],
       "links":[
         "nginx"
       ],
         "portMappings":[
           {
             "containerPort": 9113,
             "protocol": "tcp"
           }
         ]
       }
     ],
     "networkMode": "bridge",
     "placementConstraints": [],
     "family": "nginx-sample-stack"
   }
   ```

1. Ingrese el siguiente comando para registrar la definición de tarea.

   ```
   aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json
   ```

1. Cree un servicio para ejecutar la tarea mediante el siguiente comando:

   Asegúrese de no cambiar el nombre del servicio. Se ejecutará un servicio del agente de CloudWatch con una configuración que busca tareas mediante los patrones de nombres de los servicios que las iniciaron. Por ejemplo, para que el agente de CloudWatch encuentre la tarea que este comando ha lanzado, puede especificar que el valor de `sd_service_name_pattern` sea `^nginx-service$`. En la siguiente sección se proporcionan más detalles.

   ```
   aws ecs create-service \
    --cluster your-cluster-name \
    --service-name nginx-service \
    --task-definition nginx-sample-stack:1 \
    --desired-count 1
   ```

### Configure el agente de CloudWatch para que realice el raspado de las métricas de NGINX Prometheus
<a name="ContainerInsights-Prometheus-nginx-ecs-setup-agent"></a>

El paso final es configurar el agente de CloudWatch para que realice el raspado de las métricas de NGINX. En este ejemplo, el agente de CloudWatch detecta la tarea mediante el patrón de nombre de servicio y el puerto 9113, donde el exportador expone las métricas de prometheus para NGINX. Con la tarea detectada y las métricas disponibles, el agente de CloudWatch comienza a publicar las métricas recopiladas en el flujo de registro **nginx-prometheus-exporter**. 

**Para configurar el agente de CloudWatch para que realice el raspado de las métricas de NGINX**

1. Descargue la última versión del archivo YAML necesario con el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
   ```

1. Abra el archivo con un editor de texto y busque la configuración completa del agente CloudWatch en la clave de `value` en la sección `resource:CWAgentConfigSSMParameter`. A continuación, en la sección `ecs_service_discovery`, agregue la siguiente sección `service_name_list_for_tasks`.

   ```
   "service_name_list_for_tasks": [
     {
       "sd_job_name": "nginx-prometheus-exporter",
       "sd_metrics_path": "/metrics",
       "sd_metrics_ports": "9113",
       "sd_service_name_pattern": "^nginx-service$"
      }
   ],
   ```

1. En el mismo archivo, agregue la siguiente sección en la sección `metric_declaration` para permitir las métricas de NGINX. Asegúrese de seguir el patrón de sangría existente.

   ```
   {
     "source_labels": ["job"],
     "label_matcher": ".*nginx.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]],
     "metric_selectors": [
       "^nginx_.*$"
     ]
   },
   ```

1. Si aún no tiene el agente de CloudWatch implementado en este clúster, diríjase directamente al paso 8.

   Si ya implementó el agente de CloudWatch en el clúster de Amazon ECS mediante AWS CloudFormation, puede crear un conjunto de cambios con los siguientes comandos:

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION \
       --change-set-name nginx-scraping-support
   ```

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Revise el conjunto de cambios recién creado **nginx-scraping-support**. Se debería ver un cambio aplicado al recurso **CWAgentConfigSSMParameter**. Ejecute el conjunto de cambios y reinicie la tarea del agente de CloudWatch con el siguiente comando:

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Espere aproximadamente 10 segundos y, a continuación, ingrese el siguiente comando.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Si va a instalar el agente de CloudWatch con la recopilación de métricas de Prometheus en el clúster por primera vez, ingrese los siguientes comandos.

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

## Visualización de las métricas y los registros de NGINX
<a name="ContainerInsights-Prometheus-Setup-nginx-view"></a>

Ahora puede ver las métricas de NGINX que se están recopilando.

**Para visualizar las métricas de la carga de trabajo de muestra de NGINX**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En la Región en la que se está ejecutando el clúster, elija **Metrics** (Métricas) en el panel de navegación izquierdo. Busque el espacio de nombres **ContainerInsights/Prometheus** para ver las métricas.

1. Para ver los eventos de CloudWatch Logs, elija **Log groups** (Grupos de registros) en el panel de navegación. Los eventos se encuentran en el grupo de registros **/aws/containerinsights/*your\$1cluster\$1name*/prometheus**, en el flujo de registros *nginx-prometheus-exporter*.

# Carga de trabajo de muestra de NGINX Plus para clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-nginx-plus-ecs"></a>

NGINX Plus es la versión comercial de NGINX. Debe contar con una licencia para utilizarla. Para obtener más información, consulte [NGINX Plus](https://www.nginx.com/products/nginx/).

El exportador NGINX de Prometheus puede raspar y exponer datos de NGINX como las métricas de Prometheus. En este ejemplo se utiliza el exportador junto con el servicio proxy inverso NGINX Plus para Amazon ECS.

Para obtener más información sobre el exportador NGINX de Prometheus, consulte [nginx-prometheus-exporter](https://github.com/nginxinc/nginx-prometheus-exporter) en Github. Para obtener más información sobre el proxy inverso NGINX, consulte [ecs-nginx-reverse-proxy](https://github.com/awslabs/ecs-nginx-reverse-proxy) en Github.

El agente de CloudWatch compatible con Prometheus realiza el raspado de las métricas de NGINX Plus Prometheus basado en la configuración de detección de servicios en el clúster de Amazon ECS. Puede configurar el exportador NGINX de Prometheus para exponer las métricas en un puerto o una ruta diferente. Si cambia el puerto o la ruta, actualice la sección de `ecs_service_discovery` en el archivo de configuración del agente de CloudWatch.

## Instale la carga de trabajo de muestra del proxy inverso NGINX Plus para clústeres de Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup"></a>

Siga los pasos para instalar la carga de trabajo de muestra del proxy inverso NGINX.

### Cree las imágenes de Docker
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup-docker"></a>

**Para crear las imágenes de Docker para la carga de trabajo de muestra del proxy inverso NGINX Plus**

1. Descargue la siguiente carpeta del repositorio del proxy inverso NGINX: [https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/).

1. Busque el directorio de la `app` y cree una imagen desde ese directorio:

   ```
   docker build -t web-server-app ./path-to-app-directory
   ```

1. Cree una imagen personalizada para NGINX Plus. Antes de poder crear la imagen para NGINX Plus, debe obtener la clave llamada `nginx-repo.key` y el certificado SSL `nginx-repo.crt` para la licencia de NGINX Plus. Cree un directorio y almacene en él la `nginx-repo.key` y los archivos `nginx-repo.crt`. 

   En el directorio que acaba de crear, cree los siguientes dos archivos:
   + Una muestra de Dockerfile con el siguiente contenido. Este archivo docker se adopta a partir de un archivo de muestra que se proporciona en [https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-docker/\$1docker\$1plus\$1image](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-docker/#docker_plus_image). El cambio importante que se realiza es que se carga un archivo por separado, llamado`nginx.conf`, que se creará en el siguiente paso.

     ```
     FROM debian:buster-slim
     
     LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>“
     
     # Define NGINX versions for NGINX Plus and NGINX Plus modules
     # Uncomment this block and the versioned nginxPackages block in the main RUN
     # instruction to install a specific release
     # ENV NGINX_VERSION 21
     # ENV NJS_VERSION 0.3.9
     # ENV PKG_RELEASE 1~buster
     
     # Download certificate and key from the customer portal (https://cs.nginx.com (https://cs.nginx.com/))
     # and copy to the build context
     COPY nginx-repo.crt /etc/ssl/nginx/
     COPY nginx-repo.key /etc/ssl/nginx/
     # COPY nginx.conf /etc/ssl/nginx/nginx.conf
     
     RUN set -x \
     # Create nginx user/group first, to be consistent throughout Docker variants
     && addgroup --system --gid 101 nginx \
     && adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid 101 nginx \
     && apt-get update \
     && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates gnupg1 \
     && \
     NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \
     found=''; \
     for server in \
     ha.pool.sks-keyservers.net (http://ha.pool.sks-keyservers.net/) \
     hkp://keyserver.ubuntu.com:80 \
     hkp://p80.pool.sks-keyservers.net:80 \
     pgp.mit.edu (http://pgp.mit.edu/) \
     ; do \
     echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
     apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
     done; \
     test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
     apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \
     # Install the latest release of NGINX Plus and/or NGINX Plus modules
     # Uncomment individual modules if necessary
     # Use versioned packages over defaults to specify a release
     && nginxPackages=" \
     nginx-plus \
     # nginx-plus=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-xslt \
     # nginx-plus-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-geoip \
     # nginx-plus-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-image-filter \
     # nginx-plus-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-perl \
     # nginx-plus-module-perl=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-njs \
     # nginx-plus-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${PKG_RELEASE} \
     " \
     && echo "Acquire::https::plus-pkgs.nginx.com::Verify-Peer \"true\";" >> /etc/apt/apt.conf.d/90nginx \
     && echo "Acquire::https::plus-pkgs.nginx.com::Verify-Host \"true\";" >> /etc/apt/apt.conf.d/90nginx \
     && echo "Acquire::https::plus-pkgs.nginx.com::SslCert \"/etc/ssl/nginx/nginx-repo.crt\";" >> /etc/apt/apt.conf.d/90nginx \
     && echo "Acquire::https::plus-pkgs.nginx.com::SslKey \"/etc/ssl/nginx/nginx-repo.key\";" >> /etc/apt/apt.conf.d/90nginx \
     && printf "deb https://plus-pkgs.nginx.com/debian buster nginx-plus\n" > /etc/apt/sources.list.d/nginx-plus.list \
     && apt-get update \
     && apt-get install --no-install-recommends --no-install-suggests -y \
     $nginxPackages \
     gettext-base \
     curl \
     && apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx-plus.list \
     && rm -rf /etc/apt/apt.conf.d/90nginx /etc/ssl/nginx
     
     # Forward request logs to Docker log collector
     RUN ln -sf /dev/stdout /var/log/nginx/access.log \
     && ln -sf /dev/stderr /var/log/nginx/error.log
     
     COPY nginx.conf /etc/nginx/nginx.conf
     
     EXPOSE 80
     
     STOPSIGNAL SIGTERM
     
     CMD ["nginx", "-g", "daemon off;"]
     ```
   + Un archivo `nginx.conf`, modificado desde [https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/nginx](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/nginx).

     ```
     events {
       worker_connections 768;
     }
     
     http {
       # Nginx will handle gzip compression of responses from the app server
       gzip on;
       gzip_proxied any;
       gzip_types text/plain application/json;
       gzip_min_length 1000;
     
       upstream backend {
         zone name 10m;
         server app:3000    weight=2;
         server app2:3000    weight=1;
       }
     
       server{
         listen 8080;
         location /api {
           api write=on;
         }
       }
     
       match server_ok {
         status 100-599;
       }
     
       server {
         listen 80;
         status_zone zone;
         # Nginx will reject anything not matching /api
         location /api {
           # Reject requests with unsupported HTTP method
           if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
             return 405;
           }
     
           # Only requests matching the whitelist expectations will
           # get sent to the application server
           proxy_pass http://backend;
           health_check uri=/lorem-ipsum match=server_ok;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache_bypass $http_upgrade;
         }
       }
     }
     ```

1. Cree una imagen a partir de los archivos en el directorio nuevo:

   ```
   docker build -t nginx-plus-reverse-proxy ./path-to-your-directory
   ```

1. Cargue las imágenes nuevas en un repositorio de imágenes para usarlas posteriormente.

### Cree la definición de tarea para ejecutar NGINX Plus y la aplicación de servidor web en Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup-task"></a>

A continuación, se debe configurar la definición de tarea.

Esta definición de tarea permite la recopilación y exportación de métricas de NGINX Plus Prometheus. El contenedor NGINX realiza un seguimiento de la entrada desde la aplicación y expone esos datos al puerto 8080, como se establece en `nginx.conf`. El contenedor exportador NGINX de Prometheus raspa estas métricas y las publica en el puerto 9113, para usarlas en CloudWatch.

**Para configurar la definición de tarea para la carga de trabajo de muestra de NGINX de Amazon ECS**

1. Cree un archivo JSON de definición de tarea con el siguiente contenido. Reemplace *your-customized-nginx-plus-image* por el URI de imagen para la imagen personalizada de NGINX Plus, y reemplace *your-web-server-app-image* por el URI de imagen para la imagen de la aplicación del servidor web.

   ```
   {
     "containerDefinitions": [
       {
         "name": "nginx",
         "image": "your-customized-nginx-plus-image",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "portMappings": [
           {
             "containerPort": 80,
             "protocol": "tcp"
           }
         ],
         "links": [
           "app",
           "app2"
         ]
       },
       {
         "name": "app",
         "image": "your-web-server-app-image",
         "memory": 256,
         "cpu": 128,
         "essential": true
       },
       {
         "name": "app2",
         "image": "your-web-server-app-image",
         "memory": 256,
         "cpu": 128,
         "essential": true
       },
       {
         "name": "nginx-prometheus-exporter",
         "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "command": [
           "-nginx.plus",
           "-nginx.scrape-uri",
            "http://nginx:8080/api"
       ],
       "links":[
         "nginx"
       ],
         "portMappings":[
           {
             "containerPort": 9113,
             "protocol": "tcp"
           }
         ]
       }
     ],
     "networkMode": "bridge",
     "placementConstraints": [],
     "family": "nginx-plus-sample-stack"
   }
   ```

1. Registre la definición de tarea:

   ```
   aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json
   ```

1. Cree un servicio para ejecutar la tarea con el siguiente comando:

   ```
   aws ecs create-service \
    --cluster your-cluster-name \
    --service-name nginx-plus-service \
    --task-definition nginx-plus-sample-stack:1 \
    --desired-count 1
   ```

   Asegúrese de no cambiar el nombre del servicio. Se ejecutará un servicio del agente de CloudWatch con una configuración que busca tareas mediante los patrones de nombres de los servicios que las iniciaron. Por ejemplo, para que el agente de CloudWatch encuentre la tarea que este comando ha lanzado, puede especificar que el valor de `sd_service_name_pattern` sea `^nginx-plus-service$`. En la siguiente sección se proporcionan más detalles.

### Configure el agente de CloudWatch para que raspe las métricas de NGINX Plus de Prometheus
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup-agent"></a>

El paso final es configurar el agente de CloudWatch para que realice el raspado de las métricas de NGINX. En este ejemplo, el agente de CloudWatch detecta la tarea mediante el patrón de nombre de servicio y el puerto 9113, donde el exportador expone las métricas de prometheus para NGINX. Con la tarea detectada y las métricas disponibles, el agente de CloudWatch comienza a publicar las métricas recopiladas en el flujo de registro **nginx-prometheus-exporter**. 

**Para configurar el agente de CloudWatch para que realice el raspado de las métricas de NGINX**

1. Descargue la última versión del archivo YAML necesario con el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
   ```

1. Abra el archivo con un editor de texto y busque la configuración completa del agente CloudWatch en la clave de `value` en la sección `resource:CWAgentConfigSSMParameter`. A continuación, en la sección `ecs_service_discovery`, agregue la siguiente sección `service_name_list_for_tasks`.

   ```
   "service_name_list_for_tasks": [
     {
       "sd_job_name": "nginx-plus-prometheus-exporter",
       "sd_metrics_path": "/metrics",
       "sd_metrics_ports": "9113",
       "sd_service_name_pattern": "^nginx-plus.*"
      }
   ],
   ```

1. En el mismo archivo, agregue la siguiente sección en la sección `metric_declaration` para permitir las métricas de NGINX Plus. Asegúrese de seguir el patrón de sangría existente.

   ```
   {
     "source_labels": ["job"],
     "label_matcher": "^nginx-plus.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]],
     "metric_selectors": [
       "^nginxplus_connections_accepted$",
       "^nginxplus_connections_active$",
       "^nginxplus_connections_dropped$",
       "^nginxplus_connections_idle$",
       "^nginxplus_http_requests_total$",
       "^nginxplus_ssl_handshakes$",
       "^nginxplus_ssl_handshakes_failed$",
       "^nginxplus_up$",
       "^nginxplus_upstream_server_health_checks_fails$"
     ]
   },
   {
     "source_labels": ["job"],
     "label_matcher": "^nginx-plus.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName", "upstream"]],
     "metric_selectors": [
       "^nginxplus_upstream_server_response_time$"
     ]
   },
   {
     "source_labels": ["job"],
     "label_matcher": "^nginx-plus.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName", "code"]],
     "metric_selectors": [
       "^nginxplus_upstream_server_responses$",
       "^nginxplus_server_zone_responses$"
     ]
   },
   ```

1. Si aún no tiene el agente de CloudWatch implementado en este clúster, diríjase directamente al paso 8.

   Si ya implementó el agente de CloudWatch en el clúster de Amazon ECS mediante AWS CloudFormation, puede crear un conjunto de cambios con los siguientes comandos:

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION \
       --change-set-name nginx-plus-scraping-support
   ```

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Revise el conjunto de cambios recién creado **nginx-plus-scraping-support**. Se debería ver un cambio aplicado al recurso **CWAgentConfigSSMParamete**. Ejecute el conjunto de cambios y reinicie la tarea del agente de CloudWatch al ingresar el siguiente comando:

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Espere aproximadamente 10 segundos y, a continuación, ingrese el siguiente comando.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Si va a instalar el agente de CloudWatch con la recopilación de métricas de Prometheus en el clúster por primera vez, ingrese los siguientes comandos.

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

## Visualización de las métricas y los registros de NGINX Plus
<a name="ContainerInsights-Prometheus-Setup-nginx-plus-view"></a>

Ahora se pueden visualizar las métricas de NGINX Plus que se están recopilando.

**Para visualizar las métricas de la carga de trabajo de muestra de NGINX**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En la Región en la que se está ejecutando el clúster, elija **Metrics** (Métricas) en el panel de navegación izquierdo. Busque el espacio de nombres **ContainerInsights/Prometheus** para ver las métricas.

1. Para ver los eventos de CloudWatch Logs, elija **Log groups** (Grupos de registros) en el panel de navegación. Los eventos están en el grupo de registro **/aws/containerinsights/*your\$1cluster\$1name*/prometheus**, en el flujo de registros *nginx-plus-prometheus-exporter*.

# Tutorial para añadir un nuevo destino de raspado de Prometheus: Memcached en Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs"></a>

Este tutorial proporciona una introducción práctica para raspar las métricas de Prometheus de una aplicación Memcached de muestra en un clúster de Amazon ECS con el tipo de lanzamiento de EC2. El agente CloudWatch detectará automáticamente el destino del exportador de Memcached de Prometheus mediante la detección de servicios basada en la definición de tareas de ECS.

Memcached es un sistema de almacenamiento en caché en memoria distribuida de uso general. A menudo se utiliza para acelerar los sitios web dirigidos por base de datos dinámicos mediante el almacenamiento en caché de datos y objetos en la RAM para reducir el número de veces que se debe leer una fuente de datos externa (como una base de datos o una API). Para obtener más información, consulte [What is Memcached?](https://www.memcached.org/) (¿Qué es Memcached?)

[memchached\$1exporter](https://github.com/prometheus/memcached_exporter) (Apache Licencia 2.0) es uno de los exportadores oficiales de Prometheus. De forma predeterminada, memcache\$1exporter sirve en el puerto 0.0.0.0:9150 en `/metrics.`

En este tutorial se utilizan las imágenes de Docker en los siguientes dos repositorios de Docker Hub: 
+ [ Memcached](https://hub.docker.com/_/memcached?tab=description)
+ [ prom/memcached-exporter](https://hub.docker.com/r/prom/memcached-exporter/)

**Requisito previo**

Para recopilar métricas de una carga de trabajo de muestra de Prometheus para Amazon ECS, se debe ejecutar Información de contenedores en el clúster. Para obtener más información sobre la instalación de Información de contenedores, consulte [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS.md).

**Topics**
+ [Establezca las variables de entorno del clúster de EC2 de Amazon ECS](#ContainerInsights-Prometheus-Setup-memcached-ecs-environment)
+ [Instale la carga de trabajo de muestra de Memcached](#ContainerInsights-Prometheus-Setup-memcached-ecs-install-workload)
+ [Configure el agente de CloudWatch para que realice el raspado de las métricas de Memcached Prometheus](#ContainerInsights-Prometheus-Setup-memcached-ecs-agent)
+ [Visualización de las métricas de Memcached](#ContainerInsights-Prometheus-ECS-memcached-view)

## Establezca las variables de entorno del clúster de EC2 de Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs-environment"></a>

**Para establecer las variables de entorno del clúster de EC2 de Amazon ECS**

1. Instale la CLI de Amazon ECS si aún no lo ha hecho. Para obtener más información, consulte [Installing the Amazon ECS CLI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html) (Instalación de la CLI de Amazon ECS).

1. Establezca el nuevo nombre del clúster de Amazon ECS y la Región. Por ejemplo:

   ```
   ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial
   AWS_DEFAULT_REGION=ca-central-1
   ```

1. (Opcional) Si aún no cuenta con un clúster de Amazon ECS con el tipo de lanzamiento de EC2 en el que desea instalar la carga de trabajo de muestra de Memcached y el agente de CloudWatch de ejemplo, puede crear uno con el siguiente comando.

   ```
   ecs-cli up --capability-iam --size 1 \
   --instance-type t3.medium \
   --cluster $ECS_CLUSTER_NAME \
   --region $AWS_REGION
   ```

   El resultado esperado de este comando es el siguiente:

   ```
   WARN[0000] You will not be able to SSH into your EC2 instances without a key pair. 
   INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.44.4 and Docker version 19.03.6-ce 
   INFO[0001] Created cluster                               cluster=ecs-ec2-memcached-tutorial region=ca-central-1
   INFO[0002] Waiting for your cluster resources to be created... 
   INFO[0002] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
   INFO[0063] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
   INFO[0124] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
   VPC created: vpc-xxxxxxxxxxxxxxxxx
   Security Group created: sg-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Cluster creation succeeded.
   ```

## Instale la carga de trabajo de muestra de Memcached
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs-install-workload"></a>

**Para instalar la carga de trabajo de muestra de Memcached que expone las métricas de Prometheus**

1. Descargue la plantilla de CloudFormation de Memcached con el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/memcached/memcached-traffic-sample.yaml
   ```

1. Establezca los nombres de rol de IAM que se crearán para Memcached con los siguientes comandos.

   ```
   MEMCACHED_ECS_TASK_ROLE_NAME=memcached-prometheus-demo-ecs-task-role-name
   MEMCACHED_ECS_EXECUTION_ROLE_NAME=memcached-prometheus-demo-ecs-execution-role-name
   ```

1. Instale la carga de trabajo de muestra de Memcached mediante el siguiente comando. Este ejemplo instala la carga de trabajo en el modo de red `host`.

   ```
   MEMCACHED_ECS_NETWORK_MODE=host
   
   aws cloudformation create-stack --stack-name Memcached-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MODE \
       --template-body file://memcached-traffic-sample.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=ECSNetworkMode,ParameterValue=$MEMCACHED_ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$MEMCACHED_ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$MEMCACHED_ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

La pila de CloudFormation crea cuatro recursos:
+ Un rol de tarea de ECS
+ Un rol de ejecución de tareas de ECS
+ Una definición de tarea de Memcached
+ Un servicio de Memcached

En la definición de tarea de Memcached, se definen dos contenedores:
+ El contenedor principal ejecuta una aplicación de Memcached simple y abre el puerto 11 211 para el acceso.
+ El otro contenedor ejecuta el proceso exportador de Redis OSS para exponer las métricas de Prometheus en el puerto 9150. Este es el contenedor que el agente de CloudWatch detectará y raspará.

## Configure el agente de CloudWatch para que realice el raspado de las métricas de Memcached Prometheus
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs-agent"></a>

**Para configurar el agente de CloudWatch para que raspe las métricas de Memcached Prometheus**

1. Descargue la última versión de `cwagent-ecs-prometheus-metric-for-awsvpc.yaml` mediante el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml
   ```

1. Abra el archivo con un editor de texto y busque la configuración completa del agente de CloudWatch detrás de la clave de `value` en la sección `resource:CWAgentConfigSSMParameter`.

   A continuación, en la sección `ecs_service_discovery`, agregue la siguiente configuración en la sección `task_definition_list`.

   ```
   {
       "sd_job_name": "ecs-memcached",
       "sd_metrics_ports": "9150",
       "sd_task_definition_arn_pattern": ".*:task-definition/memcached-prometheus-demo.*:[0-9]+"
   },
   ```

   Para la sección `metric_declaration`, la configuración predeterminada no permite ninguna métrica de Memcached. Agregue la siguiente sección para permitir métricas de Memcached. Asegúrese de seguir el patrón de sangría existente.

   ```
   {
     "source_labels": ["container_name"],
     "label_matcher": "memcached-exporter-.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily"]],
     "metric_selectors": [
       "^memcached_current_(bytes|items|connections)$",
       "^memcached_items_(reclaimed|evicted)_total$",
       "^memcached_(written|read)_bytes_total$",
       "^memcached_limit_bytes$",
       "^memcached_commands_total$"
     ]
   },
   {
     "source_labels": ["container_name"],
     "label_matcher": "memcached-exporter-.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily","status","command"], ["ClusterName", "TaskDefinitionFamily","command"]],
     "metric_selectors": [
       "^memcached_commands_total$"
     ]
   },
   ```

1. Si ya implementó el agente de CloudWatch en el clúster de Amazon ECS mediante CloudFormation, puede crear un conjunto de cambios con los siguientes comandos.

   ```
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION \
       --change-set-name memcached-scraping-support
   ```

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Revise el conjunto de cambios recién creado `memcached-scraping-support`. Se debería ver un cambio aplicado al recurso `CWAgentConfigSSMParameter`. Ejecute el conjunto de cambios y reinicie la tarea del agente de CloudWatch mediante los siguientes comandos.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Espere aproximadamente 10 segundos y, a continuación, ingrese el siguiente comando.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Si va a instalar el agente de CloudWatch con la recopilación de métricas de Prometheus para el clúster por primera vez, ingrese los siguientes comandos:

   ```
   ECS_NETWORK_MODEE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

## Visualización de las métricas de Memcached
<a name="ContainerInsights-Prometheus-ECS-memcached-view"></a>

En este tutorial se envían las siguientes métricas al espacio de nombres en CloudWatch **ECS/ContainerInsights/Prometheus**. Puede utilizar la consola de CloudWatch para ver las métricas de ese espacio de nombres.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `memcached_current_items` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_current_connections` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_limit_bytes` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_current_bytes` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_written_bytes_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_read_bytes_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_items_evicted_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_items_reclaimed_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_commands_total` |  `ClusterName`, `TaskDefinitionFamily` `ClusterName`, TaskDefinitionFamily, comando `ClusterName`, TaskDefinitionFamily, estado, comando  | 

**nota**  
Los valores de la dimensión de **command** (comando) pueden ser: `delete`, `get`, `cas`, `set`, `decr`, `touch`, `incr` o `flush`.  
Los valores de la dimensión **status** (estado) pueden ser: `hit`, `miss` o `badval`. 

También puede crear un panel de CloudWatch para las métricas de Memcached Prometheus.

**Para crear un panel para las métricas de Memcached Prometheus**

1. Cree variables de entorno mediante el reemplazo de los siguientes valores para que concuerden con la implementación.

   ```
   DASHBOARD_NAME=your_memcached_cw_dashboard_name
   ECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD
   ```

1. Ingrese el siguiente comando para crear el panel.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json \
   | sed "s/{{YOUR_AWS_REGION}}/$AWS_REGION/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/$ECS_CLUSTER_NAME/g" \
   | sed "s/{{YOUR_TASK_DEF_FAMILY}}/$ECS_TASK_DEF_FAMILY/g" \
   | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --region $AWS_REGION --dashboard-body
   ```

# Tutorial para el raspado de métricas de Redis OSS Prometheus en Amazon ECS Fargate
<a name="ContainerInsights-Prometheus-Setup-redis-ecs"></a>

En este tutorial encontrará una introducción práctica para raspar las métricas de Prometheus de una aplicación de Redis OSS de muestra en un clúster de Amazon ECS Fargate. El destino del exportador de Redis OSS Prometheus será detectado automáticamente por el agente de CloudWatch con compatibilidad con métricas de Prometheus a partir de las etiquetas Docker del contenedor.

Redis OSS (https://redis.io/) es un almacén de estructuras de datos en memoria de código abierto (con licencia BSD), que se utiliza como base de datos, caché y agente de mensajes. Para obtener más información, consulte [redis](https://redis.io/).

redis\$1exporter (con licencia MIT) se utiliza para exponer las métricas de Redis OSS Prometheus en el puerto especificado (predeterminado: 0.0.0.0:9121). Para obtener más información, consulte [redis\$1exporter](https://github.com/oliver006/redis_exporter).

En este tutorial se utilizan las imágenes de Docker en los siguientes dos repositorios de Docker Hub: 
+ [ redis](https://hub.docker.com/_/redis?tab=description)
+ [ redis\$1exporter](https://hub.docker.com/r/oliver006/redis_exporter)

**Requisito previo**

Para recopilar métricas de una carga de trabajo de muestra de Prometheus para Amazon ECS, se debe ejecutar Información de contenedores en el clúster. Para obtener más información sobre la instalación de Información de contenedores, consulte [Configuración de Información de contenedores en Amazon ECS](deploy-container-insights-ECS.md).

**Topics**
+ [Cómo establecer la variable de entorno del clúster de Amazon ECS Fargate](#ContainerInsights-Prometheus-Setup-redis-ecs-variable)
+ [Establezca las variables de entorno de red para el clúster de Amazon ECS Fargate](#ContainerInsights-Prometheus-Setup-redis-ecs-variable2)
+ [Instale la carga de trabajo de muestra de Redis OSS](#ContainerInsights-Prometheus-Setup-redis-ecs-install-workload)
+ [Configure el agente de CloudWatch para que raspe las métricas de Redis OSS Prometheus](#ContainerInsights-Prometheus-Setup-redis-ecs-agent)
+ [Visualización de las métricas de Redis OSS](#ContainerInsights-Prometheus-Setup-redis-view)

## Cómo establecer la variable de entorno del clúster de Amazon ECS Fargate
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-variable"></a>

**Cómo establecer la variable de entorno del clúster de Amazon ECS Fargate**

1. Instale la CLI de Amazon ECS si aún no lo ha hecho. Para obtener más información, consulte [Installing the Amazon ECS CLI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html) (Instalación de la CLI de Amazon ECS).

1. Establezca el nuevo nombre del clúster de Amazon ECS y la Región. Por ejemplo:

   ```
   ECS_CLUSTER_NAME=ecs-fargate-redis-tutorial
   AWS_DEFAULT_REGION=ca-central-1
   ```

1. (Opcional) Si aún no cuenta con un clúster de Amazon ECS Fargate en el que desea instalar la carga de trabajo de muestra de Redis OSS y el agente de CloudWatch, puede crear uno con el siguiente comando.

   ```
   ecs-cli up --capability-iam \
   --cluster $ECS_CLUSTER_NAME \
   --launch-type FARGATE \
   --region $AWS_DEFAULT_REGION
   ```

   El resultado esperado de este comando es el siguiente:

   ```
   INFO[0000] Created cluster   cluster=ecs-fargate-redis-tutorial region=ca-central-1
   INFO[0001] Waiting for your cluster resources to be created...
   INFO[0001] Cloudformation stack status   stackStatus=CREATE_IN_PROGRESS
   VPC created: vpc-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Cluster creation succeeded.
   ```

## Establezca las variables de entorno de red para el clúster de Amazon ECS Fargate
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-variable2"></a>

**Para establecer las variables de entorno de red para el clúster de Amazon ECS Fargate**

1. Establezca la VPC y el ID de subred del clúster de Amazon ECS. Si creó un clúster nuevo en el procedimiento anterior, verá estos valores en el resultado del comando final. De lo contrario, utilice los ID del clúster existente que va a utilizar con Redis.

   ```
   ECS_CLUSTER_VPC=vpc-xxxxxxxxxxxxxxxxx
   ECS_CLUSTER_SUBNET_1=subnet-xxxxxxxxxxxxxxxxx
   ECS_CLUSTER_SUBNET_2=subnet-xxxxxxxxxxxxxxxxx
   ```

1. En este tutorial, vamos a instalar la aplicación Redis OSS y el agente de CloudWatch en el grupo de seguridad predeterminado de la VPC del clúster de Amazon ECS. El grupo de seguridad predeterminado permite todas las conexiones de red dentro del mismo grupo de seguridad para que el agente de CloudWatch pueda raspar las métricas de Prometheus expuestas en los contenedores de Redis OSS. En un entorno de producción real, es posible que desee crear grupos de seguridad dedicados para la aplicación Redis OSS y el agente de CloudWatch y establecer permisos personalizados para estos. 

   Para obtener el ID del grupo de seguridad predeterminado, ingrese el siguiente comando.

   ```
   aws ec2 describe-security-groups \
   --filters Name=vpc-id,Values=$ECS_CLUSTER_VPC  \
   --region $AWS_DEFAULT_REGION
   ```

   A continuación, establezca la variable de grupo de seguridad predeterminado del clúster de Fargate mediante el siguiente comando; debe reemplazar *my-default-security-group* por el valor que encontró del comando anterior.

   ```
   ECS_CLUSTER_SECURITY_GROUP=my-default-security-group
   ```

## Instale la carga de trabajo de muestra de Redis OSS
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-install-workload"></a>

**Para instalar la carga de trabajo de muestra de Redis OSS que expone las métricas de Prometheus**

1. Descargue la plantilla de CloudFormation de Redis OSS con el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml
   ```

1. Establezca los nombres de roles de IAM que se crearán para Redis OSS. Para ello, ingrese los siguientes comandos.

   ```
   REDIS_ECS_TASK_ROLE_NAME=redis-prometheus-demo-ecs-task-role-name
   REDIS_ECS_EXECUTION_ROLE_NAME=redis-prometheus-demo-ecs-execution-role-name
   ```

1. Instale la carga de trabajo de muestra de Redis OSS con el siguiente comando.

   ```
   aws cloudformation create-stack --stack-name Redis-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-fargate-awsvpc \
       --template-body file://redis-traffic-sample.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \
                    ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET_1 \
                    ParameterKey=TaskRoleName,ParameterValue=$REDIS_ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$REDIS_ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_DEFAULT_REGION
   ```

La pila de CloudFormation crea cuatro recursos:
+ Un rol de tarea de ECS
+ Un rol de ejecución de tareas de ECS
+ Una definición de tarea de Redis OSS
+ Un servicio de Redis OSS

En la definición de tarea de Redis OSS, se definen dos contenedores:
+ El contenedor principal ejecuta una aplicación simple de Redis OSS y abre el puerto 6379 para el acceso.
+ El otro contenedor ejecuta el proceso exportador de Redis OSS para exponer las métricas de Prometheus en el puerto 9121. Este es el contenedor que el agente de CloudWatch detectará y raspará. La siguiente etiqueta docker se define para que el agente de CloudWatch pueda detectar este contenedor mediante ella.

  ```
  ECS_PROMETHEUS_EXPORTER_PORT: 9121
  ```

## Configure el agente de CloudWatch para que raspe las métricas de Redis OSS Prometheus
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-agent"></a>

**Para configurar el agente de CloudWatch para que raspe las métricas de Redis OSS Prometheus**

1. Descargue la última versión de `cwagent-ecs-prometheus-metric-for-awsvpc.yaml` mediante el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml
   ```

1. Abra el archivo con un editor de texto y busque la configuración completa del agente de CloudWatch detrás de la clave de `value` en la sección `resource:CWAgentConfigSSMParameter`.

   A continuación, en la sección `ecs_service_discovery` que aparece aquí, la detección del servicio basada en `docker_label` se habilita con la configuración predeterminada que se basa en `ECS_PROMETHEUS_EXPORTER_PORT`, que coincide con la etiqueta docker que se definió en la definición de tarea de ECS de Redis OSS. Por lo tanto, no es necesario hacer ningún cambio en esta sección:

   ```
   ecs_service_discovery": {
     "sd_frequency": "1m",
     "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
   *  "docker_label": {
     },*
     ...
   ```

   Para la sección `metric_declaration`, la configuración predeterminada no permite ninguna métrica de Redis OSS. Agregue la siguiente sección para permitir las métricas de Redis OSS. Asegúrese de seguir el patrón de sangría existente.

   ```
   {
     "source_labels": ["container_name"],
     "label_matcher": "^redis-exporter-.*$",
     "dimensions": [["ClusterName","TaskDefinitionFamily"]],
     "metric_selectors": [
       "^redis_net_(in|out)put_bytes_total$",
       "^redis_(expired|evicted)_keys_total$",
       "^redis_keyspace_(hits|misses)_total$",
       "^redis_memory_used_bytes$",
       "^redis_connected_clients$"
     ]
   },
   {
     "source_labels": ["container_name"],
     "label_matcher": "^redis-exporter-.*$",
     "dimensions": [["ClusterName","TaskDefinitionFamily","cmd"]],
     "metric_selectors": [
       "^redis_commands_total$"
     ]
   },
   {
     "source_labels": ["container_name"],
     "label_matcher": "^redis-exporter-.*$",
     "dimensions": [["ClusterName","TaskDefinitionFamily","db"]],
     "metric_selectors": [
       "^redis_db_keys$"
     ]
   },
   ```

1. Si ya implementó el agente de CloudWatch en el clúster de Amazon ECS mediante CloudFormation, puede crear un conjunto de cambios con los siguientes comandos.

   ```
   ECS_LAUNCH_TYPE=FARGATE
   CREATE_IAM_ROLES=True
   ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-awsvpc \
       --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \
                    ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \
                    ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region ${AWS_DEFAULT_REGION} \
       --change-set-name redis-scraping-support
   ```

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Revise el conjunto de cambios recién creado `redis-scraping-support`. Se debería ver un cambio aplicado al recurso `CWAgentConfigSSMParameter`. Ejecute el conjunto de cambios y reinicie la tarea del agente de CloudWatch mediante los siguientes comandos.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-awsvpc \
   --region ${AWS_DEFAULT_REGION}
   ```

1. Espere aproximadamente 10 segundos y, a continuación, ingrese el siguiente comando.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-awsvpc \
   --region ${AWS_DEFAULT_REGION}
   ```

1. Si va a instalar el agente de CloudWatch con la recopilación de métricas de Prometheus para el clúster por primera vez, ingrese los siguientes comandos:

   ```
   ECS_LAUNCH_TYPE=FARGATE
   CREATE_IAM_ROLES=True
   ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-awsvpc \
       --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \
                    ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \
                    ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region ${AWS_DEFAULT_REGION}
   ```

## Visualización de las métricas de Redis OSS
<a name="ContainerInsights-Prometheus-Setup-redis-view"></a>

En este tutorial se envían las siguientes métricas al espacio de nombres en CloudWatch **ECS/ContainerInsights/Prometheus**. Puede utilizar la consola de CloudWatch para ver las métricas de ese espacio de nombres.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `redis_net_input_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_net_output_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_expired_keys_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_evicted_keys_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_keyspace_hits_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_keyspace_misses_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_memory_used_bytes` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_connected_clients` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_commands_total` |  ` ClusterName`, `TaskDefinitionFamily`, `cmd`  | 
|  `redis_db_keys` |  `ClusterName`, `TaskDefinitionFamily`, `db`  | 

**nota**  
Los valores de la dimensión **cmd** pueden ser: `append`, `client`, `command`, `config`, `dbsize`, `flushall`, `get`, `incr`, `info`, `latency` o `slowlog`.  
Los valores de la dimensión **db** pueden ir de `db0` a `db15`. 

También puede crear un panel de CloudWatch para las métricas de Redis OSS Prometheus.

**Para crear un panel para las métricas de Redis OSS Prometheus**

1. Cree variables de entorno mediante el reemplazo de los siguientes valores para que concuerden con la implementación.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   ECS_TASK_DEF_FAMILY=redis-prometheus-demo-$ECS_CLUSTER_NAME-fargate-awsvpc
   ```

1. Ingrese el siguiente comando para crear el panel.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \
   ```

# Establezca y configure la recopilación de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes
<a name="ContainerInsights-Prometheus-install-EKS"></a>

Para recopilar métricas de Prometheus de clústeres que ejecutan Amazon EKS o Kubernetes, puede utilizar el agente de CloudWatch como el recopilador de AWS Distro para OpenTelemetry. Para obtener información sobre el uso del recopilador de AWS Distro para OpenTelemetry, consulte [https://aws-otel.github.io/docs/getting-started/container-insights/eks-prometheus](https://aws-otel.github.io/docs/getting-started/container-insights/eks-prometheus).

En las siguientes secciones se explica cómo se recopilan las métricas de Prometheus con el agente de CloudWatch. Explican cómo se instala el agente CloudWatch con supervisión de Prometheus en clústeres que ejecutan Amazon EKS o Kubernetes y cómo se configura el agente para que raspe los destinos adicionales. También proporcionan tutoriales opcionales para configurar cargas de trabajo de muestra para utilizarlas en pruebas con supervisión de Prometheus.

**Topics**
+ [Instale el agente de CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes](ContainerInsights-Prometheus-Setup.md)

# Instale el agente de CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes
<a name="ContainerInsights-Prometheus-Setup"></a>

En esta sección se explica cómo se configura el agente de CloudWatch con supervisión de Prometheus en un clúster que ejecute Amazon EKS o Kubernetes. Después de hacerlo, el agente raspa e importa automáticamente las métricas para las siguientes cargas de trabajo que se ejecutan en ese clúster.
+ AWS App Mesh
+ NGINX
+ Memcached
+ Java/JMX
+ HAProxy
+ Fluent Bit

También puede configurar el agente para que raspe e importe cargas de trabajo y fuentes de Prometheus adicionales.

Antes de seguir estos pasos e instalar el agente de CloudWatch para recopilar métricas de Prometheus, debe contar con un clúster que se ejecute en Amazon EKS o un clúster de Kubernetes que se ejecute en una instancia de Amazon EC2.

**Requisitos del grupo de seguridad de la VPC**

Las reglas de entrada de los grupos de seguridad para las cargas de trabajo de Prometheus deben abrir los puertos de Prometheus al agente de CloudWatch para raspar las métricas de Prometheus por la IP privada.

Las reglas de salida del grupo de seguridad para el agente de CloudWatch deben permitir que el agente de CloudWatch se conecte al puerto de cargas de trabajo de Prometheus mediante la IP privada. 

**Topics**
+ [Instale el agente de CloudWatch con la obtención de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes](#ContainerInsights-Prometheus-Setup-roles)
+ [El raspado de fuentes de Prometheus adicionales y la importación de tales métricas](ContainerInsights-Prometheus-Setup-configure.md)
+ [(Opcional) Configure las cargas de trabajo de muestra de Amazon EKS en contenedores para realizar pruebas con las métricas de Prometheus](ContainerInsights-Prometheus-Sample-Workloads.md)

## Instale el agente de CloudWatch con la obtención de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes
<a name="ContainerInsights-Prometheus-Setup-roles"></a>

En esta sección se explica cómo se configura el agente de CloudWatch con supervisión de Prometheus en un clúster que ejecute Amazon EKS o Kubernetes. Después de hacerlo, el agente raspa e importa automáticamente las métricas para las siguientes cargas de trabajo que se ejecutan en ese clúster.
+ AWS App Mesh
+ NGINX
+ Memcached
+ Java/JMX
+ HAProxy
+ Fluent Bit

También puede configurar el agente para que raspe e importe cargas de trabajo y fuentes de Prometheus adicionales.

Antes de seguir estos pasos e instalar el agente de CloudWatch para recopilar métricas de Prometheus, debe contar con un clúster que se ejecute en Amazon EKS o un clúster de Kubernetes que se ejecute en una instancia de Amazon EC2.

**Requisitos del grupo de seguridad de la VPC**

Las reglas de entrada de los grupos de seguridad para las cargas de trabajo de Prometheus deben abrir los puertos de Prometheus al agente de CloudWatch para raspar las métricas de Prometheus por la IP privada.

Las reglas de salida del grupo de seguridad para el agente de CloudWatch deben permitir que el agente de CloudWatch se conecte al puerto de cargas de trabajo de Prometheus mediante la IP privada. 

**Topics**
+ [Configuración de roles de IAM](#ContainerInsights-Prometheus-Setup-roles)
+ [Instalación del agente de CloudWatch para recopilar métricas de Prometheus](#ContainerInsights-Prometheus-Setup-install-agent)

### Configuración de roles de IAM
<a name="ContainerInsights-Prometheus-Setup-roles"></a>

El primer paso es configurar el rol de IAM necesario en el clúster. Hay dos métodos:
+ Configure un rol de IAM para una cuenta de servicio, también conocida como *Función de servicio*. Este método funciona tanto para el tipo de lanzamiento de EC2 como para el tipo de lanzamiento de Fargate.
+ Agregue una política de IAM al rol de IAM que se utiliza en el clúster. Esto solo funciona para el tipo de lanzamiento de EC2.

**Configure una función de servicio (tipo de lanzamiento de EC2 y tipo de lanzamiento de Fargate)**

Para configurar una función de servicio, ingrese el siguiente comando. Sustituya *MyCluster* por el nombre del clúster.

```
eksctl create iamserviceaccount \
 --name cwagent-prometheus \
--namespace amazon-cloudwatch \
 --cluster MyCluster \
--attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
--approve \
--override-existing-serviceaccounts
```

**Agregue una política al rol de IAM del grupo de nodos (solo tipo de lanzamiento de EC2)**

**Para configurar la política de IAM en un grupo de nodos para la compatibilidad con Prometheus**

1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. En el panel de navegación, seleccione **Instances (Instancias)**.

1. Debe encontrar el prefijo en el nombre del rol de IAM de ese clúster. Para ello, active la casilla situada junto al nombre de una instancia del clúster y seleccione **Acciones**, **Seguridad**, **Modificar rol de IAM**. Después, copie el prefijo del rol de IAM; por ejemplo, `eksctl-dev303-workshop-nodegroup`.

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. Utilice el cuadro de búsqueda para buscar el prefijo que copió anteriormente en este procedimiento y elija ese rol.

1. Seleccione **Asociar políticas**.

1. Utilice el cuadro de búsqueda para buscar **CloudWatchAgentServerPolicy**. Active la casilla de verificación situada junto a **CloudWatchAgentServerPolicy** y elija **Asociar política**.

### Instalación del agente de CloudWatch para recopilar métricas de Prometheus
<a name="ContainerInsights-Prometheus-Setup-install-agent"></a>

Debe instalarse el agente de CloudWatch en el clúster para recopilar las métricas. La instalación del agente es diferente en los clústeres de Amazon EKS y en los de Kubernetes.

**Elimine las versiones anteriores del agente de CloudWatch compatible con Prometheus**

Si ya ha instalado en el clúster una versión del agente de CloudWatch compatible con Prometheus, debe eliminar esa versión con el siguiente comando. Solo es necesario hacerlo con las versiones anteriores del agente compatible con Prometheus. No es necesario que elimine el agente de CloudWatch que habilita Información de contenedores sin compatibilidad con Prometheus.

```
kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
```

#### Instalación del agente de CloudWatch en clústeres de Amazon EKS con el tipo de lanzamiento de EC2
<a name="ContainerInsights-Prometheus-Setup-install-agent-EKS"></a>

Para instalar el agente de CloudWatch compatible con Prometheus en un clúster de Amazon EKS, siga estos pasos.

**Para instalar el agente de CloudWatch compatible con Prometheus en un clúster de Amazon EKS**

1. Ejecute el siguiente comando para comprobar si el espacio de nombres de `amazon-cloudwatch` ya se ha creado:

   ```
   kubectl get namespace
   ```

1. Si `amazon-cloudwatch` no aparece en los resultados, créelo con el siguiente comando:

   ```
   kubectl create namespace amazon-cloudwatch
   ```

1. Para implementar el agente con la configuración predeterminada y hacer que envíe datos a la región de AWS en la que está instalado, escriba el siguiente comando:

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   Para que el agente envíe datos a una otra región, siga estos pasos:

   1. Descargue el archivo YAML del agente con el siguiente comando:

      ```
      curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
      ```

   1. Abra el archivo con un editor de texto y busque el bloque `cwagentconfig.json` del archivo.

   1. Agregue las líneas resaltadas, especificando la región que desee:

      ```
      cwagentconfig.json: |
          {
            "agent": {
              "region": "us-east-2"
            },
            "logs": { ...
      ```

   1. Guarde el archivo e implemente el agente utilizando el archivo actualizado.

      ```
      kubectl apply -f prometheus-eks.yaml
      ```

#### Instalación del agente de CloudWatch en clústeres de Amazon EKS con el tipo de lanzamiento de Fargate
<a name="ContainerInsights-Prometheus-Setup-install-agent-EKS-fargate"></a>

Para instalar el agente de CloudWatch compatible con Prometheus en un clúster de Amazon EKS con el tipo de lanzamiento Fargate, siga estos pasos.

**Para instalar el agente de CloudWatch compatible con Prometheus en un clúster de Amazon EKS con el tipo de lanzamiento de Fargate**

1. Ingrese el siguiente comando para crear un perfil de Fargate para el agente de CloudWatch de modo que pueda ejecutarse dentro del clúster. Sustituya *MyCluster* por el nombre del clúster.

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --name amazon-cloudwatch \
   --namespace amazon-cloudwatch
   ```

1. Para instalar el agente de CloudWatch, ingrese el siguiente comando. Sustituya *MyCluster* por el nombre del clúster. Este nombre se utiliza en el nombre del grupo de registros donde se almacenan los eventos de registro recopilados por el agente y también se utiliza como dimensión en las métricas recopiladas por el agente.

   Sustituya *Región* por el nombre de la Región a la que desea enviar la métrica. Por ejemplo, `us-west-1`. 

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml | 
   sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | 
   kubectl apply -f -
   ```

#### Instalación del agente de CloudWatch en un clúster de Kubernetes
<a name="ContainerInsights-Prometheus-Setup-install-agent-Kubernetes"></a>

Para instalar el agente de CloudWatch compatible con Prometheus en un clúster en el que se ejecuta Kubernetes, ingrese el siguiente comando:

```
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml | 
sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | 
kubectl apply -f -
```

Sustituya *MyCluster* por el nombre del clúster. Este nombre se utiliza en el nombre del grupo de registros donde se almacenan los eventos de registro recopilados por el agente y también se utiliza como dimensión en las métricas recopiladas por el agente.

Sustituya *region* por el nombre de la región de AWS a la que desea enviar la métrica. Por ejemplo, **us-west-1**.

#### Verifique que el agente esté en ejecución
<a name="ContainerInsights-Prometheus-Setup-install-agent-verify"></a>

En los clústeres de Amazon EKS y en los de Kubernetes, puede ingresar el siguiente comando para confirmar que el agente se está ejecutando.

```
kubectl get pod -l "app=cwagent-prometheus" -n amazon-cloudwatch
```

Si en los resultados solo aparece un pod del agente de CloudWatch con el estado `Running`, el agente está ejecutando y recopilando métricas de Prometheus. De forma predeterminada, el agente de CloudWatch recopila métricas para App Mesh, NGINX, Memcached, Java/JMX y HAProxy por minuto. Para obtener más información sobre estas métricas, consulte [Métricas de Prometheus que el agente de CloudWatch recopila](ContainerInsights-Prometheus-metrics.md). Para obtener instrucciones sobre cómo ver las métricas de Prometheus en CloudWatch, consulte [Visualización de las métricas de Prometheus](ContainerInsights-Prometheus-viewmetrics.md)

También puede configurar el agente de CloudWatch para que recopile métricas de otros exportadores de Prometheus. Para obtener más información, consulte [El raspado de fuentes de Prometheus adicionales y la importación de tales métricas](ContainerInsights-Prometheus-Setup-configure.md).

# El raspado de fuentes de Prometheus adicionales y la importación de tales métricas
<a name="ContainerInsights-Prometheus-Setup-configure"></a>

El agente CloudWatch con supervisión de Prometheus necesita dos configuraciones para raspar las métricas de Prometheus. Una de ellas es para las configuraciones estándar de Prometheus que como se documenta en [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) en la documentación de Prometheus. La otra es para la configuración del agente de CloudWatch.

Para los clústeres de Amazon EKS, las configuraciones se definen en `prometheus-eks.yaml` (para el tipo de lanzamiento de EC2) o en `prometheus-eks-fargate.yaml` (para el tipo de lanzamiento de Fargate) como dos mapas de configuración:
+ La sección `name: prometheus-config` contiene la configuración de extracción de Prometheus,
+ La sección `name: prometheus-cwagentconfig` contiene la configuración del agente de CloudWatch. Puede utilizar esta sección para definir cómo CloudWatch va a recopilar las métricas de Prometheus. Por ejemplo, puede especificar las métricas que se van a importar en CloudWatch y definir las dimensiones. 

Para los clústeres de Kubernetes que se ejecutan en las instancias de Amazon EC2, las configuraciones se definen en el archivo YAML `prometheus-k8s.yaml` como dos mapas de configuración:
+ La sección `name: prometheus-config` contiene la configuración de extracción de Prometheus,
+ La sección `name: prometheus-cwagentconfig` contiene la configuración del agente de CloudWatch. 

Para raspar las fuentes de las métricas de Prometheus adicionales e importarlas a CloudWatch, debe modifique tanto la configuración de raspado de Prometheus como la configuración del agente de CloudWatch y, a continuación, volver a implementar el agente con la configuración actualizada.

**Requisitos del grupo de seguridad de la VPC**

Las reglas de entrada de los grupos de seguridad para las cargas de trabajo de Prometheus deben abrir los puertos de Prometheus al agente de CloudWatch para raspar las métricas de Prometheus por la IP privada.

Las reglas de salida del grupo de seguridad para el agente de CloudWatch deben permitir que el agente de CloudWatch se conecte al puerto de cargas de trabajo de Prometheus mediante la IP privada. 

## Configuración de raspado de Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-global"></a>

El agente de CloudWatch es compatible con la configuración de raspado estándar de Prometheus como se describe en [ <scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) en la documentación de Prometheus. Se puede editar esta sección para actualizar las configuraciones que ya están en este archivo y agregar destinos adicionales de raspado de Prometheus. De forma predeterminada, el archivo de configuración de muestra contiene las siguientes líneas de configuración global:

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
```
+ **scrape\$1interval**: define la frecuencia con la que se deben raspar los destinos.
+ **scrape\$1timeout**: define cuánto tiempo debe esperar antes de que se agote el tiempo de espera de una petición de raspado.

También puede definir valores diferentes para estos parámetros en el nivel de trabajo, para anular las configuraciones globales.

### Trabajos de raspado de Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-scrape"></a>

Los archivos YAML del agente de CloudWatch ya tienen algunos trabajos de raspado configurados de forma predeterminada. Por ejemplo, en `prometheus-eks.yaml`, los trabajos de raspado predeterminados se configuran en las líneas `job_name` en la sección `scrape_configs`. En este archivo, en la siguiente sección predeterminada `kubernetes-pod-jmx` se raspan las métricas de JMX exporter.

```
   - job_name: 'kubernetes-pod-jmx'
      sample_limit: 10000
      metrics_path: /metrics
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels: [__address__]
        action: keep
        regex: '.*:9404$'
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: Namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: pod_name
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_container_name
        target_label: container_name
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_controller_name
        target_label: pod_controller_name
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_controller_kind
        target_label: pod_controller_kind
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_phase
        target_label: pod_phase
```

Se realiza el raspado de cada uno de estos destinos predeterminados y las métricas se envían a CloudWatch en eventos de registro mediante el formato de métrica integrada. Para obtener más información, consulte [Incrustar métricas en los registros](CloudWatch_Embedded_Metric_Format.md).

Los eventos de registro de los clústeres de Amazon EKS y de Kubernetes se almacenan en el grupo de registro **//aws/containerinsights/*cluster\$1name*/prometheus** en CloudWatch Logs. Los eventos de registro de los clústeres de Amazon ECS se almacenan en el grupo de registro **/aws/ecs/containerinsights/*cluster\$1name*/prometheus**.

Cada trabajo de extracción está contenido en un flujo de registros diferente en este grupo de registros. Por ejemplo, el trabajo de raspado de Prometheus `kubernetes-pod-appmesh-envoy` se define para App Mesh. Todas las métricas de Prometheus de App Mesh de los clústeres de Amazon EKS y de Kubernetes se envían al flujo de registros denominado **/aws/containerinsights/*cluster\$1name*>prometheus/kubernetes-pod-appmesh-envoy/**.

Para agregar un nuevo destino de extracción, agregue una nueva sección `job_name` a la sección `scrape_configs` del archivo YAML y reinicie el agente. Para obtener un ejemplo de este proceso, consulte [Tutorial para agregar un destino de raspado nuevo de Prometheus: métricas del servidor de la API de Prometheus](#ContainerInsights-Prometheus-Setup-new-exporters).

## Configuración del agente de CloudWatch para Prometheus
<a name="ContainerInsights-Prometheus-Setup-cw-agent-config2"></a>

El archivo de configuración del agente de CloudWatch cuenta con una sección `prometheus` en `metrics_collected` para la configuración de raspado de Prometheus. Incluye las siguientes opciones de configuración:
+ **nombre\$1clúster**: especifica el nombre del clúster que se va a agregar como etiqueta en el evento de registro. Este campo es opcional. Si lo omite, el agente puede detectar el nombre del clúster de Amazon EKS o de Kubernetes.
+ **log\$1group\$1name**: especifica el nombre del grupo de registros para las métricas Prometheus raspadas. Este campo es opcional. Si lo omite, CloudWatch utiliza **/aws/containerinsights/*cluster\$1name*/prometheus** para los registros de los clústeres de Amazon EKS y de Kubernetes.
+ **prometheus\$1config\$1path**: especifica la ruta del archivo de configuración de raspado de Prometheus. Si el valor de este campo comienza con `env:`, el contenido del archivo de configuración de raspado de Prometheus se recuperará de la variable de entorno del contenedor. No cambie este campo.
+ **ecs\$1service\$1discovery**: es la sección en la que se especifica la configuración para la detección de servicios de Prometheus de Amazon ECS. Para obtener más información, consulte [Guía detallada para la detección automática en clústeres de Amazon ECS](ContainerInsights-Prometheus-Setup-autodiscovery-ecs.md).

  La sección `ecs_service_discovery` puede incluir los siguientes campos:
  + `sd_frequency` es la frecuencia para detectar a los exportadores de Prometheus. Especifique un número y un sufijo de unidad. Por ejemplo, `1m` para una vez por minuto o `30s` para una vez cada 30 segundos. Los sufijos de unidad válidos son `ns`, `us`, `ms`, `s`, `m` y `h`.

    Este campo es opcional. El valor predeterminado es 60 segundos (1 minuto).
  + `sd_target_cluster` es el nombre de clúster de Amazon ECS de destino para la detección automática. Este campo es opcional. El valor predeterminado es el nombre del clúster de Amazon ECS donde está instalado el agente de CloudWatch. 
  + `sd_cluster_region` es la Región del clúster de Amazon ECS de destino. Este campo es opcional. El valor predeterminado es la Región del clúster de Amazon ECS donde está instalado el agente de CloudWatch.
  + `sd_result_file` es la ruta del archivo YAML para los resultados de destino de Prometheus. La configuración de raspado de Prometheus hará referencia a este archivo.
  + `docker_label` es una sección opcional que se puede utilizar para especificar la configuración para la detección de servicios basada en etiquetas docker. Si omite esta sección, no se utiliza la detección basada en etiquetas docker. Esta sección puede incluir los siguientes campos:
    + `sd_port_label` es el nombre de etiqueta docker del contenedor que especifica el puerto del contenedor para las métricas de Prometheus. El valor predeterminado es `ECS_PROMETHEUS_EXPORTER_PORT`. Si el contenedor no tiene esta etiqueta docker, el agente de CloudWatch lo omitirá.
    + `sd_metrics_path_label` es el nombre de etiqueta docker del contenedor que especifica la ruta de métricas de Prometheus. El valor predeterminado es `ECS_PROMETHEUS_METRICS_PATH`. Si el contenedor no tiene esta etiqueta docker, el agente asume la ruta predeterminada `/metrics`.
    + `sd_job_name_label` es el nombre de etiqueta docker del contenedor que especifica el nombre del trabajo de raspado de Prometheus. El valor predeterminado es `job`. Si el contenedor no tiene esta etiqueta docker, el agente de CloudWatch utiliza el nombre del trabajo en la configuración de raspado de Prometheus.
  + `task_definition_list` es una sección opcional que se puede utilizar para especificar la configuración de la detección de servicios basada en definiciones de tareas. Si omite esta sección, no se utiliza la detección basada en definiciones de tareas. Esta sección puede incluir los siguientes campos:
    + `sd_task_definition_arn_pattern` es el patrón que se utiliza para especificar las definiciones de tareas de Amazon ECS que se van a detectar. Esta es una expresión regular.
    + `sd_metrics_ports` enumera el containerPort para las métricas de Prometheus. Separe los containerPorts con punto y coma.
    + `sd_container_name_pattern` especifica los nombres de contenedor de tareas de Amazon ECS. Esta es una expresión regular.
    + `sd_metrics_path` especifica la ruta de la métrica de Prometheus. Si omite esto, el agente asume la ruta de acceso predeterminada de las `/metrics`
    + `sd_job_name` especifica el nombre del trabajo de raspado de Prometheus. Si omite este campo, el agente de CloudWatch utilizará el nombre de trabajo en la configuración de raspado de Prometheus.
+ **metric\$1declaration**: son secciones que especifican la matriz de registros con formato de métrica integrada que se van a generar. Hay secciones `metric_declaration` para cada fuente de Prometheus desde las que el agente de CloudWatch importa de forma predeterminada. Cada una de estas secciones incluye los siguientes campos:
  + `label_matcher` es una expresión regular que verifica el valor de las etiquetas que aparecen en `source_labels`. Las métricas que concuerdan se pueden incorporar al formato de métrica integrada que se envía a CloudWatch. 

    Si tiene varias etiquetas especificadas en `source_labels`, se recomienda que evite el uso de los caracteres `^` o `$` en la expresión regular para `label_matcher`.
  + `source_labels` especifica el valor de las etiquetas que se comprueban con `label_matcher`.
  + `label_separator` especifica el separador que se utilizará en la línea ` label_matcher` si se especifican múltiples `source_labels`. El valor predeterminado es `;`. Puede ver este valor predeterminado utilizado en la línea `label_matcher` en el siguiente ejemplo.
  + `metric_selectors` es una expresión regular que especifica las métricas que se van a recopilar y enviar a CloudWatch.
  + `dimensions` es la lista de etiquetas que se van a utilizar como dimensiones de CloudWatch en cada métrica seleccionada.

Consulte el siguiente ejemplo, `metric_declaration`.

```
"metric_declaration": [
  {
     "source_labels":[ "Service", "Namespace"],
     "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system",
     "dimensions":[
        ["Service", "Namespace"]
     ],
     "metric_selectors":[
        "^coredns_dns_request_type_count_total$"
     ]
  }
]
```

En este ejemplo se configura una sección de formato de métricas integradas para que se envíe como evento de registro si se cumplen las condiciones siguientes:
+ El valor de `Service` contiene `node-exporter` o `kube-dns`.
+ El valor de `Namespace` es `kube-system`.
+ La métrica de Prometheus `coredns_dns_request_type_count_total` contiene ambas etiquetas, `Service` y `Namespace`.

El evento de registro que se envía incluye la siguiente sección resaltada:

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"coredns_dns_request_type_count_total"
            }
         ],
         "Dimensions":[
            [
               "Namespace",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "Namespace":"kube-system",
   "Service":"kube-dns",
   "coredns_dns_request_type_count_total":2562,
   "eks_amazonaws_com_component":"kube-dns",
   "instance":"192.168.61.254:9153",
   "job":"kubernetes-service-endpoints",
   ...
}
```

## Tutorial para agregar un destino de raspado nuevo de Prometheus: métricas del servidor de la API de Prometheus
<a name="ContainerInsights-Prometheus-Setup-new-exporters"></a>

El servidor de la API de Kubernetes expone métricas de Prometheus en los puntos de enlace de forma predeterminada. El ejemplo oficial de la configuración de extracción del servidor de la API de Kubernetes está disponible en [Github](https://github.com/prometheus/prometheus/blob/main/documentation/examples/prometheus-kubernetes.yml).

El siguiente tutorial muestra cómo se realizan los siguientes pasos para comenzar a importar métricas del servidor de la API de Kubernetes a CloudWatch:
+ Agregue la configuración de raspado de Prometheus para el servidor de la API de Kubernetes al archivo YAML del agente de CloudWatch.
+ Configuración de las definiciones de métricas del formato de métrica integrada en el archivo YAML del agente de CloudWatch.
+ (Opcional) Creación de un panel de CloudWatch para las métricas del servidor de la API de Kubernetes.

**nota**  
El servidor de la API de Kubernetes expone métricas de medidor, contador, histograma y resumen. En esta versión de compatibilidad con métricas de Prometheus, CloudWatch importa solo las métricas con tipos de medidor, contador y de resumen.

**Para comenzar a recopilar métricas del servidor de la API de Kubernetes de Prometheus en CloudWatch**

1. Descargue la última versión del archivo `prometheus-eks.yaml`, `prometheus-eks-fargate.yaml` o `prometheus-k8s.yaml` con uno de los siguientes comandos.

   En el caso de un clúster de Amazon EKS con el tipo de lanzamiento de EC2, ingrese el siguiente comando:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   En el caso de un clúster de Amazon EKS con el tipo de lanzamiento de Fargate, ingrese el siguiente comando:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml
   ```

   En los clústeres de Kubernetes que se ejecuten en una instancia de Amazon EC2, ingrese el siguiente comando:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
   ```

1. Abra el archivo con un editor de texto, busque la sección `prometheus-config` y agregue la siguiente sección dentro de esa sección. Para guardar los cambios:

   ```
       # Scrape config for API servers
       - job_name: 'kubernetes-apiservers'
         kubernetes_sd_configs:
           - role: endpoints
             namespaces:
               names:
                 - default
         scheme: https
         tls_config:
           ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
           insecure_skip_verify: true
         bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
         relabel_configs:
         - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
           action: keep
           regex: kubernetes;https
         - action: replace
           source_labels:
           - __meta_kubernetes_namespace
           target_label: Namespace
         - action: replace
           source_labels:
           - __meta_kubernetes_service_name
           target_label: Service
   ```

1. Con el archivo YAML abierto en el editor de texto, busque la sección `cwagentconfig.json`. Agregue la subsección siguiente y guarde los cambios. Esta sección coloca las métricas de servicio de la API en la lista de permitidos del agente de CloudWatch. Se agregan tres tipos de métricas de servidor de la API a la lista de permitidos:
   + Recuentos de objetos etcd
   + Métricas del controlador de registro del servidor de la API
   + Métricas de solicitud del servidor de la API

   ```
   {"source_labels": ["job", "resource"],
     "label_matcher": "^kubernetes-apiservers;(services|daemonsets.apps|deployments.apps|configmaps|endpoints|secrets|serviceaccounts|replicasets.apps)",
     "dimensions": [["ClusterName","Service","resource"]],
     "metric_selectors": [
     "^etcd_object_counts$"
     ]
   },
   {"source_labels": ["job", "name"],
      "label_matcher": "^kubernetes-apiservers;APIServiceRegistrationController$",
      "dimensions": [["ClusterName","Service","name"]],
      "metric_selectors": [
      "^workqueue_depth$",
      "^workqueue_adds_total$",
      "^workqueue_retries_total$"
     ]
   },
   {"source_labels": ["job","code"],
     "label_matcher": "^kubernetes-apiservers;2[0-9]{2}$",
     "dimensions": [["ClusterName","Service","code"]],
     "metric_selectors": [
      "^apiserver_request_total$"
     ]
   },
   {"source_labels": ["job"],
     "label_matcher": "^kubernetes-apiservers",
     "dimensions": [["ClusterName","Service"]],
     "metric_selectors": [
     "^apiserver_request_total$"
     ]
   },
   ```

1. Si el agente de CloudWatch compatible con Prometheus ya está implementado en el clúster, debe eliminarlo con el siguiente comando:

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   ```

1. Implemente el agente de CloudWatch con la configuración actualizada mediante uno de los siguientes comandos. Para un clúster de Amazon EKS con el tipo de lanzamiento de EC2, ingrese:

   ```
   kubectl apply -f prometheus-eks.yaml
   ```

   Para un clúster de Amazon EKS con el tipo de lanzamiento de Fargate, ingrese el siguiente comando. Reemplace *MyCluster* y *Región* con valores que concuerden con la implementación.

   ```
   cat prometheus-eks-fargate.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

   En los clústeres de Kubernetes, ingrese el siguiente comando: Reemplace *MyCluster* y *Región* con valores que concuerden con la implementación.

   ```
   cat prometheus-k8s.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

Una vez hecho esto, debería ver un nuevo flujo de registros denominado **kubernetes-apiservers** en el grupo de registros **/aws/containerinsights/*nombre\$1clúster*/prometheus**. Esta secuencia de registros debe incluir eventos de registro con una definición de formato de métricas integradas como la siguiente:

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"apiserver_request_total"
            }
         ],
         "Dimensions":[
            [
               "ClusterName",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "ClusterName":"my-cluster-name",
   "Namespace":"default",
   "Service":"kubernetes",
   "Timestamp":"1592267020339",
   "Version":"0",
   "apiserver_request_count":0,
   "apiserver_request_total":0,
   "code":"0",
   "component":"apiserver",
   "contentType":"application/json",
   "instance":"192.0.2.0:443",
   "job":"kubernetes-apiservers",
   "prom_metric_type":"counter",
   "resource":"pods",
   "scope":"namespace",
   "verb":"WATCH",
   "version":"v1"
}
```

Puede visualizar las métricas en la consola de CloudWatch, en el espacio de nombres **ContainerInsights/Prometheus**. También tiene la opción de crear un panel de CloudWatch para las métricas del servidor de la API de Kubernetes de Prometheus.

### (Opcional) Creación de un panel para las métricas del servidor de la API de Kubernetes.
<a name="ContainerInsights-Prometheus-Setup-KPI-dashboard"></a>

Para ver las métricas del servidor de la API de Kubernetes en el panel, primero debe haber completado los pasos de las secciones anteriores para comenzar a recopilar estas métricas en CloudWatch.

**Para crear un panel para las métricas del servidor de la API de Kubernetes**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Asegúrese de tener seleccionada la región de AWS correcta.

1. En el panel de navegación, seleccione **Paneles**.

1. Elija **Crear un panel**. Escriba el nombre del nuevo panel y elija **Crear un panel**.

1. En **Añadir a este panel**, elija **Cancelar**.

1. Elija **Actions (Acciones)**, **View/edit source (Ver/editar código fuente)**.

1. Descargue el siguiente archivo JSON: [Kubernetes API Dashboard source](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/kubernetes_api_server/cw_dashboard_kubernetes_api_server.json).

1. Abra el archivo JSON que descargó con un editor de texto y realice los siguientes cambios:
   + Reemplace todas las cadenas `{{YOUR_CLUSTER_NAME}}` por el nombre exacto del clúster. Tenga cuidado de no agregar espacios en blanco antes o después del texto.
   + Reemplace todas las cadenas `{{YOUR_AWS_REGION}}` por el nombre de la región donde se recopilan las métricas. Por ejemplo: . `us-west-2`. Asegúrese de no agregar espacios en blanco antes o después del texto.

1. Copie todo el blob JSON y péguelo en el cuadro de texto de la consola de CloudWatch de modo que sustituya lo que ya se encuentra en el cuadro.

1. Elija **Actualizar** y **Guardar el panel**.

# (Opcional) Configure las cargas de trabajo de muestra de Amazon EKS en contenedores para realizar pruebas con las métricas de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads"></a>

Para probar la compatibilidad de las métricas de Prometheus en Información de contenedores de CloudWatch, puede configurar una o varias de las siguientes cargas de trabajo en contenedores. El agente de CloudWatch compatible con Prometheus recopila automáticamente las métricas de cada una de estas cargas de trabajo. Para ver las métricas que se recopilan de forma predeterminada, consulte [Métricas de Prometheus que el agente de CloudWatch recopila](ContainerInsights-Prometheus-metrics.md).

Para poder instalar cualquiera de estas cargas de trabajo, debe instalar Helm 3.x con los siguientes comandos:

```
brew install helm
```

Para obtener más información, consulte [Helm](https://helm.sh).

**Topics**
+ [Configuración de las cargas de trabajo de muestra de AWS App Mesh para Amazon EKS y Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-appmesh.md)
+ [Configure NGINX con tráfico de muestra en Amazon EKS y Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-nginx.md)
+ [Configure memcached con un exportador de métricas en Amazon EKS y Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-memcached.md)
+ [Configure la carga de trabajo de muestra de Java/JMX en Amazon EKS y Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md)
+ [Configure HAProxy con un exportador de métricas en Amazon EKS y Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-haproxy.md)
+ [Tutorial para agregar un nuevo destino de raspado de Prometheus: Redis OSS en clústeres de Amazon EKS y de Kubernetes](ContainerInsights-Prometheus-Setup-redis-eks.md)

# Configuración de las cargas de trabajo de muestra de AWS App Mesh para Amazon EKS y Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh"></a>

La compatibilidad de Prometheus con Información de contenedores de CloudWatch es compatible con AWS App Mesh. En las secciones siguientes se explica cómo se configura App Mesh.

**Topics**
+ [Configuración de la carga de trabajo de muestra de AWS App Mesh en un clúster de Amazon EKS con el tipo de lanzamiento de EC2 o en un clúster de Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-appmesh-EKS.md)
+ [Configuración de la carga de trabajo de muestra de AWS App Mesh en un clúster de Amazon EKS con el tipo de lanzamiento de Fargate](ContainerInsights-Prometheus-Sample-Workloads-appmesh-Fargate.md)

# Configuración de la carga de trabajo de muestra de AWS App Mesh en un clúster de Amazon EKS con el tipo de lanzamiento de EC2 o en un clúster de Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-EKS"></a>

Siga estas instrucciones si está configurando App Mesh en un clúster que ejecute Amazon EKS con el tipo de lanzamiento de EC2 o en un clúster de Kubernetes.

## Configure los permisos de IAM
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-iam"></a>

Debe agregar la política **AWSAppMeshFullAccess** al rol de IAM del grupo de nodos de Amazon EKS o Kubernetes. En Amazon EKS, el nombre de este grupo de nodos es similar a `eksctl-integ-test-eks-prometheus-NodeInstanceRole-ABCDEFHIJKL`. En Kubernetes, podría ser parecido a `nodes.integ-test-kops-prometheus.k8s.local`.

## Instale App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-install"></a>

Para instalar el controlador App Mesh Kubernetes, siga las instrucciones que se indican en [App Mesh Controller](https://github.com/aws/eks-charts/tree/master/stable/appmesh-controller#app-mesh-controller) (Controlador de App Mesh).

## Instale una aplicación de muestra
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-application"></a>

[aws-app-mesh-examples](https://github.com/aws/aws-app-mesh-examples) contiene varias explicaciones de Kubernetes App Mesh. Para este tutorial, se instala una aplicación de color de muestra en la que se puede ver cómo las rutas http pueden utilizar cabeceras para hacer concordar las peticiones entrantes.

**Para utilizar una aplicación de ejemplo App Mesh para probar Información de contenedores**

1. Instale la aplicación con estas instrucciones: [https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-http-headers](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-http-headers). 

1. Lance un pod curler para generar tráfico:

   ```
   kubectl -n default run -it curler --image=tutum/curl /bin/bash
   ```

1. Utilice el comando curl con diferentes puntos de enlace al cambiar las cabeceras HTTP. Ejecute el comando curl varias veces, como se muestra:

   ```
   curl -H "color_header: blue" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   
   curl -H "color_header: red" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   
   curl -H "color_header: yellow" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   ```

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En la región de AWS en la que se está ejecutando el clúster, elija **Metrics** (Métricas) en el panel de navegación. Las métricas están en el espacio de nombres **ContainerInsights/Prometheus**.

1. Para ver los eventos de CloudWatch Logs, elija **Log groups** (grupos de registros) en el panel de navegación. Los eventos están en el grupo de registro ` /aws/containerinsights/your_cluster_name/prometheus ` en el flujo de registros `kubernetes-pod-appmesh-envoy`.

## Eliminación del entorno de prueba de App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-delete"></a>

Cuando haya terminado de usar App Mesh y la aplicación de muestra, utilice los siguientes comandos para eliminar los recursos innecesarios. Elimine la aplicación de muestra con el siguiente comando:

```
cd aws-app-mesh-examples/walkthroughs/howto-k8s-http-headers/
kubectl delete -f _output/manifest.yaml
```

Elimine el controlador de App Mesh con el siguiente comando:

```
helm delete appmesh-controller -n appmesh-system
```

# Configuración de la carga de trabajo de muestra de AWS App Mesh en un clúster de Amazon EKS con el tipo de lanzamiento de Fargate
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-Fargate"></a>

Siga estas instrucciones si está configurando App Mesh en un clúster que ejecute Amazon EKS con el tipo de lanzamiento de Fargate.

## Configure los permisos de IAM
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh--fargate-iam"></a>

Para configurar los permisos de IAM, ingrese el siguiente comando. Sustituya *MyCluster* por el nombre del clúster.

```
eksctl create iamserviceaccount --cluster MyCluster \
 --namespace howto-k8s-fargate \
 --name appmesh-pod \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapDiscoverInstanceAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess \
 --override-existing-serviceaccounts \
 --approve
```

## Instale App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-install"></a>

Para instalar el controlador de App Mesh Kubernetes, siga las instrucciones que se indican en [App Mesh Controller](https://github.com/aws/eks-charts/tree/master/stable/appmesh-controller#app-mesh-controller) (Controlador de App Mesh). Asegúrese de seguir las instrucciones de Amazon EKS con el tipo de lanzamiento de Fargate.

## Instale una aplicación de muestra
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-application"></a>

[aws-app-mesh-ejemplos](https://github.com/aws/aws-app-mesh-examples) contiene varias explicaciones de Kubernetes App Mesh. Para este tutorial, se instala una aplicación de color de muestra que funcione para clústeres de Amazon EKS con el tipo de lanzamiento de Fargate.

**Para utilizar una aplicación de muestra App Mesh para probar Información de contenedores**

1. Instale la aplicación con estas instrucciones: [https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-fargate](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-fargate). 

   Esas instrucciones suponen que está creando un nuevo clúster con el perfil de Fargate correcto. Si desea utilizar un clúster de Amazon EKS que ya haya configurado, puede utilizar los siguientes comandos para configurar dicho clúster para esta demostración. Sustituya *MyCluster* por el nombre del clúster.

   ```
   eksctl create iamserviceaccount --cluster MyCluster \
    --namespace howto-k8s-fargate \
    --name appmesh-pod \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapDiscoverInstanceAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess \
    --override-existing-serviceaccounts \
    --approve
   ```

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --namespace howto-k8s-fargate --name howto-k8s-fargate
   ```

1. Reenvíe el despliegue de la aplicación frontal:

   ```
   kubectl -n howto-k8s-fargate port-forward deployment/front 8080:8080
   ```

1. Utilice el comando curl en la aplicación frontal:

   ```
   while true; do  curl -s http://localhost:8080/color; sleep 0.1; echo ; done
   ```

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En la región de AWS en la que se está ejecutando el clúster, elija **Metrics** (Métricas) en el panel de navegación. Las métricas están en el espacio de nombres **ContainerInsights/Prometheus**.

1. Para ver los eventos de CloudWatch Logs, elija **Log groups** (grupos de registros) en el panel de navegación. Los eventos están en el grupo de registro ` /aws/containerinsights/your_cluster_name/prometheus ` en el flujo de registros `kubernetes-pod-appmesh-envoy`.

## Eliminación del entorno de prueba de App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-delete"></a>

Cuando haya terminado de usar App Mesh y la aplicación de muestra, utilice los siguientes comandos para eliminar los recursos innecesarios. Elimine la aplicación de muestra con el siguiente comando:

```
cd aws-app-mesh-examples/walkthroughs/howto-k8s-fargate/
kubectl delete -f _output/manifest.yaml
```

Elimine el controlador de App Mesh con el siguiente comando:

```
helm delete appmesh-controller -n appmesh-system
```

# Configure NGINX con tráfico de muestra en Amazon EKS y Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-nginx"></a>

NGINX es un servidor web que también se puede utilizar como balanceador de carga y como proxy inverso. Para obtener más información sobre cómo Kubernetes utiliza NGINX para las entradas, consulte [kubernetes/ingress-nginx](https://github.com/kubernetes/ingress-nginx).

**Para instalar Ingress-NGINX con un servicio de tráfico de ejemplo para probar la compatibilidad de Información de contenedores de Prometheus**

1. Ingrese el siguiente comando para agregar el repositorio de nginx de acceso de Helm.

   ```
   helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
   ```

1. Ejecute los comandos siguientes:

   ```
   kubectl create namespace nginx-ingress-sample
   
   helm install my-nginx ingress-nginx/ingress-nginx \
   --namespace nginx-ingress-sample \
   --set controller.metrics.enabled=true \
   --set-string controller.metrics.service.annotations."prometheus\.io/port"="10254" \
   --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"
   ```

1. Compruebe si los servicios se iniciaron correctamente con el siguiente comando:

   ```
   kubectl get service -n nginx-ingress-sample
   ```

   Deberían aparecer varias columnas, como la columna `EXTERNAL-IP`.

1. Defina una variable `EXTERNAL-IP` con el valor de la columna `EXTERNAL-IP` que aparece en la fila del controlador de entrada de NGINX.

   ```
   EXTERNAL_IP=your-nginx-controller-external-ip
   ```

1. Ponga en marcha cierto tráfico de NGINX de ejemplo con el siguiente comando. 

   ```
   SAMPLE_TRAFFIC_NAMESPACE=nginx-sample-traffic
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/nginx-traffic/nginx-traffic-sample.yaml | 
   sed "s/{{external_ip}}/$EXTERNAL_IP/g" | 
   sed "s/{{namespace}}/$SAMPLE_TRAFFIC_NAMESPACE/g" | 
   kubectl apply -f -
   ```

1. Utilice el siguiente comando para confirmar que los tres pods tienen el estado `Running`.

   ```
   kubectl get pod -n $SAMPLE_TRAFFIC_NAMESPACE
   ```

   Si se están ejecutando, enseguida aparecerán las métricas en el espacio de nombres **ContainerInsights/Prometheus** .

**Para desinstalar NGINX y la aplicación de tráfico de ejemplo**

1. Elimine el servicio de tráfico de ejemplo con el siguiente comando:

   ```
   kubectl delete namespace $SAMPLE_TRAFFIC_NAMESPACE
   ```

1. Elimine la salida de NGINX por el nombre de versión de Helm. 

   ```
   helm uninstall my-nginx --namespace nginx-ingress-sample
   kubectl delete namespace nginx-ingress-sample
   ```

# Configure memcached con un exportador de métricas en Amazon EKS y Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-memcached"></a>

Memcached es un sistema de almacenamiento en caché de objetos de memoria de código abierto. Para obtener más información, consulte [What is Memcached?](https://www.memcached.org).

Si está ejecutando memcached en un clúster con el tipo de lanzamiento de Fargate, debe configurar un perfil de Fargate antes de seguir los pasos de este procedimiento. Para configurar el perfil, ingrese el siguiente comando: Sustituya *MyCluster* por el nombre del clúster.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace memcached-sample --name memcached-sample
```

**Si desea instalar Memcached con un exportador de métricas para probar la compatibilidad de Información de contenedores de Prometheus**

1. Utilice el siguiente comando para agregar el repositorio.

   ```
   helm repo add bitnami https://charts.bitnami.com/bitnami
   ```

1. Utilice el siguiente comando para crear un nuevo espacio de nombres:

   ```
   kubectl create namespace memcached-sample
   ```

1. Utilice el siguiente comando para instalar Memcached:

   ```
   helm install my-memcached bitnami/memcached --namespace memcached-sample \
   --set metrics.enabled=true \
   --set-string serviceAnnotations.prometheus\\.io/port="9150" \
   --set-string serviceAnnotations.prometheus\\.io/scrape="true"
   ```

1. Utilice el siguiente comando para confirmar la anotación del servicio en ejecución:

   ```
   kubectl describe service my-memcached-metrics -n memcached-sample
   ```

   Debería ver estas dos anotaciones:

   ```
   Annotations:   prometheus.io/port: 9150
                  prometheus.io/scrape: true
   ```

**Para desinstalar Memcached**
+ Ejecute los comandos siguientes:

  ```
  helm uninstall my-memcached --namespace memcached-sample
  kubectl delete namespace memcached-sample
  ```

# Configure la carga de trabajo de muestra de Java/JMX en Amazon EKS y Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx"></a>

JMX Exporter es un exportador oficial de Prometheus que puede extraer y exponer mBeans de JMX como métricas de Prometheus. Para obtener más información, consulte [prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter).

Información de contenedores puede recopilar métricas de Prometheus predefinidas de Java Virtual Machine (JVM), Java y Tomcat (Catalina) usando JMX Exporter.

## Configuración predeterminada de raspado de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-default"></a>

De forma predeterminada, el agente de CloudWatch compatible con Prometheus raspa las métricas de Java/JMX de Prometheus de `http://CLUSTER_IP:9404/metrics` en cada pod en un clúster de Amazon EKS o de Kubernetes. Esto se realiza por la detección del `role: pod` de Prometheus `kubernetes_sd_config`. 9404 es el puerto predeterminado que Prometheus asignó para JMX Exporter. Para obtener más información acerca de la detección `role: pod`, consulte [pod](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#pod). Puede configurar JMX Exporter para exponer las métricas en un puerto o ruta (metrics\$1path) diferente. Si cambia el puerto o la ruta, actualice la scrape\$1config de jmx predeterminada en el mapa de configuración del agente de CloudWatch. Ejecute el siguiente comando para obtener la configuración de Prometheus del agente de CloudWatch actual:

```
kubectl describe cm prometheus-config -n amazon-cloudwatch
```

Los campos que se van a modificar son `/metrics` y `regex: '.*:9404$'`, que aparecen resaltados en el siguiente ejemplo.

```
job_name: 'kubernetes-jmx-pod'
sample_limit: 10000
metrics_path: /metrics
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__address__]
  action: keep
  regex: '.*:9404$'
- action: replace
  regex: (.+)
  source_labels:
```

## Otra configuración de raspado de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-other"></a>

Si expone la aplicación que se ejecuta en un conjunto de pods con exportadores de Java/JMX Prometheus por un servicio Kubernetes, también puede cambiar el uso de la detección de `role: service` o la detección del `role: endpoint` de Prometheus `kubernetes_sd_config`. Para obtener más información sobre estos métodos de detección, consulte [service](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#service) (servicio), [endpoints](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#endpoints) (puntos de enlace) y [<kubernetes\$1sd\$1config>.](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config). 

Estos dos modos de detección de servicios proporcionan más metaetiquetas que podrían ser útiles para crear las dimensiones de métricas de CloudWatch. Por ejemplo, puede volver a etiquetar `__meta_kubernetes_service_name` a `Service` e incluirla en la dimensión de las métricas. Para obtener más información sobre cómo se personalizan las métricas de CloudWatch y las dimensiones, consulte [Configuración del agente de CloudWatch para Prometheus](ContainerInsights-Prometheus-Setup-configure-ECS.md#ContainerInsights-Prometheus-Setup-cw-agent-config).

## Imagen de Docker con JMX Exporter
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-docker"></a>

A continuación, cree una imagen de Docker. En las siguientes secciones, se incluyen dos Dockerfiles de muestra.

Cuando haya creado la imagen, cárguela en Amazon EKS o Kubernetes y ejecute el siguiente comando para verificar que `JMX_EXPORTER` ha expuesto las métricas de Prometheus en el puerto 9404. Sustituya *\$1JAR\$1SAMPLE\$1TRAFFIC\$1POD* por el nombre del pod en ejecución y *\$1JAR\$1SAMPLE\$1TRAFFIC\$1NAMESPACE* por el espacio de nombres de la aplicación. 

Si está ejecutando JMX Exporter en un clúster con el tipo de lanzamiento de Fargate, también debe configurar un perfil de Fargate antes de seguir los pasos de este procedimiento. Para configurar el perfil, ingrese el comando siguiente: Sustituya *MyCluster* por el nombre del clúster.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace $JAR_SAMPLE_TRAFFIC_NAMESPACE\
 --name $JAR_SAMPLE_TRAFFIC_NAMESPACE
```

```
kubectl exec $JAR_SAMPLE_TRAFFIC_POD -n $JARCAT_SAMPLE_TRAFFIC_NAMESPACE -- curl http://localhost:9404
```

## Ejemplo: Imagen de Apache Tomcat Docker con métricas de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-tomcat"></a>

De forma predeterminada, el servidor Apache Tomcat expone mBeans de JMX. Puede integrar JMX Exporter con Tomcat para que los mBeans de JMX se expongan como métricas de Prometheus. En el siguiente Dockerfile de ejemplo, se indican los pasos para crear una imagen de prueba: 

```
# From Tomcat 9.0 JDK8 OpenJDK 
FROM tomcat:9.0-jdk8-openjdk 

RUN mkdir -p /opt/jmx_exporter

COPY ./jmx_prometheus_javaagent-0.12.0.jar /opt/jmx_exporter
COPY ./config.yaml /opt/jmx_exporter
COPY ./setenv.sh /usr/local/tomcat/bin 
COPY your web application.war /usr/local/tomcat/webapps/

RUN chmod  o+x /usr/local/tomcat/bin/setenv.sh

ENTRYPOINT ["catalina.sh", "run"]
```

En la siguiente lista, se explican las cuatro líneas `COPY` de este Dockerfile.
+ Descargue el último archivo jar de JMX Exporter de [https://github.com/prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter).
+ `config.yaml` es el archivo de configuración de JMX Exporter. Para obtener más información, consulte [https://github.com/prometheus/jmx\$1exporter\$1Configuration](https://github.com/prometheus/jmx_exporter#Configuration ).

  Este es un archivo de configuración de ejemplo para Java y Tomcat:

  ```
  lowercaseOutputName: true
  lowercaseOutputLabelNames: true
  
  rules:
  - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
    name: java_lang_OperatingSystem_$1
    type: GAUGE
  
  - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
    name: java_lang_threading_$1
    type: GAUGE
  
  - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
    name: catalina_globalrequestprocessor_$3_total
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina global $3
    type: COUNTER
  
  - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
    name: catalina_servlet_$3_total
    labels:
      module: "$1"
      servlet: "$2"
    help: Catalina servlet $3 total
    type: COUNTER
  
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
    name: catalina_threadpool_$3
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina threadpool $3
    type: GAUGE
  
  - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
    name: catalina_session_$3_total
    labels:
      context: "$2"
      host: "$1"
    help: Catalina session $3 total
    type: COUNTER
  
  - pattern: ".*"
  ```
+ `setenv.sh` es un script de startup de Tomcat que abre JMX Exporter junto con Tomcat y expone las métricas de Prometheus en el puerto 9404 de localhost. También proporciona a JMX Exporter la ruta del archivo `config.yaml`.

  ```
  $ cat setenv.sh 
  export JAVA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/jmx_exporter/config.yaml $JAVA_OPTS"
  ```
+ application.war es el archivo de aplicación web `war` que se va a cargar en Tomcat.

Cree una imagen de Docker con esta configuración y cárguela en un repositorio de imágenes.

## Ejemplo: Imagen de Docker de una aplicación Jar de Java con métricas de Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-jar"></a>

En el siguiente Dockerfile de muestra, se indican los pasos para crear una imagen de prueba: 

```
# Alpine Linux with OpenJDK JRE
FROM openjdk:8-jre-alpine

RUN mkdir -p /opt/jmx_exporter

COPY ./jmx_prometheus_javaagent-0.12.0.jar /opt/jmx_exporter
COPY ./SampleJavaApplication-1.0-SNAPSHOT.jar /opt/jmx_exporter
COPY ./start_exporter_example.sh /opt/jmx_exporter
COPY ./config.yaml /opt/jmx_exporter

RUN chmod -R o+x /opt/jmx_exporter
RUN apk add curl

ENTRYPOINT exec /opt/jmx_exporter/start_exporter_example.sh
```

En la siguiente lista, se explican las cuatro líneas `COPY` de este Dockerfile.
+ Descargue el último archivo jar de JMX Exporter de [https://github.com/prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter).
+ `config.yaml` es el archivo de configuración de JMX Exporter. Para obtener más información, consulte [https://github.com/prometheus/jmx\$1exporter\$1Configuration](https://github.com/prometheus/jmx_exporter#Configuration ).

  Este es un archivo de configuración de ejemplo para Java y Tomcat:

  ```
  lowercaseOutputName: true
  lowercaseOutputLabelNames: true
  
  rules:
  - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
    name: java_lang_OperatingSystem_$1
    type: GAUGE
  
  - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
    name: java_lang_threading_$1
    type: GAUGE
  
  - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
    name: catalina_globalrequestprocessor_$3_total
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina global $3
    type: COUNTER
  
  - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
    name: catalina_servlet_$3_total
    labels:
      module: "$1"
      servlet: "$2"
    help: Catalina servlet $3 total
    type: COUNTER
  
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
    name: catalina_threadpool_$3
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina threadpool $3
    type: GAUGE
  
  - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
    name: catalina_session_$3_total
    labels:
      context: "$2"
      host: "$1"
    help: Catalina session $3 total
    type: COUNTER
  
  - pattern: ".*"
  ```
+ `start_exporter_example.sh` es el script para iniciar la aplicación JAR con las métricas de Prometheus exportadas. También proporciona a JMX Exporter la ruta del archivo `config.yaml`.

  ```
  $ cat start_exporter_example.sh 
  java -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/jmx_exporter/config.yaml -cp  /opt/jmx_exporter/SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App
  ```
+ SampleJavaApplication-1.0-SNAPSHOT.jar es el archivo jar de la aplicación Java de ejemplo. Sustitúyalo por la aplicación Java que desee supervisar.

Cree una imagen de Docker con esta configuración y cárguela en un repositorio de imágenes.

# Configure HAProxy con un exportador de métricas en Amazon EKS y Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-haproxy"></a>

HAProxy es una aplicación proxy de código abierto. Para obtener más información, consulte [HAProxy](https://www.haproxy.org).

Si está ejecutando HAProxy en un clúster con el tipo de lanzamiento de Fargate, debe configurar un perfil de Fargate antes de seguir los pasos de este procedimiento. Para configurar el perfil, ingrese el siguiente comando: Sustituya *MyCluster* por el nombre del clúster.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace haproxy-ingress-sample --name haproxy-ingress-sample
```

**Si desea instalar HAProxy con un exportador de métricas para probar la compatibilidad de Información de contenedores de Prometheus**

1. Ejecute el siguiente comando para agregar el repositorio de incubación de Helm:

   ```
   helm repo add haproxy-ingress https://haproxy-ingress.github.io/charts
   ```

1. Utilice el siguiente comando para crear un nuevo espacio de nombres:

   ```
   kubectl create namespace haproxy-ingress-sample
   ```

1. Ejecute los siguientes comandos para instalar HAProxy:

   ```
   helm install haproxy haproxy-ingress/haproxy-ingress \
   --namespace haproxy-ingress-sample \
   --set defaultBackend.enabled=true \
   --set controller.stats.enabled=true \
   --set controller.metrics.enabled=true \
   --set-string controller.metrics.service.annotations."prometheus\.io/port"="9101" \
   --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"
   ```

1. Ejecute el siguiente comando para confirmar la anotación del servicio:

   ```
   kubectl describe service haproxy-haproxy-ingress-metrics -n haproxy-ingress-sample
   ```

   Debería ver las siguientes anotaciones.

   ```
   Annotations:   prometheus.io/port: 9101
                  prometheus.io/scrape: true
   ```

**Para desinstalar HAProxy**
+ Ejecute los comandos siguientes:

  ```
  helm uninstall haproxy --namespace haproxy-ingress-sample
  kubectl delete namespace haproxy-ingress-sample
  ```

# Tutorial para agregar un nuevo destino de raspado de Prometheus: Redis OSS en clústeres de Amazon EKS y de Kubernetes
<a name="ContainerInsights-Prometheus-Setup-redis-eks"></a>

Este tutorial proporciona una introducción práctica para raspar las métricas de Prometheus de una aplicación de muestra de Redis OSS en Amazon EKS y Kubernetes. Redis OSS (https://redis.io/) es un almacén de estructuras de datos en memoria de código abierto (con licencia BSD), utilizado como base de datos, caché y agente de mensajes. Para obtener más información, consulte [redis](https://redis.io/).

redis\$1exporter (con licencia MIT) se utiliza para exponer las métricas de Redis OSS Prometheus en el puerto especificado (predeterminado: 0.0.0.0:9121). Para obtener más información, consulte [redis\$1exporter](https://github.com/oliver006/redis_exporter).

En este tutorial se utilizan las imágenes de Docker en los siguientes dos repositorios de Docker Hub: 
+ [ redis](https://hub.docker.com/_/redis?tab=description)
+ [ redis\$1exporter](https://hub.docker.com/r/oliver006/redis_exporter)

**Para instalar una carga de trabajo de Redis OSS de muestra que exponga las métricas de Prometheus**

1. Establezca el espacio de nombres para la carga de trabajo de Redis OSS de muestra.

   ```
   REDIS_NAMESPACE=redis-sample
   ```

1. Si ejecuta Redis OSS en un clúster con el tipo de lanzamiento de Fargate, debe configurar un perfil de Fargate. Para configurar el perfil, ingrese el siguiente comando: Sustituya *MyCluster* por el nombre del clúster.

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
   ```

1. Ingrese el siguiente comando para instalar la carga de trabajo de Redis OSS de muestra.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml \
   | sed "s/{{namespace}}/$REDIS_NAMESPACE/g" \
   | kubectl apply -f -
   ```

1. La instalación incluye un servicio llamado `my-redis-metrics` que expone la métrica de Redis OSS Prometheus en el puerto 9121; ingrese el siguiente comando para obtener los detalles del servicio: 

   ```
   kubectl describe service/my-redis-metrics  -n $REDIS_NAMESPACE
   ```

   En la sección `Annotations` de los resultados, verá dos anotaciones que concuerdan con la configuración de raspado de Prometheus del agente de CloudWatch, para que pueda detectar automáticamente las cargas de trabajo:

   ```
   prometheus.io/port: 9121
   prometheus.io/scrape: true
   ```

   La configuración de raspado de Prometheus relacionada se encuentra en la sección `- job_name: kubernetes-service-endpoints`de `kubernetes-eks.yaml` o `kubernetes-k8s.yaml`.

**Para empezar a recopilar métricas de Redis OSS Prometheus en CloudWatch**

1. Descargue la última versión del archivo de `kubernetes-eks.yaml` o el archivo `kubernetes-k8s.yaml` con uno de los siguientes comandos. Para un clúster de Amazon EKS con el tipo de lanzamiento de EC2, ingrese este comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   Para un clúster de Amazon EKS con el tipo de lanzamiento de Fargate, ingrese este comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml
   ```

   En los clústeres de Kubernetes que se ejecuten en una instancia de Amazon EC2, ingrese el siguiente comando.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
   ```

1. Abra el archivo con un editor de texto y busque la sección `cwagentconfig.json`. Agregue la subsección siguiente y guarde los cambios. Asegúrese de seguir el patrón existente de sangría.

   ```
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName"]],
     "metric_selectors": [
       "^redis_net_(in|out)put_bytes_total$",
       "^redis_(expired|evicted)_keys_total$",
       "^redis_keyspace_(hits|misses)_total$",
       "^redis_memory_used_bytes$",
       "^redis_connected_clients$"
     ]
   },
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName","cmd"]],
     "metric_selectors": [
       "^redis_commands_total$"
     ]
   },
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName","db"]],
     "metric_selectors": [
       "^redis_db_keys$"
     ]
   },
   ```

   La sección que agregó coloca las métricas de Redis OSS en la lista de permitidos del agente de CloudWatch. Para obtener la lista de estas métricas, consulte la siguiente sección.

1. Si el agente de CloudWatch compatible con Prometheus ya está implementado en el clúster, debe eliminarlo con el siguiente comando:

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   ```

1. Implemente el agente de CloudWatch con la configuración actualizada con uno de los siguientes comandos. Reemplace *MyCluster* y la *Región* para que concuerde con la configuración.

   Para un clúster de Amazon EKS con el tipo de lanzamiento de EC2, ingrese este comando.

   ```
   kubectl apply -f prometheus-eks.yaml
   ```

   Para un clúster de Amazon EKS con el tipo de lanzamiento de Fargate, ingrese este comando.

   ```
   cat prometheus-eks-fargate.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

   Para un clúster de Kubernetes, escriba este comando:

   ```
   cat prometheus-k8s.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

## Visualización de las métricas de Redis OSS Prometheus
<a name="ContainerInsights-Prometheus-Setup-redis-eks-view"></a>

En este tutorial se envían las siguientes métricas al espacio de nombres **ContainerInsights/Prometheus** en CloudWatch. Puede utilizar la consola de CloudWatch para ver las métricas de ese espacio de nombres.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `redis_net_input_bytes_total` |  ClusterName, `Namespace`  | 
|  `redis_net_output_bytes_total` |  ClusterName, `Namespace`  | 
|  `redis_expired_keys_total` |  ClusterName, `Namespace`  | 
|  `redis_evicted_keys_total` |  ClusterName, `Namespace`  | 
|  `redis_keyspace_hits_total` |  ClusterName, `Namespace`  | 
|  `redis_keyspace_misses_total` |  ClusterName, `Namespace`  | 
|  `redis_memory_used_bytes` |  ClusterName, `Namespace`  | 
|  `redis_connected_clients` |  ClusterName, `Namespace`  | 
|  `redis_commands_total` |  ClusterName, `Namespace`, cmd  | 
|  `redis_db_keys` |  ClusterName, `Namespace`, db  | 

**nota**  
Los valores de la dimensión **cmd** pueden ser: `append`, `client`, `command`, `config`, `dbsize`, `flushall`, `get`, `incr`, `info`, `latency` o `slowlog`.  
Los valores de la dimensión **db** pueden ir de `db0` a `db15`. 

También puede crear un panel de CloudWatch para las métricas de Redis OSS Prometheus.

**Para crear un panel para las métricas de Redis OSS Prometheus**

1. Cree variables de entorno mediante el reemplazo de los siguientes valores para que concuerden con la implementación.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   REGION_NAME=your_metric_region_such_as_us-east-1
   CLUSTER_NAME=your_k8s_cluster_name_here
   NAMESPACE=your_redis_service_namespace_here
   ```

1. Ingrese el siguiente comando para crear el panel.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \
   ```

# Conversión del tipo de métrica de Prometheus realizada por el agente de CloudWatch
<a name="ContainerInsights-Prometheus-metrics-conversion"></a>

Las bibliotecas de cliente de Prometheus ofrecen cuatro tipos de métricas principales: 
+ Contador
+ Calibre
+ Resumen
+ Histograma

El agente de CloudWatch admite los tipos de métricas de contador, medición y resumen.

 El agente de CloudWatch descarta las métricas de Prometheus con el tipo de métrica de histograma no compatible. Para obtener más información, consulte [Registro de métricas de Prometheus descartadas](ContainerInsights-Prometheus-troubleshooting-EKS.md#ContainerInsights-Prometheus-troubleshooting-droppedmetrics).

**Métricas de medición**

Una métrica de medición de Prometheus es una métrica que representa un único valor numérico que puede subir y bajar arbitrariamente. El agente de CloudWatch raspa las métricas de medición y envía estos valores directamente.

**Métricas de contador**

Una métrica de contador de Prometheus es una métrica acumulada que representa un contador monotónico en aumento cuyo valor sólo puede aumentar o reiniciarse a cero. El agente de CloudWatch calcula un delta desde el raspado anterior y envía el valor delta como valor de métrica en el evento de registro. Por lo tanto, el agente de CloudWatch comenzará a producir un evento de registro desde el segundo raspado y continuará con los raspados posteriores, si los hay.

**Métricas de resumen**

Una métrica de resumen de Prometheus es un tipo de métrica compleja que está representada por varios puntos de datos. Proporciona un recuento total de observaciones y una suma de todos los valores observados. Calcula cuantiles configurables a través de una ventana de tiempo variable.

La suma y el recuento de una métrica de resumen son acumulativos, pero los cuantiles no lo son. El siguiente ejemplo muestra la desviación de los cuantiles.

```
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 7.123e-06
go_gc_duration_seconds{quantile="0.25"} 9.204e-06
go_gc_duration_seconds{quantile="0.5"} 1.1065e-05
go_gc_duration_seconds{quantile="0.75"} 2.8731e-05
go_gc_duration_seconds{quantile="1"} 0.003841496
go_gc_duration_seconds_sum 0.37630427
go_gc_duration_seconds_count 9774
```

El agente de CloudWatch gestiona la suma y el recuento de una métrica de resumen de la misma manera que maneja las métricas de contador, como se describe en la sección anterior. El agente de CloudWatch conserva los valores del cuantil tal como se notifican originalmente.

# Métricas de Prometheus que el agente de CloudWatch recopila
<a name="ContainerInsights-Prometheus-metrics"></a>

El agente de CloudWatch compatible con Prometheus recopila automáticamente las métricas de varios servicios y cargas de trabajo. En las siguientes secciones se detallan las métricas que se recopilan de forma predeterminada. También puede configurar el agente para que recopile más métricas de otros servicios y métricas de Prometheus desde diferentes aplicaciones y servicios. Para obtener más información acerca de la recopilación de métricas adicionales, consulte [Configuración del agente de CloudWatch para Prometheus](ContainerInsights-Prometheus-Setup-configure-ECS.md#ContainerInsights-Prometheus-Setup-cw-agent-config).

Las métricas de Prometheus recopiladas de los clústeres de Amazon EKS y Kubernetes se encuentran en el espacio de nombres **ContainerInsights/Prometheus**. Las métricas de Prometheus que se recopilan de los clústeres de Amazon ECS se encuentran en el espacio de nombres **ECS/ContainerInsights/Prometheus**. 

**Topics**
+ [Métricas de Prometheus para App Mesh](#ContainerInsights-Prometheus-metrics-appmesh)
+ [Métricas de Prometheus para NGINX](#ContainerInsights-Prometheus-metrics-nginx)
+ [Métricas de Prometheus para Memcached](#ContainerInsights-Prometheus-metrics-memcached)
+ [Métricas de Prometheus para Java/JMX](#ContainerInsights-Prometheus-metrics-jmx)
+ [Métricas de Prometheus para HAProxy](#ContainerInsights-Prometheus-metrics-haproxy)

## Métricas de Prometheus para App Mesh
<a name="ContainerInsights-Prometheus-metrics-appmesh"></a>

Las siguientes métricas se recopilan automáticamente de App Mesh.

**Métricas de Prometheus para App Mesh en clústeres de Amazon EKS y de Kubernetes**


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `envoy_http_downstream_rq_total` |  ClusterName, `Namespace`  | 
|  `envoy_http_downstream_rq_xx` |  ClusterName, `Namespace` ClusterName, `Namespace`, envoy\$1http\$1conn\$1manager\$1prefix, envoy\$1response\$1code\$1class  | 
|  `envoy_cluster_upstream_cx_rx_bytes_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_tx_bytes_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_membership_healthy` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_membership_total` |  ClusterName, `Namespace`  | 
|  `envoy_server_memory_heap_size` |  ClusterName, `Namespace`  | 
|  `envoy_server_memory_allocated` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_connect_timeout` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_pending_failure_eject` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_pending_overflow` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_timeout` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_try_per_timeout` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_rx_reset` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_destroy_local_with_active_rq` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_destroy_remote_active_rq` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_maintenance_mode` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_paused_reading_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_resumed_reading_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_backed_up_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_drained_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_retry` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_retry_success` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_retry_overflow` |  ClusterName, `Namespace`  | 
|  `envoy_server_live` |  ClusterName, `Namespace`  | 
|  `envoy_server_uptime` |  ClusterName, `Namespace`  | 

**Métricas de Prometheus para App Mesh en clústeres de Amazon ECS**


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `envoy_http_downstream_rq_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_http_downstream_rq_xx` |  ClusterName, `TaskDefinitionFamily` | 
|  `envoy_cluster_upstream_cx_rx_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_tx_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_membership_healthy` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_membership_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_memory_heap_size` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_memory_allocated` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_connect_timeout` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_pending_failure_eject` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_pending_overflow` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_timeout` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_try_per_timeout` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_rx_reset` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_destroy_local_with_active_rq` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_destroy_remote_active_rq` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_maintenance_mode` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_paused_reading_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_resumed_reading_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_backed_up_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_drained_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_retry` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_retry_success` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_retry_overflow` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_live` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_uptime` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_http_downstream_rq_xx` |  ClusterName, TaskDefinitionFamily, envoy\$1http\$1conn\$1manager\$1prefix, envoy\$1response\$1code\$1class ClusterName, TaskDefinitionFamily, envoy\$1response\$1code\$1class | 

**nota**  
`TaskDefinitionFamily` es el espacio de nombres Kubernetes de la malla.  
El valor de `envoy_http_conn_manager_prefix` puede ser `ingress`, `egress` o `admin`.   
El valor de `envoy_response_code_class` puede ser `1` (corresponde a `1xx`), `2` corresponde a `2xx`), `3` corresponde a `3xx`), `4` corresponde a `4xx`) o `5` que corresponde a `5xx`). 

## Métricas de Prometheus para NGINX
<a name="ContainerInsights-Prometheus-metrics-nginx"></a>

Las siguientes métricas se recopilan automáticamente de NGINX en clústeres de Amazon EKS y de Kubernetes.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `nginx_ingress_controller_nginx_process_cpu_seconds_total` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_success` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_requests` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_nginx_process_connections` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_nginx_process_connections_total` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_nginx_process_resident_memory_bytes` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_config_last_reload_successful` |  ClusterName, `Namespace`, Servicio  | 
|  `nginx_ingress_controller_requests` |  ClusterName, `Namespace`, Servicio, estado  | 

## Métricas de Prometheus para Memcached
<a name="ContainerInsights-Prometheus-metrics-memcached"></a>

Las siguientes métricas se recopilan automáticamente de Memcached en clústeres de Amazon EKS y de Kubernetes.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `memcached_current_items` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_current_connections` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_limit_bytes` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_current_bytes` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_written_bytes_total` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_read_bytes_total` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_items_evicted_total` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_items_reclaimed_total` |  ClusterName, `Namespace`, Servicio  | 
|  `memcached_commands_total` |  ClusterName, `Namespace`, Servicio ClusterName, `Namespace`, Servicio, comando ClusterName, `Namespace`, Servicio, estado, comando  | 

## Métricas de Prometheus para Java/JMX
<a name="ContainerInsights-Prometheus-metrics-jmx"></a>

**Métricas recopiladas en clústeres de Amazon EKS y de Kubernetes**

En los clústeres de Amazon EKS y de Kubernetes, Información de contenedores puede recopilar las siguientes métricas de Prometheus predefinidas de Java Virtual Machine (JVM), Java y Tomcat (Catalina) mediante JMX Exporter. Para obtener más información, consulte [ prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter) en Github.

**Java/JMX en clústeres de Amazon EKS y de Kubernetes**


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `jvm_classes_loaded` |  `ClusterName`, `Namespace`  | 
|  `jvm_threads_current` |  `ClusterName`, `Namespace`  | 
|  `jvm_threads_daemon` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_totalswapspacesize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_systemcpuload` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_processcpuload` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_freeswapspacesize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_totalphysicalmemorysize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_freephysicalmemorysize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_openfiledescriptorcount` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_availableprocessors` |  `ClusterName`, `Namespace`  | 
|  `jvm_memory_bytes_used` |  `ClusterName`, `Namespace`, área  | 
|  `jvm_memory_pool_bytes_used` |  `ClusterName`, `Namespace`, grupo  | 

**nota**  
Los valores de la dimensión `area` pueden ser `heap` o `nonheap`.  
Los valores de la dimensión `pool` pueden ser `Tenured Gen`, `Compress Class Space`, `Survivor Space`, `Eden Space`, `Code Cache` o `Metaspace`.

**TomCat/JMX en clústeres de Amazon EKS y de Kubernetes**

Además de las métricas de Java/JMX de la tabla anterior, también se recopilan las siguientes métricas de la carga de trabajo de Tomcat.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `catalina_manager_activesessions` |  `ClusterName`, `Namespace`  | 
|  `catalina_manager_rejectedsessions` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_bytesreceived` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_bytessent` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_requestcount` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_errorcount` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_processingtime` |  `ClusterName`, `Namespace`  | 

**Java/JMX en clústeres de Amazon ECS**


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `jvm_classes_loaded` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `jvm_threads_current` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `jvm_threads_daemon` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_totalswapspacesize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_systemcpuload` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_processcpuload` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_freeswapspacesize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_totalphysicalmemorysize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_freephysicalmemorysize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_openfiledescriptorcount` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_availableprocessors` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `jvm_memory_bytes_used` |  `ClusterName`, TaskDefinitionFamily, área  | 
|  `jvm_memory_pool_bytes_used` |  `ClusterName`, TaskDefinitionFamily, grupo  | 

**nota**  
Los valores de la dimensión `area` pueden ser `heap` o `nonheap`.  
Los valores de la dimensión `pool` pueden ser `Tenured Gen`, `Compress Class Space`, `Survivor Space`, `Eden Space`, `Code Cache` o `Metaspace`.

**Tomcat/JMX en clústeres de Amazon ECS**

Además de las métricas de Java/JMX de la tabla anterior, también se recopilan las siguientes métricas de la carga de trabajo de Tomcat en clústeres de Amazon ECS.


| Nombre de métrica | Dimensiones | 
| --- | --- | 
|  `catalina_manager_activesessions` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_manager_rejectedsessions` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_bytesreceived` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_bytessent` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_requestcount` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_errorcount` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_processingtime` |  `ClusterName`, `TaskDefinitionFamily`  | 

## Métricas de Prometheus para HAProxy
<a name="ContainerInsights-Prometheus-metrics-haproxy"></a>

Las siguientes métricas se recopilan automáticamente de HAProxy en clústeres de Amazon EKS y de Kubernetes.

Las métricas recopiladas dependen de la versión de HAProxy Ingress que esté utilizando. Para obtener más información sobre HAProxy Ingress y sus versiones, consulte [haproxy-ingress](https://artifacthub.io/packages/helm/haproxy-ingress/haproxy-ingress).


| Nombre de métrica | Dimensiones | Disponibilidad | 
| --- | --- | --- | 
|  `haproxy_backend_bytes_in_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_backend_bytes_out_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_backend_connection_errors_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_backend_connections_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_backend_current_sessions` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_backend_http_responses_total` |  `ClusterName`, `Namespace`, Servicio, código, backend  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_backend_status` |  `ClusterName`, `Namespace`, Servicio  |  Sólo en versiones de HAProxy Ingress 0.10 o posteriores   | 
|  `haproxy_backend_up` |  `ClusterName`, `Namespace`, Servicio  |  Sólo en versiones de HAProxy Ingress anteriores a 0.10  | 
|  `haproxy_frontend_bytes_in_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_bytes_out_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_connections_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_current_sessions` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_http_requests_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_http_responses_total` |  `ClusterName`,`Namespace`, Servicio, código, frontend  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_request_errors_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 
|  `haproxy_frontend_requests_denied_total` |  `ClusterName`, `Namespace`, Servicio  | Todas las versiones de HAProxy Ingress | 

**nota**  
Los valores de la dimensión `code` pueden ser `1xx`, `2xx`, `3xx`, `4xx`, `5xx` o `other`.  
Los valores de la dimensión `backend` pueden ser:  
`http-default-backend`, `http-shared-backend` o `httpsback-shared-backend` para HAProxy Ingress versión 0.0.27 o anteriores.
`_default_backend` para las versiones de HAProxy Ingress posteriores a 0.0.27.
Los valores de la dimensión `frontend` pueden ser:  
`httpfront-default-backend`, `httpfront-shared-frontend` o `httpfronts` para HAProxy Ingress versión 0.0.27 o anteriores.
`_front_http` o `_front_https` para las versiones de HAProxy Ingress posteriores a 0.0.27.

# Visualización de las métricas de Prometheus
<a name="ContainerInsights-Prometheus-viewmetrics"></a>

Puede supervisión todas las métricas de Prometheus e crear alarmas sobre ellas, incluidas las que se seleccionaron y se agregaron previamente desde App Mesh, NGINX, Java/JMX, Memcached y HAProxy, así como de cualquier otro exportador de Prometheus que se haya agregado y configurado manualmente . Para obtener más información acerca de cómo recopilar métricas de otros exportadores de Prometheus, consulte [Tutorial para agregar un destino de raspado nuevo de Prometheus: métricas del servidor de la API de Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).

En la consola de CloudWatch, Información de contenedores proporciona los siguientes informes preconstruidos: 
+ Para los clústeres de Amazon EKS y de Kubernetes, hay informes preconstruidos para App Mesh, NGINX, HAPROXY, Memcached y Java/JMX.
+ Para los clústeres de Amazon ECS, hay informes preconstruidos para App Mesh y Java/JMX.

Información de contenedores también proporciona paneles personalizados para cada una de las cargas de trabajo de las que Información de contenedores recopila métricas seleccionadas. Puede descargar estos paneles de GitHub 

**Para ver todas las métricas de Prometheus**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, seleccione **Métricas**.

1. En la lista de espacios de nombres, elija **ContainerInsights/Prometheus** o **ECS/ContainerInsights/Prometheus**.

1. Elija uno de los conjuntos de dimensiones de la siguiente lista. A continuación, active la casilla situada junto a las métricas que desee ver.

**Para ver los informes prediseñados de las métricas de Prometheus**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Performance monitoring** (Supervisión del rendimiento).

1. En el cuadro desplegable situado cerca de la parte superior de la página, elija cualquiera de las opciones Prometheus.

   En el otro cuadro desplegable, elija el clúster que desee ver

También se han incluido paneles personalizados para NGINX, App Mesh, Memcached, HAProxy y Java/JMX.

**Para utilizar un panel personalizado proporcionado por Amazon**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Dashboards (Paneles)**.

1. Elija **Crear un panel**. Escriba el nombre del nuevo panel y elija **Crear un panel**.

1. En **Añadir a este panel**, elija **Cancelar**.

1. Elija **Actions (Acciones)**, **View/edit source (Ver/editar código fuente)**.

1. Descargue uno de los siguientes archivos JSON:
   + [ Origen de paneles personalizados para NGINX en Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/nginx-ingress/cw_dashboard_nginx_ingress_controller.json).
   + [ App Mesh custom dashboard source on Github (Fuente de paneles personalizados de App Mesh en Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/appmesh/cw_dashboard_awsappmesh.json).
   + [ Origen de paneles personalizados de Memcached en Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json)
   + [ Origen de paneles personalizados de HAProxy-Ingress en Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/haproxy-ingress/cw_dashboard_haproxy_ingress.json)
   + [ Origen de paneles personalizados para Java/JMX en Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/javajmx/cw_dashboard_javajmx.json).

1. Abra el archivo JSON que descargó con un editor de texto y realice los siguientes cambios:
   + Reemplace todas las cadenas `{{YOUR_CLUSTER_NAME}}` por el nombre exacto del clúster. Tenga cuidado de no agregar espacios en blanco antes o después del texto.
   + Reemplace todas las cadenas `{{YOUR_REGION}}` con la Región de AWS en la que se está ejecutando el clúster. Por ejemplo, en **us-west-1** asegúrese de no agregar espacios en blanco antes o después del texto. 
   + Reemplace todas las cadenas `{{YOUR_NAMESPACE}}` por el espacio de nombres exacto de la carga de trabajo.
   + Reemplace todas las cadenas `{{YOUR_SERVICE_NAME}}` por el nombre exacto del servicio de la carga de trabajo. Por ejemplo: ., **haproxy-haproxy-ingress-controller-metrics**

1. Copie todo el blob JSON y péguelo en el cuadro de texto de la consola de CloudWatch de manera que sustituya el texto del cuadro.

1. Elija **Actualizar** y **Guardar el panel**.

# Solución de problemas de las métricas de Prometheus
<a name="ContainerInsights-Prometheus-troubleshooting"></a>

Esta sección le ayudará a solucionar problemas relacionados con la configuración de las métricas de Prometheus. 

**Topics**
+ [Solución de problemas de las métricas de Prometheus en Amazon ECS](ContainerInsights-Prometheus-troubleshooting-ECS.md)
+ [Solución de problemas de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes](ContainerInsights-Prometheus-troubleshooting-EKS.md)

# Solución de problemas de las métricas de Prometheus en Amazon ECS
<a name="ContainerInsights-Prometheus-troubleshooting-ECS"></a>

Esta sección le ayudará a solucionar problemas relacionados con la configuración de las métricas de Prometheus en clústeres de Amazon ECS. 

## No se pueden ver las métricas de Prometheus que se enviaron a los CloudWatch Logs
<a name="ContainerInsights-Prometheus-troubleshooting-ECS-nometrics"></a>

Las métricas de Prometheus se deberían capturar como eventos de registro en el grupo de registros **/aws/containerInsights/nombre-del-clúster/Prometheus**. Si no se crea el grupo de registros o las métricas de Prometheus no se envían al grupo de registros, primero se deberá verificar si el agente de CloudWatch ha detectado correctamente los destinos de Prometheus. A continuación, verifique el grupo de seguridad y la configuración de permisos del agente de CloudWatch. Los siguientes pasos lo guiarán para realizar la depuración.

**Paso 1: habilite el modo de depuración del agente de CloudWatch**

Primero, cambie el agente de CloudWatch al modo de depuración al agregar los siguientes renglones en negrita al archivo de plantilla de CloudFormation, `cwagent-ecs-prometheus-metric-for-bridge-host.yaml` o `cwagent-ecs-prometheus-metric-for-awsvpc.yaml`. A continuación, guarde el archivo.

```
cwagentconfig.json: |
    {
      "agent": {
        "debug": true
      },
      "logs": {
        "metrics_collected": {
```

Cree un nuevo conjunto de cambios de CloudFormation con respecto a la pila existente. Establezca otros parámetros en el conjunto de cambios a los mismos valores que tiene en la pila de CloudFormation. El siguiente ejemplo es para un agente de CloudWatch instalado en un clúster de Amazon ECS que utiliza el tipo de lanzamiento de EC2 y el modo de red puente.

```
ECS_NETWORK_MODE=bridge
 CREATE_IAM_ROLES=True
ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
NEW_CHANGESET_NAME=your_selected_ecs_execution_role_name

aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
    --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                 ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                 ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                 ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                 ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
    --capabilities CAPABILITY_NAMED_IAM \
    --region $AWS_REGION \
    --change-set-name $NEW_CHANGESET_NAME
```

Diríjase a la consola de CloudFormation para revisar el nuevo conjunto de cambios, `$NEW_CHANGESET_NAME`. Debe haber un cambio aplicado al recurso **CWAgentConfigSSMParameter**. Ejecute el conjunto de cambios y reinicie la tarea del agente de CloudWatch mediante los siguientes comandos.

```
aws ecs update-service --cluster $ECS_CLUSTER_NAME \
--desired-count 0 \
--service your_service_name_here \
--region $AWS_REGION
```

Espere aproximadamente 10 segundos y, a continuación, ingrese el siguiente comando.

```
aws ecs update-service --cluster $ECS_CLUSTER_NAME \
--desired-count 1 \
--service your_service_name_here \
--region $AWS_REGION
```

**Paso 2: verifique los registros de detección del servicio de ECS**

La definición de tarea ECS del agente de CloudWatch habilita los registros de forma predeterminada en la siguiente sección. Los registros se envían a CloudWatch Logs en el grupo de registros **/ecs/ecs-cwagent-prometheus**.

```
LogConfiguration:
  LogDriver: awslogs
    Options:
      awslogs-create-group: 'True'
      awslogs-group: "/ecs/ecs-cwagent-prometheus"
      awslogs-region: !Ref AWS::Region
      awslogs-stream-prefix: !Sub 'ecs-${ECSLaunchType}-awsvpc'
```

Filtre los registros mediante la cadena `ECS_SD_Stats` para obtener las métricas relacionadas con la detección de servicios de ECS, tal y como se muestra en el siguiente ejemplo.

```
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeContainerInstances: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeInstancesRequest: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTaskDefinition: 2
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTasks: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_ListTasks: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: Exporter_DiscoveredTargetCount: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_EC2MetaData: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_TaskDefinition: 2
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_ContainerInstance: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_TaskDefinition: 2
2020-09-1T01:53:14Z D! ECS_SD_Stats: Latency: 43.399783ms
```

El significado de cada métrica para un ciclo de detección de servicios de ECS particular es el siguiente:
+ **AWSCLI\$1DescribeContainerInstances**: el número de llamadas a la API `ECS::DescribeContainerInstances` realizadas.
+ **AWSCLI\$1DescribeInstancesRequest**: el número de llamadas a la API `ECS::DescribeInstancesRequest` realizadas.
+ **AWSCLI\$1DescribetaskDefinition**: el número de llamadas a la API `ECS::DescribeTaskDefinition` realizadas.
+ **AWSCLI\$1DescribeTasks**: el número de llamadas a la API `ECS::DescribeTasks` realizadas.
+ **AWSCLI\$1ListTasks**: el número de llamadas a la API `ECS::ListTasks` realizadas.
+ **ExporterDiscoveredTargetCount**: el número de destinos de Prometheus que se detectaron y exportaron correctamente al archivo de resultados de destino dentro del contenedor.
+ **LRUCache\$1Get\$1EC2MetaData**: el número de veces que se recuperaron los metadatos de instancias de contenedor de la caché.
+ **LRUCache\$1Get\$1TaskDefinition**: el número de veces que los metadatos de definición de tareas de ECS se recuperaron de la caché.
+ **LRUCache\$1Size\$1ContainerInstance**: el número de metadatos de la instancia de contenedor únicos almacenados en caché en la memoria.
+ **LRUCache\$1Size\$1TaskDefinition**: el número de definiciones de tareas ECS únicas almacenadas en caché en la memoria.
+ **Latencia**: cuánto tiempo tarda el ciclo de detección de servicios.

Verifique el valor de `ExporterDiscoveredTargetCount` para ver si los destinos de Prometheus detectados concuerdan con las expectativas. De lo contrario, las razones posibles son las siguientes:
+ Es posible que la configuración de la detección de servicios de ECS no concuerde con la configuración de la aplicación. Para la detección de servicios basada en etiquetas docker, es posible que los contenedores de destino no tengan la etiqueta docker necesaria configurada en el agente de CloudWatch para detectarlos automáticamente. Para la detección de servicios basado en expresiones regulares ARN de la definición de tarea de ECS, es posible que la configuración de las expresiones regulares en el agente de CloudWatch no coincida con la definición de tarea de la aplicación. 
+ Es posible que el rol de tarea de ECS del agente de CloudWatch no tenga permiso para recuperar los metadatos de las tareas de ECS. Verifique que el agente de CloudWatch ha obtenido los siguientes permisos de sólo lectura:
  + `ec2:DescribeInstances`
  + `ecs:ListTasks`
  + `ecs:DescribeContainerInstances`
  + `ecs:DescribeTasks`
  + `ecs:DescribeTaskDefinition`

**Paso 3: verifique la conexión de red y la política de rol de tareas de ECS**

Si todavía no hay eventos de registro enviados al grupo de registro de CloudWatch Logs de destino aunque el valor de `Exporter_DiscoveredTargetCount` indica que hay destinos de Prometheus detectados, esto podría deberse a una de las siguientes causas:
+ Es posible que el agente de CloudWatch no pueda conectarse a los puertos de destino de Prometheus. Verifique la configuración del grupo de seguridad detrás del agente de CloudWatch. La IP privada debe permitir que el agente de CloudWatch se conecte a los puertos del exportador de Prometheus. 
+ Es posible que el rol de tarea de ECS del agente de CloudWatch no cuente con la política administrada **CloudWatchAgentServerPolicy**. Se necesita contar con esta política para que el rol de tarea de ECS del agente de CloudWatch pueda enviar las métricas de Prometheus como eventos de registro. Si utilizó la plantilla de muestra de CloudFormation para crear los roles de IAM de forma automática, tanto el rol de tarea de ECS como el rol de ejecución de ECS se otorgan con el privilegio mínimo para la supervisión de Prometheus. 

# Solución de problemas de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes
<a name="ContainerInsights-Prometheus-troubleshooting-EKS"></a>

Esta sección proporciona ayuda para solucionar problemas relacionados con la configuración de las métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes. 

## Pasos generales de solución de problemas en Amazon EKS
<a name="ContainerInsights-Prometheus-troubleshooting-general"></a>

Ingrese el siguiente comando para confirmar que el agente de CloudWatch se está ejecutando.

```
kubectl get pod -n amazon-cloudwatch
```

En la salida, debería aparecer una fila con el valor `cwagent-prometheus-id` en la columna `NAME` y el valor `Running` en `STATUS column.`

Para obtener más información sobre el pod en ejecución, escriba el siguiente comando. Sustituya *pod-name* por el nombre completo del pod que debe comenzar por `cw-agent-prometheus`.

```
kubectl describe pod pod-name -n amazon-cloudwatch
```

 Si Información de contenedores de CloudWatch está instalado, puede utilizar Información de registros de CloudWatch para consultar los registros del agente de CloudWatch que recopila las métricas de Prometheus.

**Para consultar los registros de la aplicación**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Información de registros de CloudWatch**.

1. Seleccione el grupo de registros de la aplicación, **/aws/containerinsights/*nombre-del-clúster*/application**

1. Sustituya la expresión de la consulta de búsqueda por la siguiente consulta y elija **Ejecutar la consulta**.

   ```
   fields ispresent(kubernetes.pod_name) as haskubernetes_pod_name, stream, kubernetes.pod_name, log | 
   filter haskubernetes_pod_name and kubernetes.pod_name like /cwagent-prometheus
   ```

También se puede confirmar que las métricas y los metadatos de Prometheus se están capturando como eventos de CloudWatch Logs.

**Para confirmar que los datos de Prometheus se están ingiriendo**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Información de registros de CloudWatch**.

1. Seleccione **/aws/containerinsights/*nombre-del-clúster*/prometheus**

1. Sustituya la expresión de la consulta de búsqueda por la siguiente consulta y elija **Ejecutar la consulta**.

   ```
   fields @timestamp, @message | sort @timestamp desc | limit 20
   ```

## Registro de métricas de Prometheus descartadas
<a name="ContainerInsights-Prometheus-troubleshooting-droppedmetrics"></a>

Esta versión no recopila métricas de Prometheus de tipo histograma. Puede utilizar el agente de CloudWatch para verificar si se está descartando alguna métrica de Prometheus porque son de tipo histograma. También puede registrar una lista de las primeras 500 métricas de Prometheus descartadas que no se envían a CloudWatch porque son de tipo histograma.

Para comprobar si se está descartando alguna métrica, ejecute el siguiente comando:

```
kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1
```

Si se está descartando alguna métrica, aparecerán las siguientes líneas en el archivo `/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log`.

```
I! Drop Prometheus metrics with unsupported types. Only Gauge, Counter and Summary are supported.
I! Please enable CWAgent debug mode to view the first 500 dropped metrics
```

Si ve esas líneas y desea saber qué métricas se están descartando, siga estos pasos.

**Para registrar una lista de métricas de Prometheus descartadas**

1. Cambie el agente de CloudWatch al modo de depuración al agregar las siguientes líneas en negrita al archivo `prometheus-eks.yaml` o `prometheus-k8s.yaml`, y guarde el archivo.

   ```
   {
         "agent": {
           "debug": true
         },
   ```

   Esta sección del archivo debería aparecer así:

   ```
   cwagentconfig.json: |
       {
         "agent": {
           "debug": true
         },
         "logs": {
           "metrics_collected": {
   ```

1. Vuelva a instalar el agente de CloudWatch para habilitar el modo de depuración con los siguientes comandos:

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   kubectl apply -f prometheus.yaml
   ```

   Las métricas descartadas se registran en el pod del agente de CloudWatch.

1. Para recuperar los registros del pod del agente de CloudWatch, ingrese el siguiente comando:

   ```
   kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1
   ```

   O bien, si tiene instalado el registro Fluentd de Información de contenedores, los registros también se guardan en el grupo de registro de registros de CloudWatch **/aws/containerinsights/*cluster\$1name*/application**.

   Para consultar estos registros, siga los pasos que se indican en [Pasos generales de solución de problemas en Amazon EKS](#ContainerInsights-Prometheus-troubleshooting-general).

## ¿Dónde se capturan las métricas de Prometheus como eventos de registro de CloudWatch Logs?
<a name="ContainerInsights-Prometheus-troubleshooting-metrics_ingested"></a>

El agente de CloudWatch crea un flujo de registros en la configuración de cada trabajo de raspado de Prometheus. Por ejemplo, en los archivos `prometheus-eks.yaml` y `prometheus-k8s.yaml`, la línea `job_name: 'kubernetes-pod-appmesh-envoy'` raspa las métricas de App Mesh. El destino de Prometheus está definido como `kubernetes-pod-appmesh-envoy`. Por tanto, todas las métricas de Prometheus de App Mesh se ingieren como eventos de CloudWatch Logs en el flujo de registro **kubernetes-pod-appmesh-envoy** bajo el grupo de registros **/aws/containerinsights/cluster-name/Prometheus**.

## No se pueden ver las métricas de Amazon EKS o de Kubernetes Prometheus en las métricas de CloudWatch
<a name="ContainerInsights-Prometheus-troubleshooting-no-metrics"></a>

En primer lugar, asegúrese de que las métricas de Prometheus se están ingiriendo como eventos de registro en el grupo de registros **/aws/containerInsights/nombre-del-clúster/Prometheus**. Utilice la información de [¿Dónde se capturan las métricas de Prometheus como eventos de registro de CloudWatch Logs?](#ContainerInsights-Prometheus-troubleshooting-metrics_ingested) para que le ayude a comprobar el flujo de registro de destino. Si el flujo de registro no se ha creado o no hay nuevos eventos de registro en el flujo, compruebe lo siguiente:
+ Compruebe que los puntos de enlace del exportador de métricas de Prometheus están configurados correctamente.
+ Verifique que las configuraciones de raspado de Prometheus incluidas en la sección `config map: cwagent-prometheus` del archivo YAML del agente de CloudWatch sean correctas. La configuración debe ser la misma que la de un archivo de configuración de Prometheus. Para obtener más información, consulte [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) en la documentación de Prometheus.

Si las métricas de Prometheus se ingieren correctamente como eventos de registro, compruebe que la configuración de formato de métrica integrado se ha agregado a los eventos de registro para generar las métricas de CloudWatch.

```
"CloudWatchMetrics":[
   {
      "Metrics":[
         {
            "Name":"envoy_http_downstream_cx_destroy_remote_active_rq"
         }
      ],
      "Dimensions":[
         [
            "ClusterName",
            "Namespace"
         ]
      ],
      "Namespace":"ContainerInsights/Prometheus"
   }
],
```

Para obtener más información sobre el formato de métrica integrado, consulte [Especificación: Formato de métricas integradas](CloudWatch_Embedded_Metric_Format_Specification.md).

Si no hay ningún formato de métrica integrada en los eventos de registro, verifique que la sección `metric_declaration` esté configurada correctamente en la sección `config map: prometheus-cwagentconfig` del archivo YAML de instalación del agente de CloudWatch. Para obtener más información, consulte [Tutorial para agregar un destino de raspado nuevo de Prometheus: métricas del servidor de la API de Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).

# Integración con Información de aplicaciones
<a name="container-insights-appinsights"></a>

Información de aplicaciones de Amazon CloudWatch ayuda a supervisar las aplicaciones e identifica y configura las métricas clave, los registros y las alarmas entre los recursos de aplicaciones y la pila de tecnología. Para obtener más información, consulte [Detecte problemas comunes de aplicaciones con Información de aplicaciones de CloudWatch](cloudwatch-application-insights.md).

Puede habilitar Información de aplicaciones para recopilar datos adicionales de las aplicaciones y microservicios en contenedores. Si aún no lo ha hecho, puede habilitarlo al seleccionar **Configuración automática de Información de aplicaciones** debajo de la vista de rendimiento en el panel de Información de contenedores.

Si ya ha configurado Información de aplicaciones de CloudWatch para supervisar las aplicaciones en contenedores, el panel de Información de aplicaciones aparece debajo del panel de Información de contenedores.

Para obtener más información acerca de Información de aplicaciones y aplicaciones en contenedores, consulte [Habilitación del monitoreo de recursos de Información de aplicaciones para Amazon ECS y Amazon EKS](appinsights-setting-up-console.md#appinsights-container-insights).

# Consulta de los eventos del ciclo de vida de Amazon ECS en Información de contenedores
<a name="container-insights-ECS-lifecycle-events"></a>

Puede ver los eventos del ciclo de vida de Amazon ECS en la consola de Información de contenedores. Esto le ayuda a correlacionar las métricas, los registros y los eventos de sus contenedores en una sola vista para ofrecerle una visibilidad operativa más completa.

Los eventos incluyen eventos de cambio de estado de instancia de contenedor, eventos de cambio de estado de tarea y eventos de acciones de servicio. Amazon ECS los envía automáticamente a Amazon EventBridge y también se recopilan en CloudWatch en formato de registro de eventos. Para obtener más información acerca de estos eventos, consulte [Eventos de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html).

Se aplican los precios estándar de Container Insights para eventos de Amazon ECS Lifecycle. Para obtener más información, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

Si quiere configurar la tabla de eventos del ciclo de vida y crear reglas para un clúster, debe disponer de los permisos `events:PutRule`, `events:PutTargets` y `logs:CreateLogGroup`. También debe asegurarse de que haya una política de recursos que permita a EventBridge crear el flujo de registros y enviar los registros a los registros de CloudWatch. Si esta política de recursos no existe, puede introducir el siguiente comando para crearla:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Principal": {
        "Service": ["events.amazonaws.com", "delivery.logs.amazonaws.com"]
      },
      "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws/events/ecs/containerinsights/*:*",
      "Condition": {
        "StringEquals": {
        "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
        "aws:SourceArn": "arn:aws:events:us-east-1:111122223333:rule/eventsToLog*"
        }
      },
      "Sid": "TrustEventBridgeToStoreECSLifecycleLogEvents"
    }
  ]
}
```

------

Puede usar el siguiente comando para comprobar si ya dispone de esta política y para confirmar que la asociación funcionó correctamente.

```
aws logs describe-resource-policies --region region --output json
```

Para ver la tabla de los eventos del ciclo de vida, debe disponer de los permisos `events:DescribeRule`, `events:ListTargetsByRule` y `logs:DescribeLogGroups`.

**Cómo ver los eventos del ciclo de vida de Amazon ECS en la consola de Información de contenedores de CloudWatch**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Elija **Información**, **Información de contenedores**.

1. Seleccione **Ver paneles de rendimiento**. 

1. En el siguiente menú desplegable, elija **ECS Clusters** (Clústeres de ECS), **ECS Services** (Servicios de ECS) o **ECS Tasks** (Tareas de ECS).

1. Si elige **ECS Services** (Servicios de ECS) o **ECS Tasks** (Tareas de ECS) en el paso anterior, seleccione la pestaña **Lifecycle events** (Eventos del ciclo de vida).

1. En la parte inferior de la página, si ve **Configure lifecycle events** (Configurar eventos del ciclo de vida), selecciónelo para crear reglas de EventBridge para el clúster.

   Los eventos se muestran debajo de los paneles de información del contenedor y encima de la sección Información de aplicaciones. Para ejecutar análisis adicionales y crear más visualizaciones sobre estos eventos, elija **View in Logs Insights** (Ver en Logs Insights) en la tabla Lifecycle Events (Eventos del ciclo de vida).

# Solución de problemas de Información de contenedores
<a name="ContainerInsights-troubleshooting"></a>

Las siguientes secciones pueden servir de ayuda si está teniendo problemas con Información de contenedores.

## Error de implementación en Amazon EKS o Kubernetes
<a name="ContainerInsights-setup-EKS-troubleshooting-general"></a>

Si el agente no se implementa correctamente en un clúster de Kubernetes, pruebe lo siguiente:
+ Ejecute el siguiente comando para obtener la lista de pods.

  ```
  kubectl get pods -n amazon-cloudwatch
  ```
+ Ejecute el siguiente comando y compruebe los eventos de la parte inferior de la salida.

  ```
  kubectl describe pod pod-name -n amazon-cloudwatch
  ```
+ Ejecute el siguiente comando para comprobar los registros.

  ```
  kubectl logs pod-name -n amazon-cloudwatch
  ```

## Pánico no autorizado: no se puede recuperar datos de cadvisor desde kubelet
<a name="ContainerInsights-setup-EKS-troubleshooting-permissions"></a>

Si su implementación falla con el error `Unauthorized panic: Cannot retrieve cadvisor data from kubelet`, su kubelet podría no tener el modo de autorización Webhook habilitado. Este modo es obligatorio para Información de contenedores. Para obtener más información, consulte [Verificación de los requisitos previos de Información de contenedores en CloudWatch](Container-Insights-prerequisites.md).

## Implementación de Información de contenedores en un clúster que se eliminó y recreó en Amazon ECS
<a name="ContainerInsights-troubleshooting-recreate"></a>

Si elimina un clúster de Amazon ECS existente que no tiene habilitado Información de contenedores y lo vuelve a crear con el mismo nombre, no podrá habilitar Información de contenedores en ese nuevo clúster en el momento de volver a crearlo. Puede habilitarlo si lo vuelve a crear y, a continuación, escribe el siguiente comando:

```
aws ecs update-cluster-settings --cluster myCICluster --settings name=container Insights,value=enabled
```

## Error de punto de enlace inválido
<a name="ContainerInsights-setup-invalid-endpoint"></a>

Si aparece un mensaje de error similar al siguiente, compruebe que ha reemplazado todos los marcadores de posición, como *nombre-clúster* y *nombre-región*, por la información correcta para la implementación en los comandos que utiliza.

```
"log": "2020-04-02T08:36:16Z E! cloudwatchlogs: code: InvalidEndpointURL, message: invalid endpoint uri, original error: &url.Error{Op:\"parse\", URL:\"https://logs.{{region_name}}.amazonaws.com/\", Err:\"{\"}, &awserr.baseError{code:\"InvalidEndpointURL\", message:\"invalid endpoint uri\", errs:[]error{(*url.Error)(0xc0008723c0)}}\n",
```

## Las métricas no aparecen en la consola
<a name="ContainerInsights-setup-EKS-troubleshooting-nometrics"></a>

Si no ve ningún métrica de Información de contenedores en la Consola de administración de AWS, asegúrese de haber completado la configuración de Información de contenedores. Las métricas no aparecen antes de haber configurado por completo Información de contenedores. Para obtener más información, consulte [Configuración de Información de contenedores](deploy-container-insights.md).

## Faltan métricas de pod en Amazon EKS o en Kubernetes después de actualizar el clúster
<a name="ContainerInsights-troubleshooting-podmetrics-missing"></a>

Esta sección puede ser útil si faltan todas o algunas métricas de pod después de implementar el agente de CloudWatch como un conjunto de daemons en un clúster nuevo o actualizado, o si ve un registro de errores con el mensaje `W! No pod metric collected`.

Estos errores pueden deberse a cambios en el tiempo de ejecución del contenedor, como containerd o el controlador docker systemd cgroup. Por lo general, puede resolverlo mediante la actualización del manifiesto de implementación para que el socket containerd del host esté montado en el contenedor. Vea el siguiente ejemplo:

```
# For full example see https://github.com/aws-samples/amazon-cloudwatch-container-insights/blob/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cloudwatch-agent
  namespace: amazon-cloudwatch
spec:
  template:
    spec:
      containers:
        - name: cloudwatch-agent
# ...
          # Don't change the mountPath
          volumeMounts:
# ...
            - name: dockersock
              mountPath: /var/run/docker.sock
              readOnly: true
            - name: varlibdocker
              mountPath: /var/lib/docker
              readOnly: true
            - name: containerdsock # NEW mount
              mountPath: /run/containerd/containerd.sock
              readOnly: true
# ...
      volumes:
# ...
        - name: dockersock
          hostPath:
            path: /var/run/docker.sock
        - name: varlibdocker
          hostPath:
            path: /var/lib/docker
        - name: containerdsock # NEW volume
          hostPath:
            path: /run/containerd/containerd.sock
```

## No hay métricas de pod cuando se utiliza Bottlerocket para Amazon EKS
<a name="ContainerInsights-troubleshooting-bottlerocket"></a>

Bottlerocket es un sistema operativo de código abierto basado en Linux que está diseñado específicamente por AWS para ejecutar contenedores. 

Bottlerocket utiliza una ruta diferente `containerd` en el host, por lo que debe cambiar los volúmenes a la ubicación. De lo contrario, aparece un error en los registros que incluye `W! No pod metric collected`. Consulte el siguiente ejemplo.

```
volumes:
  # ... 
    - name: containerdsock
      hostPath:
        # path: /run/containerd/containerd.sock
        # bottlerocket does not mount containerd sock at normal place
        # https://github.com/bottlerocket-os/bottlerocket/commit/91810c85b83ff4c3660b496e243ef8b55df0973b
        path: /run/dockershim.sock
```

## No hay métricas del sistema de archivos de contenedor cuando se utiliza el tiempo de ejecución containerd para Amazon EKS o Kubernetes
<a name="ContainerInsights-troubleshooting-containerd"></a>

Se trata de un problema conocido y los colaboradores de la comunidad lo están tratando. Para obtener más información, consulte [Disk usage metric for containerd](https://github.com/google/cadvisor/issues/2785) (Métrica de uso de disco para containerd) y [container file system metrics is not supported by cadvisor for containerd](https://github.com/aws/amazon-cloudwatch-agent/issues/192) (métricas del sistema de archivos de contenedor no son compatibles con cadvisor para containerd) en GitHub.

## Aumento inesperado del volumen de registro del agente de CloudWatch al recopilar métricas de Prometheus
<a name="ContainerInsights-troubleshooting-log-volume-increase"></a>

Esta fue una regresión que se presentó en la versión 1.247347.6b250880 del agente CloudWatch. Esta regresión ya se ha corregido en versiones más recientes del agente. Su impacto se limitó a situaciones en las que los clientes recopilaban los registros del propio agente de CloudWatch y también utilizaban Prometheus. Para obtener más información, consulte [[prometheus] agent is printing all the scraped metrics in log](https://github.com/aws/amazon-cloudwatch-agent/issues/209) ([prometheus] el agente está imprimiendo todas las métricas raspadas en el registro) en GitHub.

## La última imagen de docker mencionada en las notas de la versión que no se encontró en Dockerhub
<a name="ContainerInsights-troubleshooting-docker-image"></a>

Hemos actualizado la nota de la versión y la etiqueta en Github antes de comenzar la versión real internamente. Por lo general, toma 1 o 2 semanas ver la última imagen de docker en los registros después de que se actualizó el número de versión en Github. No hay ninguna versión nocturna para la imagen del contenedor del agente de CloudWatch. Puede crear la imagen directamente desde la fuente en la siguiente ubicación: [https://github.com/aws/amazon-cloudwatch-agent/tree/main/amazon-cloudwatch-container-insights/cloudwatch-agent-dockerfile](https://github.com/aws/amazon-cloudwatch-agent/tree/main/amazon-cloudwatch-container-insights/cloudwatch-agent-dockerfile)

## Error de CrashLoopBackoff en el agente de CloudWatch
<a name="ContainerInsights-troubleshooting-crashloopbackoff"></a>

Si ve un error `CrashLoopBackOff` del agente de CloudWatch, asegúrese de que los permisos de IAM estén establecidos correctamente. Para obtener más información, consulte [Verificación de los requisitos previos de Información de contenedores en CloudWatch](Container-Insights-prerequisites.md).

## Agente de CloudWatch o pod FluentD bloqueado en pendiente
<a name="ContainerInsights-troubleshooting-pending"></a>

Si dispone de un agente de CloudWatch o un pod Fluentd bloqueado en `Pending` o con un error `FailedScheduling`, determine si los nodos tienen suficientes recursos informáticos en función del número de núcleos y la cantidad de RAM que necesitan los agentes. Especifique el siguiente comando para describir el pod:

```
kubectl describe pod cloudwatch-agent-85ppg -n amazon-cloudwatch
```

# Creación de su propia imagen de Docker del agente de CloudWatch
<a name="ContainerInsights-build-docker-image"></a>

Puede crear su propia imagen de Docker del agente de CloudWatch mediante una referencia al Dockerfile ubicado en [https://github.com/aws-samples/amazon-cloudwatch-container-insights/blob/latest/cloudwatch-agent-dockerfile/Dockerfile](https://github.com/aws-samples/amazon-cloudwatch-container-insights/blob/latest/cloudwatch-agent-dockerfile/Dockerfile).

Dockerfile admite la creación de imágenes multiarquitectura directamente con `docker buildx`.

# Implementación de otras características del agente de CloudWatch en los contenedores
<a name="ContainerInsights-other-agent-features"></a>

Puede implementar otras características de supervisión en los contenedores con el agente de CloudWatch. Estas son algunas de ellas:
+ **Formato de métricas integradas**: para obtener más información, consulte [Incrustar métricas en los registros](CloudWatch_Embedded_Metric_Format.md).
+ **StatsD**: para obtener más información, consulte [Recuperación de las métricas personalizadas con StatsD](CloudWatch-Agent-custom-metrics-statsd.md).

Las instrucciones y los archivos necesarios se encuentran en las siguientes ubicaciones de GitHub:
+ En el caso de los contenedores de Amazon ECS, consulte [Example Amazon ECS task definitions based on deployment modes](https://github.com/aws-samples/amazon-cloudwatch-container-insights/tree/latest/ecs-task-definition-templates/deployment-mode) (Ejemplo de definiciones de tareas de Amazon ECS basadas en modos de implementación).
+ En el caso de los contenedores de Amazon EKS y de Kubernetes, consulte [Example Kubernetes YAML files based on deployment modes](https://github.com/aws-samples/amazon-cloudwatch-container-insights/tree/latest/k8s-deployment-manifest-templates/deployment-mode) (Ejemplo de archivos de YAML de Kubernetes basados en modos de implementación).