View a markdown version of this page

Guide détaillé de la découverte automatique sur les clusters Amazon ECS - Amazon CloudWatch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Guide détaillé de la découverte automatique sur les clusters Amazon ECS

Prometheus fournit des dizaines de mécanismes dynamiques de découverte de service, comme décrit dans <scrape_config>. Toutefois, il n'y a pas de découverte de service intégrée pour Amazon ECS. L' CloudWatch agent ajoute ce mécanisme.

Lorsque la découverte du service Amazon ECS Prometheus est activée, l' CloudWatch agent effectue régulièrement les appels d'API suivants aux interfaces Amazon ECS et Amazon EC2 afin de récupérer les métadonnées des tâches ECS en cours d'exécution dans le cluster ECS cible.

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

Les métadonnées sont utilisées par l' CloudWatch agent pour scanner les cibles Prometheus au sein du cluster ECS. L' CloudWatch agent prend en charge trois modes de découverte de services :

  • Découverte des services basés sur les étiquettes Container Docker

  • découverte de service basée sur l'expression régulière ARN de la tâche ECS ;

  • découverte de service basée sur l'expression régulière du nom du service ECS.

Tous les modes peuvent être utilisés ensemble. CloudWatch l'agent déduplique les cibles découvertes sur la base de :. {private_ip}:{port}/{metrics_path}

Toutes les cibles découvertes sont écrites dans un fichier de résultats spécifié par le champ sd_result_file de configuration du conteneur de l' CloudWatch agent. Voici un exemple de fichier de résultats :

- 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

Vous pouvez directement intégrer ce fichier de résultats à la découverte de services basés sur des fichiers de Prometheus. Pour plus d'informations sur la découverte de services basée sur des fichiers de Prometheus, consultez <file_sd_config>.

Supposons que le fichier de résultat soit écrit dans /tmp/cwagent_ecs_auto_sd.yaml. La configuration de récupération Prometheus suivante la consommera.

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" ]

L' CloudWatch agent ajoute également les étiquettes supplémentaires suivantes pour les cibles découvertes.

  • container_name

  • TaskDefinitionFamily

  • TaskRevision

  • TaskGroup

  • StartedBy

  • LaunchType

  • job

  • __metrics_path__

  • Étiquettes Docker

Lorsque le cluster comporte le type de lancement EC2, les trois étiquettes suivantes sont ajoutées.

  • InstanceType

  • VpcId

  • SubnetId

Note

Les étiquettes Docker qui ne correspondent pas à l'expression régulière [a-zA-Z_][a-zA-Z0-9_]* sont filtrés. Cela correspond aux conventions Prometheus répertoriées dans label_name de Fichier de configuration, compris dans la documentation Prometheus.

Exemples de configuration de la découverte de service ECS

Cette section contient des exemples qui illustrent la découverte de services ECS.

Exemple 1

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

Cet exemple active la découverte de services basée sur des étiquettes Docker. L' CloudWatch agent interrogera les métadonnées des tâches ECS une fois par minute et inscrira les cibles découvertes dans le /tmp/cwagent_ecs_auto_sd.yaml fichier du conteneur de l' CloudWatch agent.

La valeur par défaut de sd_port_label dans la section docker_label est ECS_PROMETHEUS_EXPORTER_PORT. Si un conteneur en cours d'exécution dans les tâches ECS possède une étiquette ECS_PROMETHEUS_EXPORTER_PORT Docker, l' CloudWatchagent utilise sa valeur container port pour scanner tous les ports exposés du conteneur. En cas de correspondance, le port hôte mappé ainsi que l'adresse IP privée du conteneur sont utilisés pour construire la cible de l'exportateur Prometheus au format suivant : private_ip:host_port.

La valeur par défaut de sd_metrics_path_label dans la section docker_label est ECS_PROMETHEUS_METRICS_PATH. Si le conteneur possède cette étiquette Docker, sa valeur sera utilisée comme__metrics_path__. Si le conteneur ne possède pas cette étiquette, la valeur par défaut /metrics est utilisée.

La valeur par défaut de sd_job_name_label dans la section docker_label est job. Si le conteneur possède cette étiquette Docker, sa valeur sera ajoutée comme l'une des étiquettes de la cible afin de remplacer le nom de tâche par défaut spécifié dans la configuration de Prometheus. La valeur de cette étiquette Docker est utilisée comme nom de flux de journaux dans le groupe de CloudWatch journaux Logs.

Exemple 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" } }

Cet exemple active la découverte de services basée sur des étiquettes Docker. L' CloudWatch agent interrogera les métadonnées des tâches ECS toutes les 15 secondes et écrira les cibles découvertes dans le /tmp/cwagent_ecs_auto_sd.yaml fichier du conteneur de l' CloudWatch agent. Les conteneurs portant une étiquette Docker ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A seront scannés. La valeur de l'étiquette docker ECS_PROMETHEUS_JOB_NAME est utilisée comme nom de tâche.

Exemple 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" } ] }

Cet exemple montre comment activer la découverte de service basée sur l'expression régulière ARN de la tâche ECS. L' CloudWatch agent interrogera les métadonnées des tâches ECS toutes les cinq minutes et inscrira les cibles découvertes dans le /tmp/cwagent_ecs_auto_sd.yaml fichier du conteneur de l' CloudWatch agent.

Deux sections d'expressions régulières ARN de définition de tâche sont définies :

  • Pour la première section, les tâches ECS avec javajmx dans leur ARN de définition de tâche ECS sont filtrées pour l'analyse des ports de conteneur. Si les conteneurs de ces tâches ECS exposent le port de conteneur sur 9404 ou 9406, le port hôte mappé ainsi que l'adresse IP privée du conteneur sont utilisés pour créer les cibles d'exportation Prometheus. La valeur de sd_metrics_path définit __metrics_path__ sur /metrics. Ainsi, l' CloudWatch agent va extraire les métriques Prometheus et private_ip:host_port/metrics les envoyer au flux de log dans CloudWatch Logs in the java-prometheus log group. /aws/ecs/containerinsights/cluster_name/prometheus

  • Pour la deuxième section, les tâches ECS avec appmesh dans leur ARN de définition de tâche ECS et avec la version :23 sont filtrées pour l'analyse des ports de conteneur. Pour les conteneurs dont le nom est envoy qui exposent le port de conteneur sur 9901, le port hôte mappé ainsi que l'adresse IP privée du conteneur sont utilisés pour créer les cibles d'exportation Prometheus. La valeur de ces tâches ECS expose le port de conteneur sur 9404 ou 9406, le port hôte mappé ainsi que l'adresse IP privée du conteneur sont utilisés pour créer les cibles d'exportation Prometheus. La valeur de sd_metrics_path définit __metrics_path__ sur /stats/prometheus. L' CloudWatch agent va donc extraire les métriques Prometheus et private_ip:host_port/stats/prometheus les envoyer au flux de log dans CloudWatch Logs in the envoy-prometheus log group. /aws/ecs/containerinsights/cluster_name/prometheus

Exemple 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.*" } ] }

Cet exemple montre comment activer la découverte de service basée sur l'expression régulière du nom du service ECS. L' CloudWatch agent interrogera les métadonnées des services ECS toutes les cinq minutes et inscrira les cibles découvertes dans le /tmp/cwagent_ecs_auto_sd.yaml fichier du conteneur de l' CloudWatch agent.

Deux sections d'expressions régulières de nom de service sont définies :

  • Dans la première section, les tâches ECS associées aux services ECS dont les noms correspondent à l'expression régulière ^nginx-.* sont filtrées pour l'analyse du port du conteneur. Si les conteneurs de ces tâches ECS exposent le port de conteneur sur 9113, le port hôte mappé ainsi que l'adresse IP privée du conteneur sont utilisés pour créer les cibles d'exportation Prometheus. La valeur de sd_metrics_path définit __metrics_path__ sur /metrics. L' CloudWatch agent va donc extraire les métriques Prometheusprivate_ip:host_port/metrics, et les métriques extraites sont envoyées au flux de log dans CloudWatch Logs in the nginx-prometheus log group. /aws/ecs/containerinsights/cluster_name/prometheus

  • ou la seconde section, les tâches ECS associées aux services ECS dont les noms correspondent à l'expression régulière .*haproxy-service.* sont filtrées pour l'analyse du port du conteneur. Pour les conteneurs dont le nom est haproxy qui exposent le port de conteneur sur 8404, le port hôte mappé ainsi que l'adresse IP privée du conteneur sont utilisés pour créer les cibles d'exportation Prometheus. La valeur de sd_metrics_path définit __metrics_path__ sur /stats/metrics. L' CloudWatchagent va donc extraire les métriques Prometheusprivate_ip:host_port/stats/metrics, et les métriques extraites sont envoyées au flux de log dans CloudWatch Logs in the haproxy-prometheus log group. /aws/ecs/containerinsights/cluster_name/prometheus

Exemple 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.*" } ] }

Cet exemple montre comment activer les deux modes de découverte de service ECS. L' CloudWatch agent interrogera les métadonnées des tâches ECS toutes les 90 secondes et inscrira les cibles découvertes dans le /tmp/cwagent_ecs_auto_sd.yaml fichier du conteneur de l' CloudWatch agent.

Pour la configuration Docker-based de découverte de services :

  • Les tâches ECS portant l'étiquette Docker MY_PROMETHEUS_EXPORTER_PORT_LABEL seront filtrées pour le scan des ports Prometheus. Le port de conteneur Prometheus cible est spécifié par la valeur de l'étiquette MY_PROMETHEUS_EXPORTER_PORT_LABEL.

  • La valeur de l'étiquette docker MY_PROMETHEUS_EXPORTER_PORT_LABEL est utilisée pour __metrics_path__. Si le conteneur ne possède pas cette étiquette docker, la valeur par défaut /metrics est utilisée.

  • La valeur de l'étiquette docker MY_PROMETHEUS_EXPORTER_PORT_LABEL est utilisée comme étiquette de tâche. Si le conteneur ne possède pas cette étiquette Docker, le nom de tâche défini dans la configuration de Prometheus est utilisé.

Pour la configuration de la découverte de service basée sur l'expression régulière ARN de la tâche ECS :

  • Les tâches ECS avec memcached dans l'ARN de définition de tâche ECS sont filtrées pour l'analyse des ports de conteneur. Le port de conteneur Prometheus cible est 9150 tel que défini par sd_metrics_ports. Le chemin d'accès aux métriques par défaut /metrics est utilisé. Le nom de tâche défini dans la configuration Prometheus est utilisé.