

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
<a name="ContainerInsights-Prometheus-Setup-autodiscovery-ecs"></a>

Prometheus menyediakan berlusin-lusin mekanisme penemuan layanan dinamis seperti yang dijelaskan di [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#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 frontend Amazon ECS dan Amazon EC2 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\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#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

Saat klaster memiliki tipe peluncuran EC2, 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](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#labelname) dalam dokumentasi Prometheus.

## Contoh konfigurasi penemuan layanan ECS
<a name="ContainerInsights-Prometheus-Setup-autodiscovery-ecs-examples"></a>

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.