Solución de problemas de las métricas de Prometheus en Amazon ECS - Amazon CloudWatch

Solución de problemas de las métricas de Prometheus en Amazon ECS

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

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 AWS 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 AWS 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 AWS 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 AWS 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_DescribeContainerInstances: el número de llamadas a la API ECS::DescribeContainerInstances realizadas.

  • AWSCLI_DescribeInstancesRequest: el número de llamadas a la API ECS::DescribeInstancesRequest realizadas.

  • AWSCLI_DescribetaskDefinition: el número de llamadas a la API ECS::DescribeTaskDefinition realizadas.

  • AWSCLI_DescribeTasks: el número de llamadas a la API ECS::DescribeTasks realizadas.

  • AWSCLI_ListTasks: 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_Get_EC2MetaData: el número de veces que se recuperaron los metadatos de instancias de contenedor de la caché.

  • LRUCache_Get_TaskDefinition: el número de veces que los metadatos de definición de tareas de ECS se recuperaron de la caché.

  • LRUCache_Size_ContainerInstance: el número de metadatos de la instancia de contenedor únicos almacenados en caché en la memoria.

  • LRUCache_Size_TaskDefinition: 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 AWS 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.