

# Correlacionar el rendimiento de las aplicaciones de Amazon ECS mediante métricas de aplicaciones
<a name="metrics-data"></a>

Amazon ECS en Fargate admite la recopilación de métricas de las aplicaciones que se ejecutan en Fargate y la exportación a Amazon CloudWatch o Amazon Managed Service for Prometheus. 

Puede usar los metadatos recopilados para correlacionar los datos de rendimiento de las aplicaciones con los datos de la infraestructura subyacente, lo que reduce el tiempo medio necesario para resolver el problema. 

Amazon ECS utiliza un contenedor de sidecar de AWS Distro for OpenTelemetry para recopilar y enrutar las métricas de su aplicación al destino. La experiencia de consola de Amazon ECS simplifica el proceso de agregar esta integración al crear las definiciones de tareas.

**Topics**
+ [Exportación de métricas de aplicaciones a Amazon CloudWatch](application-metrics-cloudwatch.md)
+ [Exportación de métricas de aplicaciones a Amazon Managed Service for Prometheus](application-metrics-prometheus.md)

# Exportación de métricas de aplicaciones a Amazon CloudWatch
<a name="application-metrics-cloudwatch"></a>

Amazon ECS en Fargate admite la exportación de métricas de aplicaciones personalizadas a Amazon CloudWatch como métricas personalizadas. Esto se hace agregando el contenedor de sidecar de AWS Distro for OpenTelemetry según su definición de tarea. La consola de Amazon ECS simplifica este proceso al agregar la opción **Utilizar recopilación de métricas** cuando se crea una nueva definición de tarea. Para obtener más información, consulte [Creación de una definición de tareas de Amazon ECS mediante la consola](create-task-definition.md).

Las métricas de la aplicación se exportan a CloudWatch Logs con nombre de grupo de registros `/aws/ecs/application/metrics` y las métricas de se pueden ver en el espacio de nombres `ECS/AWSOTel/Application`. La aplicación debe estar instrumentada con el SDK de OpenTelemetry. Para obtener más información, consulte [Introducción a AWS Distro for OpenTelemetry](https://aws-otel.github.io/docs/introduction) en la documentación de AWS Distro for OpenTelemetry.

## Consideraciones
<a name="application-metrics-cloudwatch-considerations"></a>

Debe tenerse en cuenta lo siguiente al utilizar Amazon ECS en la integración de Fargate con AWS Distro for OpenTelemetry para enviar métricas de aplicaciones a Amazon CloudWatch
+ Esta integración solo envía las métricas personalizadas de la aplicación a CloudWatch. Si desea obtener métricas de tarea, puede activar Información de contenedores en la configuración del clúster de Amazon ECS. Para obtener más información, consulte [Supervisión de contenedores de Amazon ECS mediante Información de contenedores con capacidad de observabilidad mejorada](cloudwatch-container-insights.md).
+ La integración de AWS Distro para OpenTelemetry se admite para cargas de trabajo de Amazon ECS alojadas en Fargate y cargas de trabajo de Amazon ECS alojadas en instancias de Amazon EC2. No se admiten instancias externas.
+ CloudWatch admite un máximo de 30 dimensiones por métrica. De forma predeterminada, Amazon ECS incluye de forma predeterminada las dimensiones `TaskARN`, `ClusterARN`, `LaunchType`, `TaskDefinitionFamily` y `TaskDefinitionRevision` de las métricas. La aplicación puede definir las 25 dimensiones restantes. Si se configuran más de 30 dimensiones, CloudWatch no puede mostrarlas. Cuando esto ocurra, las métricas de la aplicación se mostrarán en el espacio de nombres métrico de CloudWatch `ECS/AWSOTel/Application` pero sin dimensiones. Puede instrumentar su aplicación para agregar dimensiones adicionales. Para obtener más información, consulte [Using CloudWatch metrics with AWS Distro for OpenTelemetry](https://aws-otel.github.io/docs/getting-started/cloudwatch-metrics) (Uso de métricas CLoudWatch con Distro for OpenTelemetry) en la documentación de AWS Distro for OpenTelemetry. 

## Permisos de IAM necesarios para la integración de AWS Distro for OpenTelemetry Amazon CloudWatch
<a name="application-metrics-cloudwatch-iam"></a>

Integración de Amazon ECS con AWS Distro for OpenTelemetry requiere crear un rol de IAM para tareas y especificar el rol en la definición de tareas. Le recomendamos que configure también el sidecar AWS Distro for OpenTelemetry para enrutar los registros de contenedores a CloudWatch Logs, lo que requiere crear y especificar un rol de IAM de ejecución de tareas también en su definición de tarea. La consola de Amazon ECS se encarga del rol de IAM de ejecución de tareas en su nombre, pero el rol de IAM de tarea debe crearse manualmente y agregarse a la definición de tarea. Para obtener más información sobre el rol de IAM para la ejecución de tareas, consulte [Rol de IAM de ejecución de tareas de Amazon ECS](task_execution_IAM_role.md).

**importante**  
Si también recopila datos de seguimiento de aplicaciones mediante la integración AWS Distro para OpenTelemetry, asegúrese de que el rol de IAM de tarea también contenga los permisos necesarios para esa integración. Para obtener más información, consulte [Identifique las oportunidades de optimización de Amazon ECS mediante los datos de seguimiento de la aplicación](trace-data.md).  
Si la aplicación requiere permisos adicionales, debe agregarlos a esta política. Cada definición de tarea solo puede especificar un rol de IAM de tarea. Por ejemplo, si utiliza un archivo de configuración personalizado almacenado en Systems Manager, debe agregar el permiso `ssm:GetParameters` para esta política de IAM.

**Creación de un rol de servicio de Elastic Container Service (consola de IAM)**

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación de la consola de IAM, seleccione **Roles** y, a continuación, elija **Crear rol**.

1. En **Tipo de entidad de confianza**, elija **Servicio de AWS**.

1. En **Servicio o caso de uso**, seleccione **Elastic Container Service** y, a continuación, seleccione el caso de uso **Tarea de Elastic Container Service**.

1. Elija **Siguiente**.

1. En la sección **Agregar permisos**, busque **AWSDistroOpenTelemetryPolicyForXray** y, a continuación, seleccione la política.

1. (Opcional) Configure un [límite de permisos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html). Se trata de una característica avanzada que está disponible para los roles de servicio, pero no para los roles vinculados a servicios.

   1. Abra la sección **Configurar límite de permisos** y, a continuación, elija **Utilizar un límite de permisos para controlar los permisos que puedes tener el rol como máximo**.

      IAM incluye una lista de las políticas administradas por AWS y de las políticas administradas por el cliente de cada cuenta.

   1. Seleccione la política que desea utilizar para el límite de permisos.

1. Elija **Siguiente**.

1. Escriba un nombre o sufijo de nombre para el rol, que pueda ayudarle a identificar su finalidad.
**importante**  
Cuando asigne un nombre a un rol, tenga en cuenta lo siguiente:  
Los nombres de rol deben ser únicos dentro de su Cuenta de AWS, y no se puedesn hacer únicos mediante mayúsculas y minúsculas.  
Por ejemplo, no puedes crear roles denominados tanto **PRODROLE** como **prodrole**. Cuando se utiliza un nombre de rol en una política o como parte de un ARN, el nombre de rol distingue entre mayúsculas y minúsculas, sin embargo, cuando un nombre de rol les aparece a los clientes en la consola, como por ejemplo durante el proceso de inicio de sesión, el nombre de rol no distingue entre mayúsculas y minúsculas.
Dado que otras entidades podrían hacer referencia al rol, no es posible editar el nombre del rol una vez creado.

1. (Opcional) **En Descripción**, ingrese una descripción para el rol.

1. (Opcional) Para editar los casos de uso y los permisos de la función, en las secciones **Paso 1: Seleccionar entidades confiables** o en **Paso 2: Agregar permisos**, elija **Editar**.

1. (Opcional) Para ayudar a identificar, organizar o buscar el rol, agregue etiquetas como pares clave-valor. Para obtener más información sobre el uso de etiquetas en IAM, consulte [Etiquetas para recursos de AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) en la *Guía del usuario de IAM*.

1. Revise el rol y, a continuación, elija **Crear rol**.

## Especificación del sidecar de AWS Distro for OpenTelemetry en la definición de tarea
<a name="application-metrics-cloudwatch-containerdefinitions"></a>

La consola de Amazon ECS simplifica la experiencia de crear el contenedor del sidecar AWS Distro for OpenTelemetry mediante la opción **Utilizar recopilación de métricas**. Para obtener más información, consulte [Creación de una definición de tareas de Amazon ECS mediante la consola](create-task-definition.md).

Si no está utilizando la consola de Amazon ECS, puede agregar el contenedor de sidecar de AWS Distro for OpenTelemetry a la definición de tarea manualmente. En el siguiente ejemplo de definición de tareas se muestra la definición de contenedor para agregar el sidecar de AWS Distro for OpenTelemetry para la integración de Amazon CloudWatch.

```
{
	"family": "otel-using-cloudwatch",
	"taskRoleArn": "arn:aws:iam::111122223333:role/AmazonECS_OpenTelemetryCloudWatchRole",
	"executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
	"containerDefinitions": [
	   {
			"name": "aws-otel-emitter",
			"image": "application-image",
			"logConfiguration": {
				"logDriver": "awslogs",
				"options": {
					"awslogs-create-group": "true",
					"awslogs-group": "/ecs/aws-otel-emitter",
					"awslogs-region": "us-east-1",
					"awslogs-stream-prefix": "ecs"
				}
			},
			"dependsOn": [{
				"containerName": "aws-otel-collector",
				"condition": "START"
			}]
		},
		{
			"name": "aws-otel-collector",
			"image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.30.0",
			"essential": true,
			"command": [
				"--config=/etc/ecs/ecs-cloudwatch.yaml"
			],
			"logConfiguration": {
				"logDriver": "awslogs",
				"options": {
					"awslogs-create-group": "True",
					"awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector",
					"awslogs-region": "us-east-1",
					"awslogs-stream-prefix": "ecs"
				}
			}
		}
	],
	"networkMode": "awsvpc",
	"requiresCompatibilities": [
		"FARGATE"
	],
	"cpu": "1024",
	"memory": "3072"
}
```

# Exportación de métricas de aplicaciones a Amazon Managed Service for Prometheus
<a name="application-metrics-prometheus"></a>

Amazon ECS admite la exportación de las métricas de CPU, memoria, red y almacenamiento de nivel de tarea y las métricas de aplicaciones personalizadas a Amazon Managed Service for Prometheus. Esto se hace agregando el contenedor de sidecar de AWS Distro for OpenTelemetry según su definición de tarea. La consola de Amazon ECS simplifica este proceso al agregar la opción **Utilizar recopilación de métricas** cuando se crea una nueva definición de tarea. Para obtener más información, consulte [Creación de una definición de tareas de Amazon ECS mediante la consola](create-task-definition.md).

Las métricas se exportan a Amazon Managed Service for Prometheus y se pueden ver mediante el panel de control de Amazon Managed Grafana. Su aplicación debe estar instrumentada con bibliotecas Prometheus o con el SDK de OpenTelemetry. Para obtener más información sobre cómo instrumentar la aplicación con el SDK de OpenTelemetry, consulte [Introducción a AWS Distro for OpenTelemetry](https://aws-otel.github.io/docs/introduction) en la documentación de AWS Distro for OpenTelemetry.

Al utilizar las bibliotecas de Prometheus, la aplicación debe exponer un punto de conexión `/metrics` que se utiliza para extraer los datos de métricas. Para obtener más información sobre cómo instrumentar la aplicación con las bibliotecas Prometheus, consulte [Bibliotecas cliente de Prometheus](https://prometheus.io/docs/instrumenting/clientlibs/) en la documentación de Prometheus.

## Consideraciones
<a name="application-metrics-prometheus-considerations"></a>

Debe tenerse en cuenta lo siguiente cuando utiliza Amazon ECS en la integración de Fargate con AWS Distro para OpenTelemetry a fin de enviar métricas de aplicaciones a Amazon Managed Service para Prometheus.
+ La integración de AWS Distro para OpenTelemetry se admite para cargas de trabajo de Amazon ECS alojadas en Fargate y cargas de trabajo de Amazon ECS alojadas en instancias de Amazon EC2. No se admiten instancias externas en este momento.
+ Por defecto, AWS Distro for OpenTelemetry incluye todas las dimensiones de nivel de tareas disponibles para las métricas de la aplicación al exportar a Amazon Managed Service for Prometheus. También puede instrumentar su aplicación para agregar dimensiones adicionales. Para obtener más información, consulte [Introducción a Prometheus Remote Write Exporter para Amazon Managed Service for Prometheus](https://aws-otel.github.io/docs/getting-started/prometheus-remote-write-exporter) en la documentación de AWS Distro for OpenTelemetry. 

## Permisos de IAM necesarios para la integración de AWS Distro for OpenTelemetry con Amazon Managed Service for Prometheus
<a name="application-metrics-prometheus-iam"></a>

La integración de Amazon ECS con Amazon Managed Service for Prometheus mediante el sidecar de AWS Distro for openTelemetry requiere crear un rol de IAM para tareas y especificar el rol en la definición de tareas. Este rol de IAM de tarea debe crearse manualmente antes de registrar la definición de tarea. Para obtener más información sobre cómo crear un rol de tarea, consulte [Rol de IAM de tarea de Amazon ECS](task-iam-roles.md).

Le recomendamos que configure también el sidecar AWS Distro for OpenTelemetry para enrutar los registros de contenedores a CloudWatch Logs, lo que requiere crear y especificar un rol de IAM de ejecución de tareas también en su definición de tarea. La consola de Amazon ECS se encarga del rol de IAM de ejecución de tareas en su nombre, pero el rol de IAM de tarea debe crearse manualmente. Para obtener más información sobre la creación de un rol de IAM para la ejecución de tareas, consulte [Rol de IAM de ejecución de tareas de Amazon ECS](task_execution_IAM_role.md).

**importante**  
Si también recopila datos de seguimiento de aplicaciones mediante la integración AWS Distro para OpenTelemetry, asegúrese de que el rol de IAM de tarea también contenga los permisos necesarios para esa integración. Para obtener más información, consulte [Identifique las oportunidades de optimización de Amazon ECS mediante los datos de seguimiento de la aplicación](trace-data.md).

Los permisos siguientes son necesarios para la integración de AWS Distro for OpenTelemetry con Amazon Managed Service for Prometheus:
+ logs:PutLogEvents
+ logs:CreateLogGroup
+ logs:CreateLogStream
+ logs:DescribeLogStreams
+ logs:DescribeLogGroups
+ cloudwatch:PutMetricData

## Especificación del sidecar de AWS Distro for OpenTelemetry en la definición de tarea
<a name="application-metrics-prometheus-containerdefinitions"></a>

La consola de Amazon ECS simplifica la experiencia de crear el contenedor del sidecar AWS Distro for OpenTelemetry mediante la opción **Utilizar recopilación de métricas**. Para obtener más información, consulte [Creación de una definición de tareas de Amazon ECS mediante la consola](create-task-definition.md).

Si no está utilizando la consola de Amazon ECS, puede agregar el contenedor de sidecar de AWS Distro for OpenTelemetry a la definición de tarea manualmente. En el siguiente ejemplo de definición de tareas se muestra la definición de contenedor para agregar la integración de sidecar de AWS Distro for OpenTelemetry for Amazon Managed Service for Prometheus.

```
{
	"family": "otel-using-cloudwatch",
	"taskRoleArn": "arn:aws:iam::111122223333:role/AmazonECS_OpenTelemetryCloudWatchRole",
	"executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
	"containerDefinitions": [{
			"name": "aws-otel-emitter",
			"image": "application-image",
			"logConfiguration": {
				"logDriver": "awslogs",
				"options": {
					"awslogs-create-group": "true",
					"awslogs-group": "/ecs/aws-otel-emitter",
					"awslogs-region": "aws-region",
					"awslogs-stream-prefix": "ecs"
				}
			},
			"dependsOn": [{
				"containerName": "aws-otel-collector",
				"condition": "START"
			}]
		},
		{
			"name": "aws-otel-collector",
			"image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.30.0",
			"essential": true,
			"command": [
				"--config=/etc/ecs/ecs-amp.yaml"
			],
			"environment": [{
				"name": "AWS_PROMETHEUS_ENDPOINT",
				"value": "https://aps-workspaces.aws-region.amazonaws.com/workspaces/ws-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111/api/v1/remote_write"
			}],
			"logConfiguration": {
				"logDriver": "awslogs",
				"options": {
					"awslogs-create-group": "True",
					"awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector",
					"awslogs-region": "aws-region",
					"awslogs-stream-prefix": "ecs"
				}
			}
		}
	],
	"networkMode": "awsvpc",
	"requiresCompatibilities": [
		"FARGATE"
	],
	"cpu": "1024",
	"memory": "3072"
}
```