Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Panduan terperinci untuk penemuan otomatis di kluster Amazon ECS
Prometheus menyediakan berlusin-lusin mekanisme penemuan layanan dinamis seperti yang dijelaskan di <scrape_config>
Saat penemuan layanan Amazon ECS Prometheus diaktifkan, CloudWatch agen secara berkala melakukan panggilan berikut API ke Amazon ECS dan EC2 Amazon frontend untuk mengambil metadata tugas yang sedang berjalan di cluster target. ECS ECS
EC2:DescribeInstances ECS:ListTasks ECS:ListServices ECS:DescribeContainerInstances ECS:DescribeServices ECS:DescribeTasks ECS:DescribeTaskDefinition
Metadata digunakan oleh CloudWatch agen untuk memindai target Prometheus di dalam cluster. ECS CloudWatch Agen mendukung tiga mode penemuan layanan:
-
Penemuan layanan berbasis label docker kontainer
-
ECSdefinisi tugas penemuan ARN layanan berbasis ekspresi reguler
-
ECSnama layanan penemuan layanan berbasis ekspresi reguler
Semua mode dapat digunakan bersama. CloudWatch agen de-duplikat target yang ditemukan berdasarkan:. {private_ip}:{port}/{metrics_path}
Semua target yang ditemukan ditulis ke dalam file hasil yang ditentukan oleh bidang sd_result_file
konfigurasi dalam wadah CloudWatch agen. Berikut ini adalah sebuah file hasil sampel:
- 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
Anda dapat mengintegrasikan file hasil ini secara langsung dengan penemuan layanan berbasis file Prometheus. Untuk informasi selengkapnya tentang penemuan layanan berbasis file Prometheus, silakan lihat <file_sd_config>
Misalkan file hasil ditulis ke /tmp/cwagent_ecs_auto_sd.yaml
Konfigurasi scraping Prometheus berikut akan menggunakannya.
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" ]
CloudWatch Agen juga menambahkan label tambahan berikut untuk target yang ditemukan.
-
container_name
-
TaskDefinitionFamily
-
TaskRevision
-
TaskGroup
-
StartedBy
-
LaunchType
-
job
-
__metrics_path__
-
Label docker
Ketika cluster memiliki tipe EC2 peluncuran, tiga label berikut ditambahkan.
-
InstanceType
-
VpcId
-
SubnetId
catatan
Label docker yang tidak cocok dengan ekspresi reguler [a-zA-Z_][a-zA-Z0-9_]*
akan difilter keluar. Ini cocok dengan konvensi Prometheus sebagaimana tercantum di label_name
dalam File konfigurasi
ECScontoh konfigurasi penemuan layanan
Bagian ini mencakup contoh yang menunjukkan penemuan ECS layanan.
Contoh 1
"ecs_service_discovery": { "sd_frequency": "1m", "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml", "docker_label": { } }
Contoh ini memungkinkan penemuan layanan berbasis label docker. CloudWatch Agen akan menanyakan metadata ECS tugas sekali per menit dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml
file di dalam wadah agen. CloudWatch
Nilai bawaan dari sd_port_label
di bagian docker_label
adalah ECS_PROMETHEUS_EXPORTER_PORT
. Jika ada wadah yang berjalan dalam ECS tugas yang memiliki label ECS_PROMETHEUS_EXPORTER_PORT
docker, CloudWatch agen menggunakan nilainya container port
untuk memindai semua port kontainer yang terbuka. Jika ada kecocokan, maka port host yang dipetakan ditambah IP privat kontainer akan digunakan untuk membangun konsep target pengekspor Prometheus dalam format berikut: private_ip:host_port
.
Nilai bawaan dari sd_metrics_path_label
di bagian docker_label
adalah ECS_PROMETHEUS_METRICS_PATH
. Jika kontainer tersebut memiliki label docker ini, maka nilainya akan digunakan sebagai __metrics_path__
. Jika kontainer tidak memiliki label ini, maka nilai bawaannya /metrics
akan digunakan.
Nilai bawaan dari sd_job_name_label
di bagian docker_label
adalah job
. Jika kontainer memiliki label docker ini, maka nilainya akan ditambahkan sebagai salah satu label target untuk menggantikan nama pekerjaan bawaan yang ditentukan dalam konfigurasi Prometheus. Nilai label docker ini digunakan sebagai nama aliran log di grup CloudWatch log Log.
Contoh 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" } }
Contoh ini memungkinkan penemuan layanan berbasis label docker. THe CloudWatch agen akan menanyakan ECS metadata tugas setiap 15 detik dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml
file dalam wadah agen. CloudWatch Kontainer yang memiliki label docker ECS_PROMETHEUS_EXPORTER_PORT_SUBSET_A
akan dipindai. Nilai label docker ECS_PROMETHEUS_JOB_NAME
akan digunakan sebagai nama pekerjaan.
Contoh 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" } ] }
Contoh ini memungkinkan definisi ECS tugas penemuan layanan berbasis ekspresi ARN reguler. CloudWatch Agen akan menanyakan metadata ECS tugas setiap lima menit dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml
file di dalam wadah agen. CloudWatch
Dua definisi tugas bagian ekspresi ARN reguler didefinisikan:
-
Untuk bagian pertama, ECS tugas dengan
javajmx
definisi ECS tugasnya ARN difilter untuk pemindaian port kontainer. Jika kontainer dalam ECS tugas-tugas ini mengekspos port kontainer pada 9404 atau 9406, port host yang dipetakan bersama dengan IP pribadi wadah digunakan untuk membuat target eksportir Prometheus. Nilai darisd_metrics_path
mengatur__metrics_path__
menjadi/metrics
. Jadi CloudWatch agen akan mengikis metrik Prometheusprivate_ip:host_port/metrics
dari, metrik yang dikikis dikirim ke aliran log di Log di grup log.java-prometheus
CloudWatch/aws/ecs/containerinsights/cluster_name/prometheus
-
Untuk bagian kedua, ECS tugas dengan
appmesh
definisi ECS tugas mereka ARN dan denganversion
dari:23
disaring untuk pemindaian port kontainer. Jika kontainer-kontainer yang bernamaenvoy
membuka port kontainer di9901
, port host yang dipetakan bersama dengan IP privat kontainer digunakan untuk membuat target-target pengekspor Prometheus. Nilai dalam ECS tugas-tugas ini mengekspos port kontainer pada 9404 atau 9406, port host yang dipetakan bersama dengan IP pribadi wadah digunakan untuk membuat target eksportir Prometheus. Nilai darisd_metrics_path
mengatur__metrics_path__
menjadi/stats/prometheus
. Jadi CloudWatch agen akan mengikis metrik Prometheusprivate_ip:host_port/stats/prometheus
dari, dan mengirim metrik yang tergores ke aliran log di Log di grup log.envoy-prometheus
CloudWatch/aws/ecs/containerinsights/cluster_name/prometheus
Contoh 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.*" } ] }
Contoh ini memungkinkan nama ECS layanan penemuan layanan berbasis ekspresi reguler. CloudWatch Agen akan menanyakan metadata ECS layanan setiap lima menit dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml
file dalam wadah agen. CloudWatch
Dua bagian ekspresi reguler nama layanan ditentukan:
-
Untuk bagian pertama, ECS tugas yang terkait dengan ECS layanan yang memiliki nama yang cocok dengan ekspresi reguler
^nginx-.*
difilter untuk pemindaian port kontainer. Jika kontainer dalam ECS tugas-tugas ini mengekspos port kontainer pada 9113, port host yang dipetakan bersama dengan IP pribadi wadah digunakan untuk membuat target eksportir Prometheus. Nilai darisd_metrics_path
mengatur__metrics_path__
menjadi/metrics
. Jadi CloudWatch agen akan mengikis metrik Prometheusprivate_ip:host_port/metrics
dari, dan metrik yang dikikis dikirim ke aliran log di Log di grup log.nginx-prometheus
CloudWatch/aws/ecs/containerinsights/cluster_name/prometheus
-
atau bagian kedua, ECS tugas yang terkait dengan ECS layanan yang memiliki nama yang cocok dengan ekspresi reguler
.*haproxy-service.*
difilter untuk pemindaian port kontainer. Jika kontainer-kontainer yang bernamahaproxy
membuka port kontainer di 8404, port host yang dipetakan bersama dengan IP privat kontainer digunakan untuk membuat target-target pengekspor Prometheus. Nilai darisd_metrics_path
mengatur__metrics_path__
menjadi/stats/metrics
. Jadi CloudWatch agen akan mengikis metrik Prometheusprivate_ip:host_port/stats/metrics
dari, dan metrik yang dikikis dikirim ke aliran log di Log di grup log.haproxy-prometheus
CloudWatch/aws/ecs/containerinsights/cluster_name/prometheus
Contoh 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.*" } ] }
Contoh ini memungkinkan kedua mode penemuan ECS layanan. CloudWatch Agen akan menanyakan metadata ECS tugas setiap 90 detik dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml
file dalam wadah agen. CloudWatch
Untuk konfigurasi penemuan layanan berbasis docker:
-
ECSTugas dengan label docker
MY_PROMETHEUS_EXPORTER_PORT_LABEL
akan difilter untuk pemindaian port Prometheus. Port kontainer Prometheus target ditentukan berdasarkan nilai labelMY_PROMETHEUS_EXPORTER_PORT_LABEL
. -
Nilai label docker
MY_PROMETHEUS_EXPORTER_PORT_LABEL
digunakan untuk__metrics_path__
. Jika kontainer tidak memiliki label docker ini, maka nilai bawaannya/metrics
akan digunakan. -
Nilai label docker dari
MY_PROMETHEUS_EXPORTER_PORT_LABEL
akan digunakan sebagai nama pekerjaan. Jika kontainer tidak memiliki label docker ini, maka nama pekerjaan yang ditentukan dalam konfigurasi Prometheus akan digunakan.
Untuk definisi ECS tugas konfigurasi penemuan layanan berbasis ekspresi ARN reguler:
-
ECSTugas dengan definisi ECS tugas
memcached
ARN difilter untuk pemindaian port kontainer. Port kontainer Prometheus target adalah 9150 sebagaimana yang ditentukan olehsd_metrics_ports
. Jalur metrik bawaan/metrics
digunakan. Nama pekerjaan yang ditentukan dalam konfigurasi Prometheus digunakan.