

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengatur dan mengonfigurasikan koleksi metrik-metrik Prometheus di klaster Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-ECS"></a>

Untuk mengumpulkan metrik Prometheus dari cluster Amazon ECS, Anda dapat CloudWatch menggunakan agen sebagai kolektor atau menggunakan Distro untuk kolektor. AWS OpenTelemetry Untuk informasi tentang menggunakan AWS Distro untuk OpenTelemetry kolektor, lihat [https://aws-otel.github. io/docs/getting-started/container-insights/ecs-prometheus](https://aws-otel.github.io/docs/getting-started/container-insights/ecs-prometheus).

Bagian berikut menjelaskan cara menggunakan CloudWatch agen sebagai kolektor untuk mengambil metrik Prometheus. Anda menginstal CloudWatch agen dengan pemantauan Prometheus pada cluster yang menjalankan Amazon ECS, dan Anda dapat mengonfigurasi agen secara opsional untuk mengikis target tambahan. Bagian-bagian ini juga akan menyediakan tutorial opsional untuk menyiapkan beban kerja sampel untuk digunakan dalam pengujian dengan pemantauan Prometheus. 

Wawasan Kontainer di Amazon ECS mendukung tipe-tipe peluncuran dan kombinasi mode jaringan berikut untuk metrik Prometheus:


| Tipe peluncuran Amazon ECS | Mode jaringan yang didukung | 
| --- | --- | 
|  EC2 (Linux)  |  jembatan, host, dan awsvpc  | 
|  Fargate  |  awsvpc  | 

**Persyaratan grup keamanan VPC**

Aturan masuknya kelompok keamanan untuk beban kerja Prometheus harus membuka port CloudWatch Prometheus ke agen untuk mengikis metrik Prometheus oleh IP pribadi.

Aturan keluar dari grup keamanan untuk CloudWatch agen harus memungkinkan agen untuk terhubung ke port CloudWatch beban kerja Prometheus dengan IP pribadi. 

**Topics**
+ [

# Instal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon ECS
](ContainerInsights-Prometheus-install-ECS.md)
+ [

# Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut
](ContainerInsights-Prometheus-Setup-configure-ECS.md)
+ [

# (Opsional) Menyiapkan sampel beban kerja Amazon ECS terkontainer untuk pengujian metrik Prometheus
](ContainerInsights-Prometheus-Sample-Workloads-ECS.md)

# Instal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon ECS
<a name="ContainerInsights-Prometheus-install-ECS"></a>

Bagian ini menjelaskan cara mengatur CloudWatch agen dengan pemantauan Prometheus di cluster yang menjalankan Amazon ECS. Setelah melakukan hal tersebut, agen secara otomatis melakukan scraping terhadap dan mengimpor metrik-metrik untuk beban kerja berikut yang berjalan di klaster tersebut.
+ AWS App Mesh
+ Java/JMX

Anda juga dapat mengonfigurasi agen tersebut untuk melakukan scraping atas dan mengimpor metrik-metrik dari beban kerja dan sumber Prometheus tambahan.

## Menyiapkan peran IAM
<a name="ContainerInsights-Prometheus-Setup-ECS-IAM"></a>

Anda memerlukan dua peran IAM untuk definisi tugas CloudWatch agen. Jika Anda menentukan **CreateIAMRoles=True** di CloudFormation tumpukan agar Wawasan Kontainer membuat peran ini untuk Anda, peran akan dibuat dengan izin yang benar. Jika Anda ingin membuat peran-peran itu sendiri atau menggunakan peran-peran yang sudah ada, maka peran dan izin berikut diperlukan.
+ **CloudWatch peran tugas agen ECS** - Wadah CloudWatch agen menggunakan peran ini. Ini harus mencakup **CloudWatchAgentServerPolicy** kebijakan dan kebijakan yang dikelola pelanggan yang berisi izin baca-saja berikut:
  + `ec2:DescribeInstances`
  + `ecs:ListTasks`
  + `ecs:ListServices`
  + `ecs:DescribeContainerInstances`
  + `ecs:DescribeServices`
  + `ecs:DescribeTasks`
  + `ecs:DescribeTaskDefinition`
+ **CloudWatch peran eksekusi tugas agen ECS** — Ini adalah peran yang diperlukan Amazon ECS untuk meluncurkan dan menjalankan kontainer Anda. Pastikan peran eksekusi tugas Anda memiliki **Amazon SSMReadOnlyAccess, **Amazon ECSTask ExecutionRolePolicy****, dan **CloudWatchAgentServerPolicy**kebijakan yang dilampirkan. Jika Anda ingin menyimpan data yang lebih sensitif untuk digunakan oleh Amazon ECS, silakan lihat [ Menentukan data sensitif](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html).

## Instal CloudWatch agen dengan pemantauan Prometheus dengan menggunakan CloudFormation
<a name="ContainerInsights-Prometheus-Setup-ECS-CFN"></a>

Anda gunakan AWS CloudFormation untuk menginstal CloudWatch agen dengan pemantauan Prometheus untuk klaster Amazon ECS. Daftar berikut menunjukkan parameter-parameter yang akan Anda gunakan dalam template CloudFormation .
+ **ECSClusterNama** - Menentukan target klaster Amazon ECS.
+ **Buat IAMRoles** - Tentukan **True** untuk membuat peran baru untuk peran tugas Amazon ECS dan peran eksekusi tugas Amazon ECS. Tentukan **False** untuk menggunakan kembali peran-peran yang ada.
+ **TaskRoleName**— Jika Anda menentukan **True** untuk **Buat IAMRoles**, ini menentukan nama yang akan digunakan untuk peran tugas Amazon ECS yang baru. Jika Anda menetapkan **False** untuk **Buat IAMRoles**, ini menentukan peran yang ada untuk digunakan sebagai peran tugas Amazon ECS. 
+ **ExecutionRoleName**— Jika Anda menentukan **True** untuk **Buat IAMRoles**, ini menentukan nama yang akan digunakan untuk peran eksekusi tugas Amazon ECS yang baru. Jika Anda menetapkan **False** untuk **Buat IAMRoles**, ini menentukan peran yang ada untuk digunakan sebagai peran eksekusi tugas Amazon ECS. 
+ **ECSNetworkMode** - Jika Anda menggunakan tipe peluncuran EC2, tentukan mode jaringan di sini. Harus **bridge** atau **host**.
+ **ECSLaunchJenis** - Tentukan salah satu **fargate** atau**EC2**.
+ **SecurityGroupID** - Jika **ECSNetworkModenya****awsvpc**, tentukan ID grup keamanan di sini.
+ **SubnetID** - Jika **ECSNetworkModenya****awsvpc**, tentukan ID subnet di sini.

### Sampel-sampel perintah
<a name="ContainerInsights-Prometheus-Setup-ECS-CFNcommands"></a>

Bagian ini mencakup contoh CloudFormation perintah untuk menginstal Wawasan Kontainer dengan pemantauan Prometheus dalam berbagai skenario.

**Buat CloudFormation tumpukan untuk cluster Amazon ECS dalam mode jaringan jembatan**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_NETWORK_MODE=bridge
export CREATE_IAM_ROLES=True
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name

curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
    --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

**Buat CloudFormation tumpukan untuk cluster Amazon ECS dalam mode jaringan host**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_NETWORK_MODE=host
export CREATE_IAM_ROLES=True
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name


curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
    --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ 
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

**Buat CloudFormation tumpukan untuk cluster Amazon ECS dalam mode jaringan awsvpc**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_LAUNCH_TYPE=EC2
export CREATE_IAM_ROLES=True
export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx
export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name

curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \
    --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \
                 ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \
                 ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

**Buat CloudFormation tumpukan untuk cluster Fargate dalam mode jaringan awsvpc**

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name
export ECS_LAUNCH_TYPE=FARGATE
export CREATE_IAM_ROLES=True
export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx
export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx
export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name            

curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml

aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \
    --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
    --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                 ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \
                 ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \
                 ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \
                 ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \
                 ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \
                 ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${AWS_DEFAULT_REGION} \
    --profile ${AWS_PROFILE}
```

### AWS sumber daya yang dibuat oleh CloudFormation tumpukan
<a name="ContainerInsights-Prometheus-Setup-ECS-resources"></a>

Tabel berikut mencantumkan AWS sumber daya yang dibuat saat Anda menggunakan CloudFormation untuk menyiapkan Wawasan Kontainer dengan pemantauan Prometheus di klaster Amazon ECS.


| Tipe sumber daya | Nama sumber daya | Komentar | 
| --- | --- | --- | 
|  AWS::SSM::Parameter  |  AmazonCloudWatch- CWAgent Konfigurasi-\$1 -\$1 -\$1 *ECS\$1CLUSTER\$1NAME* *ECS\$1LAUNCH\$1TYPE* *ECS\$1NETWORK\$1MODE*  |  Ini adalah CloudWatch agen dengan App Mesh default dan definisi format metrik yang Java/JMX disematkan.  | 
|  AWS::SSM::Parameter  |  AmazonCloudWatch-PrometheusConfigName-\$1*ECS\$1CLUSTER\$1NAME*-\$1*ECS\$1LAUNCH\$1TYPE*-\$1*ECS\$1NETWORK\$1MODE*  |  Ini adalah konfigurasi scraping Prometheus.  | 
|  AWS::IAM::Role  |  **\$1ECS\$1TASK\$1ROLE\$1NAME**.   |  Peran tugas Amazon ECS. Ini hanya dibuat jika Anda menentukan **True** untuk `CREATE_IAM_ROLES`.  | 
|  AWS::IAM::Role  |  **\$1\$1ECS\$1EXECUTION\$1ROLE\$1NAME\$1**   |  Peran eksekusi tugas Amazon ECS. Ini hanya dibuat jika Anda sudah menentukan **True** untuk `CREATE_IAM_ROLES`.  | 
|  AWS::ECS::TaskDefinition  |  *ECS\$1CLUSTER\$1NAME*cwagent-prometheus-\$1 -\$1 *ECS\$1LAUNCH\$1TYPE* *ECS\$1NETWORK\$1MODE*   |   | 
|  AWS::ECS::Service  |  cwagent-prometheus-replica-service-\$1*ECS\$1LAUNCH\$1TYPE*-\$1*ECS\$1NETWORK\$1MODE*  |   | 

### Menghapus CloudFormation tumpukan untuk CloudWatch agen dengan pemantauan Prometheus
<a name="ContainerInsights-Prometheus-ECS-delete"></a>

Untuk menghapus CloudWatch agen dari cluster Amazon ECS, masukkan perintah ini.

```
export AWS_PROFILE=your_aws_config_profile_eg_default
export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1
export CLOUDFORMATION_STACK_NAME=your_cloudformation_stack_name

aws cloudformation delete-stack \
--stack-name ${CLOUDFORMATION_STACK_NAME} \
--region ${AWS_DEFAULT_REGION} \
--profile ${AWS_PROFILE}
```

# Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut
<a name="ContainerInsights-Prometheus-Setup-configure-ECS"></a>

 CloudWatch Agen dengan pemantauan Prometheus membutuhkan dua konfigurasi untuk mengikis metrik Prometheus. Salah satunya adalah konfigurasi standar Prometheus sebagaimana yang didokumentasikan dalam [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) dalam dokumentasi Prometheus. Yang lainnya adalah untuk CloudWatch konfigurasi agen.

Untuk klaster-klaster Amazon ECS, konfigurasi diintegrasikan dengan Parameter Store AWS Systems Manager oleh rahasia yang ada dalam penetapan tugas Amazon ECS:
+ `PROMETHEUS_CONFIG_CONTENT` rahasia adalah untuk konfigurasi scraping Prometheus.
+ Rahasianya `CW_CONFIG_CONTENT` adalah untuk konfigurasi CloudWatch agen. 

Untuk mengikis sumber metrik Prometheus tambahan dan mengimpor metrik tersebut, Anda memodifikasi CloudWatch konfigurasi scrape Prometheus dan konfigurasi agen, lalu menerapkan kembali agen dengan konfigurasi yang diperbarui. CloudWatch 

**Persyaratan grup keamanan VPC**

Aturan masuknya kelompok keamanan untuk beban kerja Prometheus harus membuka port CloudWatch Prometheus ke agen untuk mengikis metrik Prometheus oleh IP pribadi.

Aturan keluar dari grup keamanan untuk CloudWatch agen harus memungkinkan agen untuk terhubung ke port CloudWatch beban kerja Prometheus dengan IP pribadi. 

## Konfigurasi scraping Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-global"></a>

 CloudWatch <scrape\$1config>Agen mendukung konfigurasi scrape Prometheus standar seperti yang didokumentasikan dalam dokumentasi Prometheus.[https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) Anda dapat mengedit bagian ini untuk memperbarui konfigurasi yang sudah ada dalam file ini, dan menambahkan target-target scraping Prometheus tambahan. Secara bawaan, file konfigurasi sampel berisi baris-baris konfigurasi global berikut ini:

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
```
+ **scrape\$1interval**— Mendefinisikan seberapa sering scraping akan dilakukan ke target.
+ **scrape\$1timeout**— Mendefinisikan berapa lama waktu tunggu sebelum permintaan scraping habis.

Anda juga dapat menentukan nilai-nilai yang berbeda untuk pengaturan ini di level pekerjaan, untuk mengganti konfigurasi global.

### Pekerjaan scraping Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-scrape"></a>

File CloudWatch YAMM agen sudah memiliki beberapa pekerjaan pengikisan default yang dikonfigurasi. Sebagai contoh, dalam file YAML untuk Amazon ECS seperti `cwagent-ecs-prometheus-metric-for-bridge-host.yaml`, pekerjaan scraping bawaan dikonfigurasi di bagian `ecs_service_discovery`.

```
"ecs_service_discovery": {
                  "sd_frequency": "1m",
                  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
                  "docker_label": {
                  },
                  "task_definition_list": [
                    {
                      "sd_job_name": "ecs-appmesh-colors",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition\/.*-ColorTeller-(white):[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    },
                    {
                      "sd_job_name": "ecs-appmesh-gateway",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition/.*-ColorGateway:[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    }
                  ]
                }
```

Masing-masing target default ini dikikis, dan metrik dikirim ke CloudWatch peristiwa log menggunakan format metrik yang disematkan. Untuk informasi selengkapnya, lihat [Menyematkan metrik dalam log](CloudWatch_Embedded_Metric_Format.md).

Peristiwa log dari kluster Amazon ECS disimpan dalam grup log**///aws/ecs/containerinsights*cluster\$1name*/prometheus**.

Setiap pekerjaan scraping dimuat dalam log stream yang berbeda di grup log ini.

Untuk menambahkan sebuah target scraping baru, Anda harus menambahkan sebuah entri baru di bagian `task_definition_list` pada bagian `ecs_service_discovery` file YAML, dan kemudian mulai ulang agen tersebut. Untuk contoh proses ini, silakan lihat [Tutorial untuk menambahkan sebuah target scraping Prometheus baru: metrik Server API Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).

## CloudWatch konfigurasi agen untuk Prometheus
<a name="ContainerInsights-Prometheus-Setup-cw-agent-config"></a>

File konfigurasi CloudWatch agen memiliki `prometheus` bagian di bawah `metrics_collected` untuk konfigurasi pengikisan Prometheus. File konfigurasi tersebut mencakup opsi-opsi konfigurasi berikut:
+ **cluster\$1name**— menentukan nama klaster yang akan ditambahkan sebagai label pada peristiwa log. Bidang ini bersifat opsional. Jika Anda menghilangkannya, maka agen akan dapat mendeteksi nama klaster Amazon ECS.
+ **log\$1group\$1name**— menentukan nama grup log untuk metrik-metrik Prometheus yang di-scraping. Bidang ini bersifat opsional. Jika Anda menghilangkannya, CloudWatch gunakan**/aws/ecs/containerinsights/*cluster\$1name*/prometheus untuk** log dari cluster Amazon ECS.
+ **prometheus\$1config\$1path**— menentukan jalur file konfigurasi scraping Prometheus. Jika nilai bidang ini dimulai dengan `env:`, maka konten file konfigurasi Prometheus scraping akan diambil dari variabel lingkungan kontainer. Jangan ubah bidang ini.
+ **ecs\$1service\$1discovery**— adalah bagian untuk menentukan konfigurasi fungsi penemuan otomatis target Amazon ECS Prometheus. Dua mode didukung untuk menemukan target-target Prometheus: penemuan berdasarkan label docker kontainer atau penemuan berdasarkan ekspresi reguler ARN penetapan tugas Amazon ECS. Anda dapat menggunakan dua mode sekaligus dan CloudWatch agen akan men-de-duplikasikan target yang ditemukan berdasarkan: *\$1private\$1ip\$1:\$1port\$1/\$1metrics\$1path\$1*.

  Bagian `ecs_service_discovery` dapat berisi bidang-bidang berikut:
  + `sd_frequency` adalah frekuensi untuk menemukan pengekspor Prometheus. Tentukan sebuah angka dan sebuah akhiran unit. Sebagai contoh, `1m` satu kali per menit atau `30s` satu kali per 30 detik. Akhiran unit yang valid adalah `ns`, `us`, `ms`, `s`, `m`, dan `h`.

    Bidang ini bersifat opsional. Bawaannya adalah 60 detik (1 menit).
  + `sd_target_cluster` adalah nama klaster Amazon ECS target untuk penemuan otomatis. Bidang ini bersifat opsional. Defaultnya adalah nama cluster Amazon ECS tempat CloudWatch agen diinstal. 
  + `sd_cluster_region` adalah Wilayah klaster Amazon ECS target. Bidang ini bersifat opsional. Bawaan adalah Wilayah klaster ECS Amazon tempat CloudWatch agen terpasang.
  + `sd_result_file` adalah jalur file YAML untuk hasil-hasil target Prometheus. Konfigurasi scraping Prometheus akan merujuk pada file ini.
  + `docker_label` adalah sebuah bagian opsional yang dapat Anda gunakan untuk menentukan konfigurasi untuk penemuan layanan berbasis label docker. Jika Anda menghilangkan bagian ini, maka penemuan berbasis label docker tidak akan digunakan. Bagian ini dapat berisi bidang-bidang berikut:
    + `sd_port_label` adalah nama label docker dari kontainer yang menentukan port kontainer untuk metrik-metrik Prometheus. Nilai bawaannya adalah `ECS_PROMETHEUS_EXPORTER_PORT`. Jika wadah tidak memiliki label docker ini, CloudWatch agen akan melewatkannya.
    + `sd_metrics_path_label` adalah nama label docker dari kontainer yang menentukan jalur metrik-metrik Prometheus. Nilai bawaannya adalah `ECS_PROMETHEUS_METRICS_PATH`. Jika kontainer tidak memiliki label docker ini, maka agen akan mengasumsikan jalur default `/metrics`.
    + `sd_job_name_label` adalah nama label docker dari kontainer yang menentukan nama pekerjaan scraping Prometheus. Nilai bawaannya adalah `job`. Jika wadah tidak memiliki label docker ini, CloudWatch agen menggunakan nama pekerjaan dalam konfigurasi scrape Prometheus.
  + `task_definition_list` adalah sebuah bagian opsional yang dapat Anda gunakan untuk menentukan konfigurasi penemuan layanan berbasis penetapan tugas. Jika Anda menghilangkan bagian ini, maka penemuan berbasis penetapan tugas tidak akan digunakan. Bagian ini dapat berisi bidang-bidang berikut:
    + `sd_task_definition_arn_pattern` adalah pola yang akan digunakan untuk menentukan penetapan tugas Amazon ECS yang harus ditemukan. Ini adalah ekspresi biasa.
    + `sd_metrics_ports` mencantumkan containerPort untuk metrik-metrik Prometheus. Pisahkan containerPorts dengan titik koma.
    + `sd_container_name_pattern` menentukan nama-nama kontainer tugas Amazon ECS. Ini adalah ekspresi biasa.
    + `sd_metrics_path` menentukan jalur metrik Prometheus. Jika Anda menghilangkannya, maka agen tersebut akan mengasumsikan jalur bawaan `/metrics`
    + `sd_job_name` menyebutkan nama pekerjaan scraping Prometheus. Jika Anda menghilangkan bidang ini, CloudWatch agen menggunakan nama pekerjaan dalam konfigurasi scrape Prometheus.
  + `service_name_list_for_tasks` adalah sebuah bagian opsional yang dapat Anda gunakan untuk menentukan konfigurasi penemuan berbasis nama layanan. Jika Anda menghilangkan bagian ini, maka penemuan berbasis nama layanan tidak akan digunakan. Bagian ini dapat berisi bidang-bidang berikut:
    + `sd_service_name_pattern` adalah pola yang digunakan untuk menentukan layanan Amazon ECS tempat di mana tugas ditemukan. Ini adalah ekspresi biasa.
    + `sd_metrics_ports` Mencantumkan `containerPort` untuk metrik-metrik Prometheus. Pisahkan beberapa `containerPorts` dengan titik koma.
    + `sd_container_name_pattern` menentukan nama-nama kontainer tugas Amazon ECS. Ini adalah ekspresi biasa.
    + `sd_metrics_path` menentukan jalur metrik-metrik Prometheus. Jika Anda menghilangkannya, maka agen tersebut akan mengasumsikan jalur bawaannya adalah `/metrics`
    + `sd_job_name` menyebutkan nama pekerjaan scraping Prometheus. Jika Anda menghilangkan bidang ini, CloudWatch agen menggunakan nama pekerjaan dalam konfigurasi scrape Prometheus. 
+ **metric\$1declaration**— adalah bagian-bagian yang menentukan larik log dengan format metrik tersemat yang akan dihasilkan. Ada `metric_declaration` bagian untuk setiap sumber Prometheus bahwa CloudWatch impor agen dari secara default. Masing-masing bagian ini mencakup bidang-bidang berikut:
  + `label_matcher` adalah ekspresi reguler yang memeriksa nilai dari label-label yang tercantum dalam `source_labels`. Metrik yang cocok diaktifkan untuk dimasukkan dalam format metrik tertanam yang dikirim ke CloudWatch. 

    Jika Anda memiliki beberapa label yang ditentukan dalam `source_labels`, maka kami menyarankan Anda untuk tidak menggunakan karakter `^` atau `$` dalam ekspresi reguler untuk `label_matcher`.
  + `source_labels` menentukan nilai dari label-label yang diperiksa oleh baris `label_matcher`.
  + `label_separator` menentukan pemisah yang akan digunakan dalam baris ` label_matcher` jika ada beberapa `source_labels` yang ditetapkan. Nilai default-nya `;`. Anda dapat melihat nilai-nilai bawaan ini digunakan di `label_matcher` dalam contoh berikut.
  + `metric_selectors` adalah ekspresi reguler yang menentukan metrik yang akan dikumpulkan dan dikirim ke CloudWatch.
  + `dimensions` adalah daftar label yang akan digunakan sebagai CloudWatch dimensi untuk setiap metrik yang dipilih.

Lihat contoh `metric_declaration` berikut ini.

```
"metric_declaration": [
  {
     "source_labels":[ "Service", "Namespace"],
     "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system$",
     "dimensions":[
        ["Service", "Namespace"]
     ],
     "metric_selectors":[
        "^coredns_dns_request_type_count_total$"
     ]
  }
]
```

Contoh ini mengonfigurasikan sebuah bagian format metrik tersemat yang akan dikirim sebagai sebuah peristiwa log jika kondisi-kondisi berikut dipenuhi:
+ Nilai dari `Service` berisi `node-exporter` atau `kube-dns`.
+ Nilai dari `Namespace` adalah `kube-system`.
+ Metrik Prometheus `coredns_dns_request_type_count_total` memuat label `Service` dan `Namespace`.

Peristiwa log yang dikirim mencakup bagian yang disorot berikut ini:

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"coredns_dns_request_type_count_total"
            }
         ],
         "Dimensions":[
            [
               "Namespace",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "Namespace":"kube-system",
   "Service":"kube-dns",
   "coredns_dns_request_type_count_total":2562,
   "eks_amazonaws_com_component":"kube-dns",
   "instance":"192.168.61.254:9153",
   "job":"kubernetes-service-endpoints",
   ...
}
```

# 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.

# (Opsional) Menyiapkan sampel beban kerja Amazon ECS terkontainer untuk pengujian metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS"></a>

Untuk menguji dukungan metrik Prometheus CloudWatch di Container Insights, Anda dapat menyiapkan satu atau beberapa beban kerja kontainer berikut. CloudWatch Agen dengan dukungan Prometheus secara otomatis mengumpulkan metrik dari masing-masing beban kerja ini. Untuk melihat metrik-metrik yang dikumpulkan secara bawaan, silakan lihat [Metrik Prometheus dikumpulkan oleh agen CloudWatch](ContainerInsights-Prometheus-metrics.md).

**Topics**
+ [

# Contoh beban kerja App Mesh untuk klaster-klaster Amazon ECS
](ContainerInsights-Prometheus-Sample-Workloads-ECS-appmesh.md)
+ [

# Contoh Java/JMX beban kerja untuk klaster Amazon ECS
](ContainerInsights-Prometheus-Sample-Workloads-ECS-javajmx.md)
+ [

# Beban kerja NGINX sampel untuk klaster-klaster Amazon ECS
](ContainerInsights-Prometheus-Setup-nginx-ecs.md)
+ [

# Beban kerja NGINX Plus sampel untuk klaster-klaster Amazon ECS
](ContainerInsights-Prometheus-Setup-nginx-plus-ecs.md)
+ [

# Tutorial untuk menambahkan sebuah target scraping Prometheus baru: Memcached di Amazon ECS
](ContainerInsights-Prometheus-Setup-memcached-ecs.md)
+ [

# Tutorial untuk mengikis metrik Redis OSS Prometheus di Amazon ECS Fargate
](ContainerInsights-Prometheus-Setup-redis-ecs.md)

# Contoh beban kerja App Mesh untuk klaster-klaster Amazon ECS
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS-appmesh"></a>

Untuk mengumpulkan metrik-metrik dari sampel beban kerja Prometheus untuk Amazon ECS, Anda harus menjalankan Wawasan Kontainer di klaster. Untuk informasi tentang cara melakukan instalasi Wawasan Kontainer, silakan lihat [Menyiapkan Wawasan Kontainer di Amazon ECS](deploy-container-insights-ECS.md).

Pertama, ikuti [ panduan](https://github.com/aws/aws-app-mesh-examples/tree/main/examples/apps/colorapp#app-mesh-walkthrough-deploy-the-color-app-on-ecs) ini untuk menerapkan aplikasi warna sampel di klaster Amazon ECS Anda. Setelah selesai, Anda akan memiliki metrik-metrik App Mesh Prometheus di port 9901.

Selanjutnya, ikuti langkah-langkah ini untuk menginstal CloudWatch agen dengan pemantauan Prometheus pada cluster Amazon ECS yang sama tempat Anda menginstal aplikasi warna. Langkah-langkah di bagian ini menginstal CloudWatch agen dalam mode jaringan jembatan. 

Variabel lingkungan `ENVIRONMENT_NAME`, `AWS_PROFILE`, dan `AWS_DEFAULT_REGION` yang Anda tetapkan dalam panduan juga akan digunakan dalam langkah-langkah berikut.

**Untuk menginstal CloudWatch agen dengan pemantauan Prometheus untuk pengujian**

1. Unduh CloudFormation template dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
   ```

1. Atur mode jaringan dengan memasukkan perintah berikut.

   ```
   export ECS_CLUSTER_NAME=${ENVIRONMENT_NAME}
   export ECS_NETWORK_MODE=bridge
   ```

1. Buat CloudFormation tumpukan dengan memasukkan perintah berikut.

   ```
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \
                    ParameterKey=CreateIAMRoles,ParameterValue=True \
                    ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \
                    ParameterKey=TaskRoleName,ParameterValue=CWAgent-Prometheus-TaskRole-${ECS_CLUSTER_NAME} \
                    ParameterKey=ExecutionRoleName,ParameterValue=CWAgent-Prometheus-ExecutionRole-${ECS_CLUSTER_NAME} \
       --capabilities CAPABILITY_NAMED_IAM \
       --region ${AWS_DEFAULT_REGION} \
       --profile ${AWS_PROFILE}
   ```

1. (Opsional) Saat CloudFormation tumpukan dibuat, Anda melihat `CREATE_COMPLETE` pesan. Jika Anda memeriksa status sebelum melihat pesan tersebut, silakan masukkan perintah berikut.

   ```
   aws cloudformation describe-stacks \
   --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
   --query 'Stacks[0].StackStatus' \
   --region ${AWS_DEFAULT_REGION} \
   --profile ${AWS_PROFILE}
   ```

**Pemecahan Masalah**

Langkah-langkah dalam panduan menggunakan jq untuk melakukan penguraian atas hasil output AWS CLI. Untuk informasi selengkapnya tentang melakukan instalasi jq, silakan lihat [ jq](https://stedolan.github.io/jq/). Gunakan perintah berikut untuk mengatur format output bawaan AWS CLI Anda menjadi JSON sehingga jq dapat menguraikannya dengan benar. 

```
$ aws configure
```

Saat tanggapan menampilkan `Default output format`, masukkan **json**.

## Copot pemasangan CloudWatch agen dengan pemantauan Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS-appmesh-uninstall"></a>

Setelah Anda selesai menguji, masukkan perintah berikut untuk menghapus instalan CloudWatch agen dengan menghapus tumpukan. CloudFormation 

```
aws cloudformation delete-stack \
--stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
--region ${AWS_DEFAULT_REGION} \
--profile ${AWS_PROFILE}
```

# Contoh Java/JMX beban kerja untuk klaster Amazon ECS
<a name="ContainerInsights-Prometheus-Sample-Workloads-ECS-javajmx"></a>

JMX Exporter adalah sebuah pengekspor Prometheus resmi yang dapat melakukan scraping dan mengekspos JMX mBeans sebagai metrik-metrik Prometheus. Untuk informasi selengkapnya, silakan lihat [prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter).

 CloudWatch Agen dengan dukungan Prometheus menggores metrik Prometheus berdasarkan Java/JMX konfigurasi penemuan layanan di cluster Amazon ECS. Anda dapat mengonfigurasi JMX Exporter untuk mengekspos metrik-metrik sebuah pada port atau metrik\$1path yang berbeda. Jika Anda mengubah port atau jalur, perbarui `ecs_service_discovery` bagian default dalam konfigurasi CloudWatch agen.

Untuk mengumpulkan metrik-metrik dari sampel beban kerja Prometheus untuk Amazon ECS, Anda harus menjalankan Wawasan Kontainer di klaster. Untuk informasi tentang cara melakukan instalasi Wawasan Kontainer, silakan lihat [Menyiapkan Wawasan Kontainer di Amazon ECS](deploy-container-insights-ECS.md).

**Untuk menginstal beban kerja Java/JMX sampel untuk klaster Amazon ECS**

1. Ikuti langkah-langkah yang ada di bagian ini untuk membuat citra Docker Anda.
   + [Contoh: Citra Docker Aplikasi Jar Java dengan metrik-metrik Prometheus](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md#ContainerInsights-Prometheus-Sample-Workloads-javajmx-jar)
   + [Contoh: Citra Docker Apache Tomcat dengan metrik-metrik Prometheus](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md#ContainerInsights-Prometheus-Sample-Workloads-javajmx-tomcat)

1. Tentukan dua label docker berikut di file penetapan tugas Amazon ECS. Kemudian, Anda akan dapat menjalankan penetapan tugas sebagai sebuah layanan Amazon ECS atau tugas Amazon ECS dalam klaster.
   + Tetapkan `ECS_PROMETHEUS_EXPORTER_PORT` untuk menunjuk ke containerPort tempat metrik Prometheus dibuka.
   + Atur `Java_EMF_Metrics` menjadi `true`. CloudWatch Agen menggunakan bendera ini untuk menghasilkan format metrik yang disematkan dalam peristiwa log.

   Berikut ini adalah contohnya:

   ```
   {
     "family": "workload-java-ec2-bridge",
     "taskRoleArn": "{{task-role-arn}}",
     "executionRoleArn": "{{execution-role-arn}}",
     "networkMode": "bridge",
     "containerDefinitions": [
       {
         "name": "tomcat-prometheus-workload-java-ec2-bridge-dynamic-port",
         "image": "your_docker_image_tag_for_tomcat_with_prometheus_metrics",
         "portMappings": [
           {
             "hostPort": 0,
             "protocol": "tcp",
             "containerPort": 9404
           }
         ],
         "dockerLabels": {
           "ECS_PROMETHEUS_EXPORTER_PORT": "9404",
           "Java_EMF_Metrics": "true"
         }
       }
     ],
     "requiresCompatibilities": [
       "EC2"  ],
     "cpu": "256",
     "memory": "512"
     }
   ```

Pengaturan default CloudWatch agen dalam CloudFormation template memungkinkan penemuan layanan berbasis label docker dan penemuan layanan berbasis ARN definisi tugas. Untuk melihat setelan default ini, lihat baris 65 dari [file konfigurasi YAMM CloudWatch agen](https://github.com/aws-samples/amazon-cloudwatch-container-insights/blob/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml#L65). Kontainer-kontainer yang memiliki label `ECS_PROMETHEUS_EXPORTER_PORT` akan ditemukan secara otomatis berdasarkan port kontainer yang ditentukan untuk scraping Prometheus. 

Pengaturan default CloudWatch agen juga memiliki `metric_declaration` pengaturan untuk Java/JMX pada baris 112 dari file yang sama. Semua label docker pada kontainer target akan ditambahkan sebagai label tambahan dalam metrik Prometheus dan dikirim ke CloudWatch Catatan. Untuk Java/JMX kontainer dengan label docker`Java_EMF_Metrics=“true”`, format metrik yang disematkan akan dibuat. 

# Beban kerja NGINX sampel untuk klaster-klaster Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-nginx-ecs"></a>

Eksportir NGINX Prometheus dapat melakukan scraping dan mengekspos data NGINX sebagai metrik Prometheus. Contoh ini menggunakan pengekspor tersebut bersama dengan layanan proksi terbalik NGINX untuk Amazon ECS.

Untuk informasi lebih lanjut tentang eksportir Prometheus NGINX, lihat di Github. [ nginx-prometheus-exporter](https://github.com/nginxinc/nginx-prometheus-exporter) Untuk informasi selengkapnya tentang proxy terbalik NGINX, lihat [ ecs-nginx-reverse-proxy](https://github.com/awslabs/ecs-nginx-reverse-proxy)di Github.

 CloudWatch Agen dengan dukungan Prometheus mengikis metrik NGINX Prometheus berdasarkan konfigurasi penemuan layanan di cluster Amazon ECS. Anda dapat mengonfigurasi NGINX Prometheus Exporter untuk mengekspos metrik-metrik sebuah pada port atau jalur yang berbeda. Jika Anda mengubah port atau jalur, perbarui `ecs_service_discovery` bagian dalam file konfigurasi CloudWatch agen.

## Melakukan instalasi beban kerja sampel proksi terbalik NGINX untuk klaster-klaster Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-ecs-setup"></a>

Ikuti langkah-langkah berikut ini untuk melakukan instalasi beban kerja sampel proksi terbalik NGINX.

### Membuat citra Docker
<a name="ContainerInsights-Prometheus-nginx-ecs-setup-docker"></a>

**Cara membuat citra Docker untuk beban kerja sampel proksi terbalik NGINX**

1. [Unduh folder berikut dari repo proxy terbalik NGINX: https://github.com/awslabs/ecs-nginx-reverse-proxy/-proxy/. tree/master/reverse](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/)

1. Temukan direktori `app` dan bangun sebuah citra dari direktori tersebut:

   ```
   docker build -t web-server-app ./path-to-app-directory
   ```

1. Buat sebuah citra kustom untuk NGINX. Pertama, buat sebuah direktori dengan dua file berikut:
   + Dockerfile sampel:

     ```
     FROM nginx
     COPY nginx.conf /etc/nginx/nginx.conf
     ```
   + `nginx.conf`File, dimodifikasi dari [ https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/):

     ```
     events {
       worker_connections 768;
     }
     
     http {
       # Nginx will handle gzip compression of responses from the app server
       gzip on;
       gzip_proxied any;
       gzip_types text/plain application/json;
       gzip_min_length 1000;
     
       server{
         listen 8080;
         location /stub_status {
             stub_status   on;
         }
       }
     
       server {
         listen 80;
     
         # Nginx will reject anything not matching /api
         location /api {
           # Reject requests with unsupported HTTP method
           if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
             return 405;
           }
     
           # Only requests matching the whitelist expectations will
           # get sent to the application server
           proxy_pass http://app:3000;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache_bypass $http_upgrade;
         }
       }
     }
     ```
**catatan**  
`stub_status` harus diaktifkan pada port yang sama yang `nginx-prometheus-exporter` dikonfigurasi untuk mengikis metrik-metrik darinya. Dalam penetapan tugas contoh kita, `nginx-prometheus-exporter` dikonfigurasi untuk melakukan scraping pada metrik-metrik dari port 8080.

1. Membangun sebuah citra dari file yang ada dalam direktori baru Anda:

   ```
   docker build -t nginx-reverse-proxy ./path-to-your-directory
   ```

1. Unggah citra baru Anda ke sebuah repositori citra yang akan digunakan nanti.

### Buat penetapan tugas untuk menjalankan NGINX dan aplikasi web server di Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-ecs-setup-task"></a>

Berikutnya, Anda menyiapkan penetapan tugas.

Penetapan tugas ini memungkinkan pengumpulan dan ekspor metrik-metrik NGINX Prometheus. Kontainer NGINX melacak masukan dari aplikasi, dan membuka data itu ke port 8080, sebagaimana diatur dalam `nginx.conf`. Wadah eksportir prometheus NGINX menggores metrik ini, dan mempostingnya ke port 9113, untuk digunakan di. CloudWatch

**Cara menyiapkan penetapan tugas untuk beban kerja Amazon ECS sampel NGINX**

1. Buat sebuah penetapan tugas file JSON dengan konten berikut. Ganti *your-customized-nginx-iamge* dengan URI gambar untuk gambar NGINX Anda yang disesuaikan, dan ganti *your-web-server-app-image* dengan URI gambar untuk image aplikasi server web Anda.

   ```
   {
     "containerDefinitions": [
       {
         "name": "nginx",
         "image": "your-customized-nginx-image",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "portMappings": [
           {
             "containerPort": 80,
             "protocol": "tcp"
           }
         ],
         "links": [
           "app"
         ]
       },
       {
         "name": "app",
         "image": "your-web-server-app-image",
         "memory": 256,
         "cpu": 256,
         "essential": true
       },
       {
         "name": "nginx-prometheus-exporter",
         "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "command": [
           "-nginx.scrape-uri",
           "http://nginx:8080/stub_status"
       ],
       "links":[
         "nginx"
       ],
         "portMappings":[
           {
             "containerPort": 9113,
             "protocol": "tcp"
           }
         ]
       }
     ],
     "networkMode": "bridge",
     "placementConstraints": [],
     "family": "nginx-sample-stack"
   }
   ```

1. Daftarkan penetapan tugas dengan memasukkan perintah berikut.

   ```
   aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json
   ```

1. Untuk membuat sebuah layanan untuk menjalankan tugas dengan memasukkan perintah berikut:

   Pastikan untuk tidak mengubah nama layanan. Kami akan menjalankan layanan CloudWatch agen menggunakan konfigurasi yang mencari tugas menggunakan pola nama layanan yang memulainya. Misalnya, bagi CloudWatch agen untuk menemukan tugas yang diluncurkan oleh perintah ini, Anda dapat menentukan nilai `sd_service_name_pattern` menjadi`^nginx-service$`. Bagian selanjutnya menyediakan detail yang lebih lengkap.

   ```
   aws ecs create-service \
    --cluster your-cluster-name \
    --service-name nginx-service \
    --task-definition nginx-sample-stack:1 \
    --desired-count 1
   ```

### Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus NGINX
<a name="ContainerInsights-Prometheus-nginx-ecs-setup-agent"></a>

Langkah terakhir adalah mengonfigurasi CloudWatch agen untuk mengikis metrik NGINX. Dalam contoh ini, CloudWatch agen menemukan tugas melalui pola nama layanan, dan port 9113, di mana eksportir mengekspos metrik prometheus untuk NGINX. Dengan tugas yang ditemukan dan metrik yang tersedia, CloudWatch agen mulai memposting metrik yang dikumpulkan ke aliran log. **nginx-prometheus-exporter** 

**Untuk mengonfigurasi CloudWatch agen untuk mengikis metrik NGINX**

1. Unduh file YAML versi terbaru yang diperlukan dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
   ```

1. Buka file dengan editor teks, dan temukan konfirmasi CloudWatch agen lengkap di `value` kunci di bagian`resource:CWAgentConfigSSMParameter`. Kemudian, di bagian `ecs_service_discovery`, tambahkan bagian `service_name_list_for_tasks` berikut.

   ```
   "service_name_list_for_tasks": [
     {
       "sd_job_name": "nginx-prometheus-exporter",
       "sd_metrics_path": "/metrics",
       "sd_metrics_ports": "9113",
       "sd_service_name_pattern": "^nginx-service$"
      }
   ],
   ```

1. Dalam file yang sama, tambahkan bagian berikut di bagian `metric_declaration` untuk mengizinkan metrik NGINX. Pastikan untuk mengikuti pola indentasi yang ada saat itu.

   ```
   {
     "source_labels": ["job"],
     "label_matcher": ".*nginx.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]],
     "metric_selectors": [
       "^nginx_.*$"
     ]
   },
   ```

1. Jika Anda belum memiliki CloudWatch agen yang digunakan di cluster ini, lewati ke langkah 8.

   Jika Anda sudah memiliki CloudWatch agen yang disebarkan di cluster Amazon ECS dengan menggunakan AWS CloudFormation, Anda dapat membuat set perubahan dengan memasukkan perintah berikut:

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION \
       --change-set-name nginx-scraping-support
   ```

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Mengungkap changeset yang baru dibuat. **nginx-scraping-support** Anda akan melihat satu perubahan diterapkan ke sumber daya **CWAgentConfig SSMParameter**. Jalankan changeset dan restart tugas CloudWatch agen dengan memasukkan perintah berikut:

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Tunggu sekitar 10 detik, kemudian masukkan perintah berikut.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Jika Anda menginstal CloudWatch agen dengan pengumpulan metrik Prometheus di cluster untuk pertama kalinya, masukkan perintah berikut.

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

## Menampilkan metrik dan log NGINX Anda
<a name="ContainerInsights-Prometheus-Setup-nginx-view"></a>

Sekarang Anda dapat menampilkan metrik NGINX yang sedang dikumpulkan.

**Cara menampilkan metrik untuk sampel beban kerja NGINX Anda**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di Wilayah tempat klaster Anda berjalan, pilih **Metrik** pada panel navigasi yang ada sebelah kiri. Temukan namespace **ContainerInsights/Prometheus** untuk melihat metriknya.

1. Untuk melihat peristiwa CloudWatch Log, pilih **Grup log** di panel navigasi. Peristiwa ada di grup log **/aws/containerinsights/ *your\$1cluster\$1name* /prometheus**, di aliran log. *nginx-prometheus-exporter*

# Beban kerja NGINX Plus sampel untuk klaster-klaster Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-nginx-plus-ecs"></a>

NGINX Plus adalah NGINX versi komersial. Anda harus memiliki sebuah lisensi untuk menggunakannya. Untuk informasi selengkapnya, silakan lihat [NGINX Plus](https://www.nginx.com/products/nginx/)

Eksportir NGINX Prometheus dapat melakukan scraping dan mengekspos data NGINX sebagai metrik Prometheus. Contoh ini menggunakan pengekspor tersebut bersama dengan layanan proksi terbalik NGINX Plus untuk Amazon ECS.

Untuk informasi lebih lanjut tentang eksportir Prometheus NGINX, lihat di Github. [ nginx-prometheus-exporter](https://github.com/nginxinc/nginx-prometheus-exporter) Untuk informasi selengkapnya tentang proxy terbalik NGINX, lihat [ ecs-nginx-reverse-proxy](https://github.com/awslabs/ecs-nginx-reverse-proxy)di Github.

 CloudWatch Agen dengan dukungan Prometheus menggores metrik NGINX Plus Prometheus berdasarkan konfigurasi penemuan layanan di cluster Amazon ECS. Anda dapat mengonfigurasi NGINX Prometheus Exporter untuk mengekspos metrik-metrik sebuah pada port atau jalur yang berbeda. Jika Anda mengubah port atau jalur, perbarui `ecs_service_discovery` bagian dalam file konfigurasi CloudWatch agen.

## Melakukan instalasi beban kerja sampel proksi terbalik NGINX Plus untuk klaster-klaster Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup"></a>

Ikuti langkah-langkah berikut ini untuk melakukan instalasi beban kerja sampel proksi terbalik NGINX.

### Membuat citra Docker
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup-docker"></a>

**Cara membuat citra Docker untuk beban kerja sampel proksi terbalik NGINX Plus**

1. [Unduh folder berikut dari repo proxy terbalik NGINX: https://github.com/awslabs/ecs-nginx-reverse-proxy/-proxy/. tree/master/reverse](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/)

1. Temukan direktori `app` dan bangun sebuah citra dari direktori tersebut:

   ```
   docker build -t web-server-app ./path-to-app-directory
   ```

1. Buat sebuah citra kustom untuk NGINX Plus. Sebelum Anda dapat membangun citra untuk NGINX Plus, Anda harus mendapatkan kunci bernama `nginx-repo.key` dan sertifikat SSL `nginx-repo.crt` untuk NGINX Plus berlisensi Anda. Buat sebuah direktori dan simpan file `nginx-repo.key` dan `nginx-repo.crt` di dalamnya. 

   Dalam direktori yang baru saja Anda buat, buatlah dua file berikut:
   + Sebuah Dockerfile sampel dengan konten berikut. File docker ini diadopsi dari file sampel yang disediakan di [https://docs.nginx.com/nginx/admin- guide/installing-nginx/installing -nginx-docker/](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-docker/#docker_plus_image) \$1docker\$1plus\$1image. Perubahan penting yang kita lakukan adalah kita memuat file terpisah, yang disebut `nginx.conf`, yang akan dibuat pada langkah berikutnya.

     ```
     FROM debian:buster-slim
     
     LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>“
     
     # Define NGINX versions for NGINX Plus and NGINX Plus modules
     # Uncomment this block and the versioned nginxPackages block in the main RUN
     # instruction to install a specific release
     # ENV NGINX_VERSION 21
     # ENV NJS_VERSION 0.3.9
     # ENV PKG_RELEASE 1~buster
     
     # Download certificate and key from the customer portal (https://cs.nginx.com (https://cs.nginx.com/))
     # and copy to the build context
     COPY nginx-repo.crt /etc/ssl/nginx/
     COPY nginx-repo.key /etc/ssl/nginx/
     # COPY nginx.conf /etc/ssl/nginx/nginx.conf
     
     RUN set -x \
     # Create nginx user/group first, to be consistent throughout Docker variants
     && addgroup --system --gid 101 nginx \
     && adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid 101 nginx \
     && apt-get update \
     && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates gnupg1 \
     && \
     NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \
     found=''; \
     for server in \
     ha.pool.sks-keyservers.net (http://ha.pool.sks-keyservers.net/) \
     hkp://keyserver.ubuntu.com:80 \
     hkp://p80.pool.sks-keyservers.net:80 \
     pgp.mit.edu (http://pgp.mit.edu/) \
     ; do \
     echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
     apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
     done; \
     test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
     apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \
     # Install the latest release of NGINX Plus and/or NGINX Plus modules
     # Uncomment individual modules if necessary
     # Use versioned packages over defaults to specify a release
     && nginxPackages=" \
     nginx-plus \
     # nginx-plus=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-xslt \
     # nginx-plus-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-geoip \
     # nginx-plus-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-image-filter \
     # nginx-plus-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-perl \
     # nginx-plus-module-perl=${NGINX_VERSION}-${PKG_RELEASE} \
     # nginx-plus-module-njs \
     # nginx-plus-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${PKG_RELEASE} \
     " \
     && echo "Acquire::https::plus-pkgs.nginx.com::Verify-Peer \"true\";" >> /etc/apt/apt.conf.d/90nginx \
     && echo "Acquire::https::plus-pkgs.nginx.com::Verify-Host \"true\";" >> /etc/apt/apt.conf.d/90nginx \
     && echo "Acquire::https::plus-pkgs.nginx.com::SslCert \"/etc/ssl/nginx/nginx-repo.crt\";" >> /etc/apt/apt.conf.d/90nginx \
     && echo "Acquire::https::plus-pkgs.nginx.com::SslKey \"/etc/ssl/nginx/nginx-repo.key\";" >> /etc/apt/apt.conf.d/90nginx \
     && printf "deb https://plus-pkgs.nginx.com/debian buster nginx-plus\n" > /etc/apt/sources.list.d/nginx-plus.list \
     && apt-get update \
     && apt-get install --no-install-recommends --no-install-suggests -y \
     $nginxPackages \
     gettext-base \
     curl \
     && apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx-plus.list \
     && rm -rf /etc/apt/apt.conf.d/90nginx /etc/ssl/nginx
     
     # Forward request logs to Docker log collector
     RUN ln -sf /dev/stdout /var/log/nginx/access.log \
     && ln -sf /dev/stderr /var/log/nginx/error.log
     
     COPY nginx.conf /etc/nginx/nginx.conf
     
     EXPOSE 80
     
     STOPSIGNAL SIGTERM
     
     CMD ["nginx", "-g", "daemon off;"]
     ```
   + `nginx.conf`File, dimodifikasi dari [ https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/nginx](https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/nginx).

     ```
     events {
       worker_connections 768;
     }
     
     http {
       # Nginx will handle gzip compression of responses from the app server
       gzip on;
       gzip_proxied any;
       gzip_types text/plain application/json;
       gzip_min_length 1000;
     
       upstream backend {
         zone name 10m;
         server app:3000    weight=2;
         server app2:3000    weight=1;
       }
     
       server{
         listen 8080;
         location /api {
           api write=on;
         }
       }
     
       match server_ok {
         status 100-599;
       }
     
       server {
         listen 80;
         status_zone zone;
         # Nginx will reject anything not matching /api
         location /api {
           # Reject requests with unsupported HTTP method
           if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
             return 405;
           }
     
           # Only requests matching the whitelist expectations will
           # get sent to the application server
           proxy_pass http://backend;
           health_check uri=/lorem-ipsum match=server_ok;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache_bypass $http_upgrade;
         }
       }
     }
     ```

1. Membangun sebuah citra dari file yang ada dalam direktori baru Anda:

   ```
   docker build -t nginx-plus-reverse-proxy ./path-to-your-directory
   ```

1. Unggah citra baru Anda ke sebuah repositori citra yang akan digunakan nanti.

### Buat penetapan tugas untuk menjalankan NGINX Plus dan aplikasi web server di Amazon ECS
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup-task"></a>

Berikutnya, Anda menyiapkan penetapan tugas.

Penetapan tugas ini memungkinkan dilakukannya pengumpulan dan ekspor metrik NGINX Prometheus. Kontainer NGINX melacak masukan dari aplikasi, dan membuka data itu ke port 8080, sebagaimana diatur dalam `nginx.conf`. Wadah eksportir prometheus NGINX menggores metrik ini, dan mempostingnya ke port 9113, untuk digunakan di. CloudWatch

**Cara menyiapkan penetapan tugas untuk beban kerja Amazon ECS sampel NGINX**

1. Buat sebuah penetapan tugas file JSON dengan konten berikut. Ganti *your-customized-nginx-plus-image* dengan URI gambar untuk gambar NGINX Plus Anda yang disesuaikan, dan ganti *your-web-server-app-image* dengan URI gambar untuk image aplikasi server web Anda.

   ```
   {
     "containerDefinitions": [
       {
         "name": "nginx",
         "image": "your-customized-nginx-plus-image",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "portMappings": [
           {
             "containerPort": 80,
             "protocol": "tcp"
           }
         ],
         "links": [
           "app",
           "app2"
         ]
       },
       {
         "name": "app",
         "image": "your-web-server-app-image",
         "memory": 256,
         "cpu": 128,
         "essential": true
       },
       {
         "name": "app2",
         "image": "your-web-server-app-image",
         "memory": 256,
         "cpu": 128,
         "essential": true
       },
       {
         "name": "nginx-prometheus-exporter",
         "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0",
         "memory": 256,
         "cpu": 256,
         "essential": true,
         "command": [
           "-nginx.plus",
           "-nginx.scrape-uri",
            "http://nginx:8080/api"
       ],
       "links":[
         "nginx"
       ],
         "portMappings":[
           {
             "containerPort": 9113,
             "protocol": "tcp"
           }
         ]
       }
     ],
     "networkMode": "bridge",
     "placementConstraints": [],
     "family": "nginx-plus-sample-stack"
   }
   ```

1. Mendaftarkan penetapan tugas:

   ```
   aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json
   ```

1. Untuk membuat sebuah layanan untuk menjalankan tugas dengan memasukkan perintah berikut:

   ```
   aws ecs create-service \
    --cluster your-cluster-name \
    --service-name nginx-plus-service \
    --task-definition nginx-plus-sample-stack:1 \
    --desired-count 1
   ```

   Pastikan untuk tidak mengubah nama layanan. Kami akan menjalankan layanan CloudWatch agen menggunakan konfigurasi yang mencari tugas menggunakan pola nama layanan yang memulainya. Misalnya, bagi CloudWatch agen untuk menemukan tugas yang diluncurkan oleh perintah ini, Anda dapat menentukan nilai `sd_service_name_pattern` menjadi`^nginx-plus-service$`. Bagian selanjutnya menyediakan detail yang lebih lengkap.

### Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus NGINX Plus
<a name="ContainerInsights-Prometheus-nginx-plus-ecs-setup-agent"></a>

Langkah terakhir adalah mengonfigurasi CloudWatch agen untuk mengikis metrik NGINX. Dalam contoh ini, CloudWatch agen menemukan tugas melalui pola nama layanan, dan port 9113, di mana eksportir mengekspos metrik prometheus untuk NGINX. Dengan tugas yang ditemukan dan metrik yang tersedia, CloudWatch agen mulai memposting metrik yang dikumpulkan ke aliran log. **nginx-prometheus-exporter** 

**Untuk mengonfigurasi CloudWatch agen untuk mengikis metrik NGINX**

1. Unduh file YAML versi terbaru yang diperlukan dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
   ```

1. Buka file dengan editor teks, dan temukan konfirmasi CloudWatch agen lengkap di `value` kunci di bagian`resource:CWAgentConfigSSMParameter`. Kemudian, di bagian `ecs_service_discovery`, tambahkan bagian `service_name_list_for_tasks` berikut.

   ```
   "service_name_list_for_tasks": [
     {
       "sd_job_name": "nginx-plus-prometheus-exporter",
       "sd_metrics_path": "/metrics",
       "sd_metrics_ports": "9113",
       "sd_service_name_pattern": "^nginx-plus.*"
      }
   ],
   ```

1. Dalam file yang sama, tambahkan bagian berikut di bagian `metric_declaration` untuk mengizinkan metrik NGINX Plus. Pastikan untuk mengikuti pola indentasi yang ada saat itu.

   ```
   {
     "source_labels": ["job"],
     "label_matcher": "^nginx-plus.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]],
     "metric_selectors": [
       "^nginxplus_connections_accepted$",
       "^nginxplus_connections_active$",
       "^nginxplus_connections_dropped$",
       "^nginxplus_connections_idle$",
       "^nginxplus_http_requests_total$",
       "^nginxplus_ssl_handshakes$",
       "^nginxplus_ssl_handshakes_failed$",
       "^nginxplus_up$",
       "^nginxplus_upstream_server_health_checks_fails$"
     ]
   },
   {
     "source_labels": ["job"],
     "label_matcher": "^nginx-plus.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName", "upstream"]],
     "metric_selectors": [
       "^nginxplus_upstream_server_response_time$"
     ]
   },
   {
     "source_labels": ["job"],
     "label_matcher": "^nginx-plus.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName", "code"]],
     "metric_selectors": [
       "^nginxplus_upstream_server_responses$",
       "^nginxplus_server_zone_responses$"
     ]
   },
   ```

1. Jika Anda belum memiliki CloudWatch agen yang digunakan di cluster ini, lewati ke langkah 8.

   Jika Anda sudah memiliki CloudWatch agen yang disebarkan di cluster Amazon ECS dengan menggunakan AWS CloudFormation, Anda dapat membuat set perubahan dengan memasukkan perintah berikut:

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION \
       --change-set-name nginx-plus-scraping-support
   ```

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Mengungkap changeset yang baru dibuat. **nginx-plus-scraping-support** Anda akan melihat satu perubahan diterapkan ke sumber daya **CWAgentConfig SSMParameter**. Jalankan changeset dan tahan tugas CloudWatch agen dengan memasukkan perintah berikut:

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Tunggu sekitar 10 detik, kemudian masukkan perintah berikut.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Jika Anda menginstal CloudWatch agen dengan pengumpulan metrik Prometheus di cluster untuk pertama kalinya, masukkan perintah berikut.

   ```
   ECS_CLUSTER_NAME=your_cluster_name
   AWS_REGION=your_aws_region
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

## Menampilkan metrik dan log NGINX Plus Anda
<a name="ContainerInsights-Prometheus-Setup-nginx-plus-view"></a>

Sekarang Anda dapat menampilkan metrik NGINX Plus yang sedang dikumpulkan.

**Cara menampilkan metrik untuk sampel beban kerja NGINX Anda**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di Wilayah tempat klaster Anda berjalan, pilih **Metrik** pada panel navigasi yang ada sebelah kiri. Temukan namespace **ContainerInsights/Prometheus** untuk melihat metriknya.

1. Untuk melihat peristiwa CloudWatch Log, pilih **Grup log** di panel navigasi. Peristiwa ada di grup log **/aws/containerinsights/ *your\$1cluster\$1name* /prometheus**, di aliran log. *nginx-plus-prometheus-exporter*

# Tutorial untuk menambahkan sebuah target scraping Prometheus baru: Memcached di Amazon ECS
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs"></a>

Tutorial ini akan memberikan Anda pengenalan langsung tentang cara melakukan scraping pada metrik Prometheus dari aplikasi Memcached sampel di klaster Amazon ECS dengan tipe peluncuran EC2. Target eksportir Prometheus Memcached akan ditemukan secara otomatis oleh agen oleh penemuan layanan berbasis definisi tugas ECS. CloudWatch 

Memcached adalah sebuah sistem cache memori terdistribusi serba guna. Memcached ini sering digunakan untuk mempercepat situs web yang didorong oleh basis data dinamis dengan menyimpan data dan objek di RAM untuk mengurangi jumlah sumber data eksternal (seperti basis data atau API) yang harus dibaca. Untuk informasi selengkapnya, silakan lihat [ Apa itu Memcached?](https://www.memcached.org/)

[ memchached\$1exporter](https://github.com/prometheus/memcached_exporter) (Apache License 2.0) adalah salah satu pengekspor resmi Prometheus. Secara bawaan, memcache\$1exporter berfungsi pada port 0.0.0.0:9150 di `/metrics.`

Citra Docker dalam dua repositori Docker Hub berikut digunakan dalam tutorial ini: 
+ [ Memcached](https://hub.docker.com/_/memcached?tab=description)
+ [ prom/memcached-exporter](https://hub.docker.com/r/prom/memcached-exporter/)

**Prasyarat**

Untuk mengumpulkan metrik-metrik dari sampel beban kerja Prometheus untuk Amazon ECS, Anda harus menjalankan Wawasan Kontainer di klaster. Untuk informasi tentang cara melakukan instalasi Wawasan Kontainer, silakan lihat [Menyiapkan Wawasan Kontainer di Amazon ECS](deploy-container-insights-ECS.md).

**Topics**
+ [

## Menetapkan variabel lingkungan klaster Amazon ECS EC2
](#ContainerInsights-Prometheus-Setup-memcached-ecs-environment)
+ [

## Instal beban kerja Memcached sampel
](#ContainerInsights-Prometheus-Setup-memcached-ecs-install-workload)
+ [

## Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus Memcached
](#ContainerInsights-Prometheus-Setup-memcached-ecs-agent)
+ [

## Menampilkan metrik-metrik Memcached Anda
](#ContainerInsights-Prometheus-ECS-memcached-view)

## Menetapkan variabel lingkungan klaster Amazon ECS EC2
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs-environment"></a>

**Untuk mengatur variabel lingkungan klaster Amazon ECS EC2**

1. Instal CLI Amazon ECS jika Anda belum melakukan instalasinya. Untuk informasi selengkapnya, silakan lihat [ Menginstal CLI Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html).

1. Atur nama klaster dan Wilayah Amazon ECS baru. Contoh:

   ```
   ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial
   AWS_DEFAULT_REGION=ca-central-1
   ```

1. (Opsional) Jika Anda belum memiliki cluster Amazon ECS dengan tipe peluncuran EC2 di mana Anda ingin menginstal sampel beban kerja dan CloudWatch agen Memcached, Anda dapat membuatnya dengan memasukkan perintah berikut.

   ```
   ecs-cli up --capability-iam --size 1 \
   --instance-type t3.medium \
   --cluster $ECS_CLUSTER_NAME \
   --region $AWS_REGION
   ```

   Hasil yang diharapkan dari perintah ini adalah sebagai berikut:

   ```
   WARN[0000] You will not be able to SSH into your EC2 instances without a key pair. 
   INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.44.4 and Docker version 19.03.6-ce 
   INFO[0001] Created cluster                               cluster=ecs-ec2-memcached-tutorial region=ca-central-1
   INFO[0002] Waiting for your cluster resources to be created... 
   INFO[0002] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
   INFO[0063] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
   INFO[0124] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
   VPC created: vpc-xxxxxxxxxxxxxxxxx
   Security Group created: sg-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Cluster creation succeeded.
   ```

## Instal beban kerja Memcached sampel
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs-install-workload"></a>

**Untuk melakukan instalasi beban kerja Memcached sampel yang membuka metrik Prometheus**

1. Unduh CloudFormation template Memcached dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/memcached/memcached-traffic-sample.yaml
   ```

1. Tetapkan nama-nama peran IAM yang akan dibuat untuk Memcached dengan memasukkan perintah-perintah berikut.

   ```
   MEMCACHED_ECS_TASK_ROLE_NAME=memcached-prometheus-demo-ecs-task-role-name
   MEMCACHED_ECS_EXECUTION_ROLE_NAME=memcached-prometheus-demo-ecs-execution-role-name
   ```

1. Instal beban kerja Memcached sampel dengan memasukkan perintah berikut. Sampel ini akan melakukan instalasi beban kerja di mode jaringan `host`.

   ```
   MEMCACHED_ECS_NETWORK_MODE=host
   
   aws cloudformation create-stack --stack-name Memcached-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MODE \
       --template-body file://memcached-traffic-sample.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=ECSNetworkMode,ParameterValue=$MEMCACHED_ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$MEMCACHED_ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$MEMCACHED_ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

 CloudFormation Tumpukan menciptakan empat sumber daya:
+ Satu peran tugas ECS
+ Satu peran eksekusi tugas ECS
+ Satu penetapan tugas Memcached
+ Satu layanan Memcached

Dalam penetapan tugas Memcached, ada dua kontainer yang ditentukan:
+ Kontainer utama menjalankan sebuah aplikasi Memcached sederhana dan membuka port 11211 agar bisa diakses.
+ Kontainer lainnya menjalankan proses eksportir Redis OSS untuk mengekspos metrik Prometheus di port 9150. Ini adalah wadah yang akan ditemukan dan dikikis oleh agen. CloudWatch 

## Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus Memcached
<a name="ContainerInsights-Prometheus-Setup-memcached-ecs-agent"></a>

**Untuk mengonfigurasi CloudWatch agen untuk mengikis metrik Prometheus Memcached**

1. Unduh `cwagent-ecs-prometheus-metric-for-awsvpc.yaml` versi terbaru dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml
   ```

1. Buka file dengan editor teks, dan temukan konfigurasi CloudWatch agen lengkap di belakang `value` kunci di `resource:CWAgentConfigSSMParameter` bagian.

   Kemudian, di bagian `ecs_service_discovery`, tambahkan konfigurasi berikut ke bagian `task_definition_list`.

   ```
   {
       "sd_job_name": "ecs-memcached",
       "sd_metrics_ports": "9150",
       "sd_task_definition_arn_pattern": ".*:task-definition/memcached-prometheus-demo.*:[0-9]+"
   },
   ```

   Untuk bagian `metric_declaration`, pengaturan bawaan tidak mengizinkan metrik Memcached. Tambahkan bagian berikut untuk mengizinkan metrik Memcached. Pastikan untuk mengikuti pola indentasi yang ada saat itu.

   ```
   {
     "source_labels": ["container_name"],
     "label_matcher": "memcached-exporter-.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily"]],
     "metric_selectors": [
       "^memcached_current_(bytes|items|connections)$",
       "^memcached_items_(reclaimed|evicted)_total$",
       "^memcached_(written|read)_bytes_total$",
       "^memcached_limit_bytes$",
       "^memcached_commands_total$"
     ]
   },
   {
     "source_labels": ["container_name"],
     "label_matcher": "memcached-exporter-.*",
     "dimensions": [["ClusterName", "TaskDefinitionFamily","status","command"], ["ClusterName", "TaskDefinitionFamily","command"]],
     "metric_selectors": [
       "^memcached_commands_total$"
     ]
   },
   ```

1. Jika Anda sudah memiliki CloudWatch agen yang disebarkan di cluster Amazon ECS oleh CloudFormation, Anda dapat membuat set perubahan dengan memasukkan perintah berikut.

   ```
   ECS_NETWORK_MODE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION \
       --change-set-name memcached-scraping-support
   ```

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Meninjau changeset `memcached-scraping-support` yang baru saja Anda buat. Anda seharusnya melihat satu perubahan diterapkan ke sumber daya `CWAgentConfigSSMParameter`. Jalankan changeset dan restart tugas CloudWatch agen dengan memasukkan perintah berikut.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Tunggu sekitar 10 detik, kemudian masukkan perintah berikut.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \
   --region $AWS_REGION
   ```

1. Jika Anda menginstal CloudWatch agen dengan pengumpulan metrik Prometheus untuk cluster untuk pertama kalinya, masukkan perintah berikut:

   ```
   ECS_NETWORK_MODEE=bridge
   CREATE_IAM_ROLES=True
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \
       --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_REGION
   ```

## Menampilkan metrik-metrik Memcached Anda
<a name="ContainerInsights-Prometheus-ECS-memcached-view"></a>

Tutorial ini mengirimkan metrik berikut ke **ECS/ContainerInsights/Prometheus**namespace di. CloudWatch Anda dapat menggunakan CloudWatch konsol untuk melihat metrik di namespace tersebut.


| Nama metrik | Dimensi | 
| --- | --- | 
|  `memcached_current_items` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_current_connections` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_limit_bytes` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_current_bytes` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_written_bytes_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_read_bytes_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_items_evicted_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_items_reclaimed_total` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `memcached_commands_total` |  `ClusterName`, `TaskDefinitionFamily` `ClusterName`, TaskDefinitionFamily, perintah `ClusterName`, TaskDefinitionFamily, status, perintah  | 

**catatan**  
Nilai dari dimensi **perintah** bisa berupa: `delete`, `get`, `cas`, `set`, `decr`, `touch`, `incr`, atau `flush`.  
Nilai dari dimensi **status** bisa berupa `hit`, `miss`, atau `badval`. 

Anda juga dapat membuat CloudWatch dasbor untuk metrik Prometheus Memcached Anda.

**Cara membuat sebuah dasbor untuk metrik-metrik Memcached Prometheus**

1. Buat variabel lingkungan, yang menggantikan nilai di bawah ini untuk menyesuaikan dengan deployment Anda.

   ```
   DASHBOARD_NAME=your_memcached_cw_dashboard_name
   ECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD
   ```

1. Masukkan perintah berikut untuk membuat dasbor tersebut.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json \
   | sed "s/{{YOUR_AWS_REGION}}/$AWS_REGION/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/$ECS_CLUSTER_NAME/g" \
   | sed "s/{{YOUR_TASK_DEF_FAMILY}}/$ECS_TASK_DEF_FAMILY/g" \
   | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --region $AWS_REGION --dashboard-body
   ```

# Tutorial untuk mengikis metrik Redis OSS Prometheus di Amazon ECS Fargate
<a name="ContainerInsights-Prometheus-Setup-redis-ecs"></a>

Tutorial ini memberikan pengantar langsung untuk mengikis metrik Prometheus dari contoh aplikasi Redis OSS di cluster Amazon ECS Fargate. Target eksportir Redis OSS Prometheus akan ditemukan secara otomatis oleh agen CloudWatch dengan dukungan metrik Prometheus berdasarkan label docker kontainer.

Redis OSS (https://redis.io/) adalah sumber terbuka (berlisensi BSD), penyimpanan struktur data dalam memori, digunakan sebagai database, cache, dan broker pesan. Untuk informasi selengkapnya, silakan lihat [ redis](https://redis.io/).

redis\$1exporter (Lisensi MIT berlisensi) digunakan untuk mengekspos metrik prometheus Redis OSS pada port yang ditentukan (default: 0.0.0. 0:9121). Untuk informasi selengkapnya, silakan lihat [ redis\$1exporter](https://github.com/oliver006/redis_exporter).

Citra Docker dalam dua repositori Docker Hub berikut digunakan dalam tutorial ini: 
+ [ redis](https://hub.docker.com/_/redis?tab=description)
+ [ redis\$1exporter](https://hub.docker.com/r/oliver006/redis_exporter)

**Prasyarat**

Untuk mengumpulkan metrik-metrik dari sampel beban kerja Prometheus untuk Amazon ECS, Anda harus menjalankan Wawasan Kontainer di klaster. Untuk informasi tentang cara melakukan instalasi Wawasan Kontainer, silakan lihat [Menyiapkan Wawasan Kontainer di Amazon ECS](deploy-container-insights-ECS.md).

**Topics**
+ [

## Menetapkan variabel lingkungan klaster Amazon ECS Fargate
](#ContainerInsights-Prometheus-Setup-redis-ecs-variable)
+ [

## Menetapkan variabel lingkungan jaringan untuk klaster Amazon ECS Fargate
](#ContainerInsights-Prometheus-Setup-redis-ecs-variable2)
+ [

## Instal sampel beban kerja Redis OSS
](#ContainerInsights-Prometheus-Setup-redis-ecs-install-workload)
+ [

## Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus Redis OSS
](#ContainerInsights-Prometheus-Setup-redis-ecs-agent)
+ [

## Melihat metrik Redis OSS Anda
](#ContainerInsights-Prometheus-Setup-redis-view)

## Menetapkan variabel lingkungan klaster Amazon ECS Fargate
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-variable"></a>

**Cara menetapkan variabel lingkungan klaster Amazon ECS Fargate**

1. Instal CLI Amazon ECS jika Anda belum melakukan instalasinya. Untuk informasi selengkapnya, silakan lihat [ Menginstal CLI Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html).

1. Atur nama klaster dan Wilayah Amazon ECS baru. Contoh:

   ```
   ECS_CLUSTER_NAME=ecs-fargate-redis-tutorial
   AWS_DEFAULT_REGION=ca-central-1
   ```

1. (Opsional) Jika Anda belum memiliki cluster Amazon ECS Fargate tempat Anda ingin menginstal contoh beban kerja CloudWatch dan agen Redis OSS, Anda dapat membuatnya dengan memasukkan perintah berikut.

   ```
   ecs-cli up --capability-iam \
   --cluster $ECS_CLUSTER_NAME \
   --launch-type FARGATE \
   --region $AWS_DEFAULT_REGION
   ```

   Hasil yang diharapkan dari perintah ini adalah sebagai berikut:

   ```
   INFO[0000] Created cluster   cluster=ecs-fargate-redis-tutorial region=ca-central-1
   INFO[0001] Waiting for your cluster resources to be created...
   INFO[0001] Cloudformation stack status   stackStatus=CREATE_IN_PROGRESS
   VPC created: vpc-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Subnet created: subnet-xxxxxxxxxxxxxxxxx
   Cluster creation succeeded.
   ```

## Menetapkan variabel lingkungan jaringan untuk klaster Amazon ECS Fargate
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-variable2"></a>

**Untuk menetapkan variabel lingkungan jaringan untuk klaster Amazon ECS Fargate**

1. Atur VPC dan ID subnet Anda dari klaster Amazon ECS. Jika Anda membuat sebuah klaster baru dalam prosedur sebelumnya, maka Anda akan melihat nilai-nilai ini dalam hasil perintah akhir. Jika tidak, gunakan cluster yang ada yang akan Anda gunakan dengan Redis. IDs 

   ```
   ECS_CLUSTER_VPC=vpc-xxxxxxxxxxxxxxxxx
   ECS_CLUSTER_SUBNET_1=subnet-xxxxxxxxxxxxxxxxx
   ECS_CLUSTER_SUBNET_2=subnet-xxxxxxxxxxxxxxxxx
   ```

1. Dalam tutorial ini, kita akan menginstal aplikasi Redis OSS dan CloudWatch agen di grup keamanan default dari VPC cluster Amazon ECS. Grup keamanan default memungkinkan semua koneksi jaringan dalam grup keamanan yang sama sehingga CloudWatch agen dapat mengikis metrik Prometheus yang terpapar pada wadah Redis OSS. Dalam lingkungan produksi nyata, Anda mungkin ingin membuat grup keamanan khusus untuk aplikasi dan CloudWatch agen Redis OSS dan menetapkan izin khusus untuk mereka. 

   Masukkan perintah berikut untuk mendapatkan ID grup keamanan bawaan.

   ```
   aws ec2 describe-security-groups \
   --filters Name=vpc-id,Values=$ECS_CLUSTER_VPC  \
   --region $AWS_DEFAULT_REGION
   ```

   Kemudian atur variabel grup keamanan deafult cluster Fargate dengan memasukkan perintah berikut, ganti *my-default-security-group* dengan nilai yang Anda temukan dari perintah sebelumnya.

   ```
   ECS_CLUSTER_SECURITY_GROUP=my-default-security-group
   ```

## Instal sampel beban kerja Redis OSS
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-install-workload"></a>

**Untuk menginstal sampel beban kerja Redis OSS yang mengekspos metrik Prometheus**

1. Unduh CloudFormation template Redis OSS dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml
   ```

1. Atur nama peran IAM yang akan dibuat untuk Redis OSS dengan memasukkan perintah berikut.

   ```
   REDIS_ECS_TASK_ROLE_NAME=redis-prometheus-demo-ecs-task-role-name
   REDIS_ECS_EXECUTION_ROLE_NAME=redis-prometheus-demo-ecs-execution-role-name
   ```

1. Instal sampel beban kerja Redis OSS dengan memasukkan perintah berikut.

   ```
   aws cloudformation create-stack --stack-name Redis-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-fargate-awsvpc \
       --template-body file://redis-traffic-sample.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \
                    ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET_1 \
                    ParameterKey=TaskRoleName,ParameterValue=$REDIS_ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$REDIS_ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region $AWS_DEFAULT_REGION
   ```

 CloudFormation Tumpukan menciptakan empat sumber daya:
+ Satu peran tugas ECS
+ Satu peran eksekusi tugas ECS
+ Satu definisi tugas Redis OSS
+ Satu layanan Redis OSS

Dalam definisi tugas Redis OSS, dua kontainer didefinisikan:
+ Kontainer utama menjalankan aplikasi Redis OSS sederhana dan membuka port 6379 untuk akses.
+ Kontainer lainnya menjalankan proses eksportir Redis OSS untuk mengekspos metrik Prometheus pada port 9121. Ini adalah wadah yang akan ditemukan dan dikikis oleh agen. CloudWatch Label docker berikut didefinisikan sehingga CloudWatch agen dapat menemukan kontainer ini berdasarkan itu.

  ```
  ECS_PROMETHEUS_EXPORTER_PORT: 9121
  ```

## Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus Redis OSS
<a name="ContainerInsights-Prometheus-Setup-redis-ecs-agent"></a>

**Untuk mengonfigurasi CloudWatch agen untuk mengikis metrik Redis OSS Prometheus**

1. Unduh `cwagent-ecs-prometheus-metric-for-awsvpc.yaml` versi terbaru dengan memasukkan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml
   ```

1. Buka file dengan editor teks, dan temukan konfigurasi CloudWatch agen lengkap di belakang `value` kunci di `resource:CWAgentConfigSSMParameter` bagian.

   Kemudian, di `ecs_service_discovery` bagian yang ditampilkan di sini, penemuan layanan `docker_label` berbasis diaktifkan dengan pengaturan default yang didasarkan`ECS_PROMETHEUS_EXPORTER_PORT`, yang cocok dengan label docker yang kami definisikan dalam definisi tugas Redis OSS ECS. Jadi, kita tidak perlu melakukan perubahan apa pun dalam bagian ini:

   ```
   ecs_service_discovery": {
     "sd_frequency": "1m",
     "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
   *  "docker_label": {
     },*
     ...
   ```

   Untuk `metric_declaration` bagian ini, pengaturan default tidak mengizinkan metrik Redis OSS apa pun. Tambahkan bagian berikut untuk mengizinkan metrik Redis OSS. Pastikan untuk mengikuti pola indentasi yang ada saat itu.

   ```
   {
     "source_labels": ["container_name"],
     "label_matcher": "^redis-exporter-.*$",
     "dimensions": [["ClusterName","TaskDefinitionFamily"]],
     "metric_selectors": [
       "^redis_net_(in|out)put_bytes_total$",
       "^redis_(expired|evicted)_keys_total$",
       "^redis_keyspace_(hits|misses)_total$",
       "^redis_memory_used_bytes$",
       "^redis_connected_clients$"
     ]
   },
   {
     "source_labels": ["container_name"],
     "label_matcher": "^redis-exporter-.*$",
     "dimensions": [["ClusterName","TaskDefinitionFamily","cmd"]],
     "metric_selectors": [
       "^redis_commands_total$"
     ]
   },
   {
     "source_labels": ["container_name"],
     "label_matcher": "^redis-exporter-.*$",
     "dimensions": [["ClusterName","TaskDefinitionFamily","db"]],
     "metric_selectors": [
       "^redis_db_keys$"
     ]
   },
   ```

1. Jika Anda sudah memiliki CloudWatch agen yang disebarkan di cluster Amazon ECS oleh CloudFormation, Anda dapat membuat set perubahan dengan memasukkan perintah berikut.

   ```
   ECS_LAUNCH_TYPE=FARGATE
   CREATE_IAM_ROLES=True
   ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-awsvpc \
       --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \
                    ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \
                    ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region ${AWS_DEFAULT_REGION} \
       --change-set-name redis-scraping-support
   ```

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Meninjau changeset `redis-scraping-support` yang baru saja Anda buat. Anda seharusnya melihat satu perubahan diterapkan ke sumber daya `CWAgentConfigSSMParameter`. Jalankan changeset dan restart tugas CloudWatch agen dengan memasukkan perintah berikut.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 0 \
   --service cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-awsvpc \
   --region ${AWS_DEFAULT_REGION}
   ```

1. Tunggu sekitar 10 detik, kemudian masukkan perintah berikut.

   ```
   aws ecs update-service --cluster $ECS_CLUSTER_NAME \
   --desired-count 1 \
   --service cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-awsvpc \
   --region ${AWS_DEFAULT_REGION}
   ```

1. Jika Anda menginstal CloudWatch agen dengan pengumpulan metrik Prometheus untuk cluster untuk pertama kalinya, masukkan perintah berikut:

   ```
   ECS_LAUNCH_TYPE=FARGATE
   CREATE_IAM_ROLES=True
   ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1
   ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name
   ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name
   
   aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-awsvpc \
       --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \
       --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \
                    ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \
                    ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \
                    ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \
                    ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \
                    ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \
                    ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \
       --capabilities CAPABILITY_NAMED_IAM \
       --region ${AWS_DEFAULT_REGION}
   ```

## Melihat metrik Redis OSS Anda
<a name="ContainerInsights-Prometheus-Setup-redis-view"></a>

Tutorial ini mengirimkan metrik berikut ke **ECS/ContainerInsights/Prometheus**namespace di. CloudWatch Anda dapat menggunakan CloudWatch konsol untuk melihat metrik di namespace tersebut.


| Nama Metrik | Dimensi | 
| --- | --- | 
|  `redis_net_input_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_net_output_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_expired_keys_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_evicted_keys_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_keyspace_hits_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_keyspace_misses_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_memory_used_bytes` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_connected_clients` |  ClusterName, `TaskDefinitionFamily`  | 
|  `redis_commands_total` |  ` ClusterName`, `TaskDefinitionFamily`, `cmd`  | 
|  `redis_db_keys` |  `ClusterName`, `TaskDefinitionFamily`, `db`  | 

**catatan**  
Nilai dari dimensi **cmd** bisa berupa: `append`, `client`, `command`, `config`, `dbsize`, `flushall`, `get`, `incr`, `info`, `latency`, atau `slowlog`.  
Nilai dari dimensi **db** bisa `db0` hingga `db15`. 

Anda juga dapat membuat CloudWatch dasbor untuk metrik Prometheus Redis OSS Anda.

**Untuk membuat dasbor untuk metrik Redis OSS Prometheus**

1. Buat variabel lingkungan, yang menggantikan nilai di bawah ini untuk menyesuaikan dengan deployment Anda.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   ECS_TASK_DEF_FAMILY=redis-prometheus-demo-$ECS_CLUSTER_NAME-fargate-awsvpc
   ```

1. Masukkan perintah berikut untuk membuat dasbor tersebut.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \
   ```