Guía detallada para la detección automática en clústeres de Amazon ECS
Prometheus proporciona docenas de mecanismos dinámicos de detección de servicios, como se describe en <scrape_config>
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_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
Ejemplos de configuración de detección de servicios de ECS
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 desd_metrics_path
establece__metrics_path__
a/metrics
. Por lo tanto, el agente de CloudWatch raspará las métricas de Prometheus deprivate_ip:host_port/metrics
y las métricas raspadas se enviarán al flujo de registrojava-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 conversion
de:23
se filtran para el análisis del puerto del contenedor. Para contenedores con un nombre deenvoy
que exponen el puerto del contenedor en9901
, 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 desd_metrics_path
establece__metrics_path__
a/stats/prometheus
. Por lo tanto, el agente de CloudWatch eliminará las métricas de Prometheus deprivate_ip:host_port/stats/prometheus
y enviará las métricas raspadas al flujo de registrosenvoy-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 desd_metrics_path
establece__metrics_path__
a/metrics
. Por lo tanto, el agente de CloudWatch raspará las métricas de Prometheus deprivate_ip:host_port/metrics
, y las métricas raspadas se enviarán al flujo de registronginx-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 dehaproxy
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 desd_metrics_path
establece__metrics_path__
a/stats/metrics
. Por lo tanto, el agente de CloudWatch raspará las métricas de Prometheus deprivate_ip:host_port/stats/metrics
, y las métricas de raspado se enviarán al flujo de registrohaproxy-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 etiquetaMY_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 desd_metrics_ports
. Se utiliza la ruta de métricas predeterminada/metrics
. Se utiliza el nombre del trabajo definido en la configuración de Prometheus.