Panduan mendetail untuk penemuan otomatis di klaster-klaster 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 mendetail untuk penemuan otomatis di klaster-klaster Amazon ECS

Prometheus menyediakan berlusin-lusin mekanisme penemuan layanan dinamis seperti yang dijelaskan di <scrape_config>. Namun demikian, tidak ada penemuan layanan bawaan untuk Amazon ECS. CloudWatch Agen menambahkan mekanisme ini.

Saat penemuan layanan Amazon ECS Prometheus diaktifkan, CloudWatch agen secara berkala melakukan panggilan API berikut ke Amazon ECS dan EC2 Amazon frontend untuk mengambil metadata tugas ECS yang sedang berjalan di cluster ECS target.

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

Metadata digunakan oleh CloudWatch agen untuk memindai target Prometheus dalam cluster ECS. CloudWatch Agen mendukung tiga mode penemuan layanan:

  • Penemuan layanan berbasis label docker kontainer

  • Penemuan layanan berbasis ekspresi reguler ARN penetapan tugas ARC

  • Penemuan layanan berbasis ekspresi reguler nama layanan ECS

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.

Contoh konfigurasi penemuan layanan ECS

Bagian ini mencakup contoh-contoh yang menunjukkan penemuan layanan ECS.

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 tugas ECS 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 tugas ECS yang memiliki label ECS_PROMETHEUS_EXPORTER_PORT docker, CloudWatch agen menggunakan container port nilainya 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 docker label-based service discovery. THe CloudWatch agen akan menanyakan metadata tugas ECS 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 penemuan layanan berbasis ekspresi reguler ARN penetapan tugas ECS. CloudWatch Agen akan menanyakan metadata tugas ECS setiap lima menit dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml file di dalam wadah agen. CloudWatch

Dua bagian ekspresi reguler ARN penetapan tugas ditentukan:

  • Untuk bagian pertama, tugas ECS dengan javajmx dalam ARN penetapan tugas ECS difilter untuk pemindaian port kontainer. Jika kontainer-kontainer yang ada dalam tugas ECS membuka port kontainer di 9404 atau 9406, port host yang dipetakan bersama dengan IP privat kontainer digunakan untuk membuat target-target pengekspor Prometheus. Nilai dari sd_metrics_path mengatur __metrics_path__ ke /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, tugas ECS dengan appmesh dalam ARN penetapan tugas ECS mereka dan dengan version dari :23 difilter 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 yang ada dalam tugas ECS membuka port kontainer di 9404 atau 9406, 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/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 penemuan layanan berbasis ekspresi reguler nama layanan ECS. CloudWatch Agen akan menanyakan metadata layanan ECS setiap lima menit dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml file di dalam wadah agen. CloudWatch

Dua bagian ekspresi reguler nama layanan ditentukan:

  • Untuk bagian pertama, tugas ECS yang terkait dengan layanan-layanan ECS yang memiliki nama yang cocok dengan ekspresi reguler ^nginx-.* akan difilter untuk pemindaian port kontainer. Jika kontainer-kontainer yang ada dalam tugas ECS membuka port kontainer di 9113, 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 /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, tugas ECS yang terkait dengan layanan-layanan ECS yang memiliki nama yang cocok dengan ekspresi reguler .*haproxy-service.* akan 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 layanan ECS. CloudWatch Agen akan menanyakan metadata tugas ECS setiap 90 detik dan menulis target yang ditemukan ke dalam /tmp/cwagent_ecs_auto_sd.yaml file di dalam wadah agen. CloudWatch

Untuk konfigurasi penemuan layanan berbasis docker:

  • Tugas-tugas ECS 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 konfigurasi penemuan layanan berbasis ekspresi reguler ARN penetapan tugas ECS:

  • Tugas-tugas ECS dengan memcached dalam ARN penetapan tugas ECS 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.