Panduan terperinci untuk penemuan otomatis di kluster Amazon ECS - Amazon CloudWatch

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>. Namun tidak ada penemuan layanan bawaan untuk AmazonECS. CloudWatch Agen menambahkan mekanisme ini.

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 dalam dokumentasi Prometheus.

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 dari sd_metrics_path mengatur __metrics_path__ menjadi /metrics. Jadi CloudWatch agen akan mengikis metrik Prometheus private_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 dengan version dari :23 disaring untuk pemindaian port kontainer. Jika kontainer-kontainer yang bernama envoy membuka port kontainer di 9901, 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 dari sd_metrics_path mengatur __metrics_path__ menjadi /stats/prometheus. Jadi CloudWatch agen akan mengikis metrik Prometheus private_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 dari sd_metrics_path mengatur __metrics_path__ menjadi /metrics. Jadi CloudWatch agen akan mengikis metrik Prometheus private_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 bernama haproxy membuka port kontainer di 8404, port host yang dipetakan bersama dengan IP privat kontainer digunakan untuk membuat target-target pengekspor Prometheus. Nilai dari sd_metrics_path mengatur __metrics_path__ menjadi /stats/metrics. Jadi CloudWatch agen akan mengikis metrik Prometheus private_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 label MY_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 oleh sd_metrics_ports. Jalur metrik bawaan /metrics digunakan. Nama pekerjaan yang ditentukan dalam konfigurasi Prometheus digunakan.