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.
Prometheus fournit des dizaines de mécanismes dynamiques de découverte de service, comme décrit dans <scrape_config>
Lorsque la découverte du service Amazon ECS Prometheus est activée, CloudWatch l'agent effectue régulièrement les appels d'API suivants aux interfaces Amazon ECS et EC2 Amazon pour 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 de service basée sur l'étiquette docker du conteneur ;
-
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 en fonction 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 possède le type de EC2 lancement, 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
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 montre comment activer la découverte de service basée sur les é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' CloudWatch agent utilise sa valeur as 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 pour remplacer le nom de tâche par défaut spécifié dans la configuration Prometheus. La valeur de cette étiquette Docker est utilisée comme nom du 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 permet la découverte de services basée sur des étiquettes docker. THe CloudWatch l'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 possédant une étiquette docker ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A
seront analysé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 interroge les métadonnées des tâches ECS toutes les cinq minutes et écrit 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 desd_metrics_path
définit__metrics_path__
sur/metrics
. L' CloudWatch agent extraira donc les métriques Prometheus, qui seront envoyées au fluxprivate_ip:host_port/metrics
CloudWatch de journaux dans Logsjava-prometheus
du groupe de journaux./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 laversion
:23
sont filtrées pour l'analyse des ports de conteneur. Pour les conteneurs dont le nom estenvoy
qui exposent le port de conteneur sur9901
, 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 desd_metrics_path
définit__metrics_path__
sur/stats/prometheus
. L' CloudWatchagent extraira donc les métriques Prometheus et les enverra au fluxprivate_ip:host_port/stats/prometheus
CloudWatch de journaux dans Logsenvoy-prometheus
du groupe de journaux./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 interroge les métadonnées des services ECS toutes les cinq minutes et écrit 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 desd_metrics_path
définit__metrics_path__
sur/metrics
. L' CloudWatch agent extraira donc les métriques Prometheus, et les métriquesprivate_ip:host_port/metrics
supprimées seront envoyées au flux CloudWatch de journaux dans Logsnginx-prometheus
du groupe de journaux./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 esthaproxy
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 desd_metrics_path
définit__metrics_path__
sur/stats/metrics
. L' CloudWatch agent extraira donc les métriques Prometheus, et les métriquesprivate_ip:host_port/stats/metrics
supprimées seront envoyées au flux CloudWatch de journaux dans Logshaproxy-prometheus
du groupe de journaux./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 interroge les métadonnées des tâches ECS toutes les 90 secondes et écrit les cibles découvertes dans le /tmp/cwagent_ecs_auto_sd.yaml
fichier du conteneur de l' CloudWatch agent.
Pour la configuration de découverte de service basée sur Docker :
-
Les tâches ECS avec l'étiquette docker
MY_PROMETHEUS_EXPORTER_PORT_LABEL
seront filtrées pour l'analyse du port Prometheus. Le port de conteneur Prometheus cible est spécifié par la valeur de l'étiquetteMY_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 n'a pas cette étiquette docker, le nom de tâche défini dans la configuration 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 parsd_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é.