

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

# Pemantauan metrik-metrik Prometheus Wawasan Kontainer
<a name="ContainerInsights-Prometheus"></a>

CloudWatch Pemantauan Wawasan Kontainer untuk Prometheus mengotomatiskan penemuan metrik Prometheus dari sistem dan beban kerja dalam peti kemas. Prometheus adalah sebuah alat pemantauan dan peringatan sistem sumber terbuka. Untuk informasi selengkapnya, silakan lihat [ Apa itu Prometheus?](https://prometheus.io/docs/introduction/overview/) dalam dokumentasi Prometheus.

Menemukan metrik-metrik Prometheus didukung untuk klaster [Amazon Elastic Container Service](https://aws.amazon.com/ecs/), [Amazon Elastic Kubernetes Service](https://aws.amazon.com/eks/) dan [Kubernetes](https://aws.amazon.com/kubernetes/) yang sedang berjalan di instans Amazon EC2. Penghitung, pengukur, dan tipe-tipe metrik ringkasan Prometheus dikumpulkan.

Untuk klaster Amazon ECS dan Amazon EKS, baik tipe-tipe peluncuran EC2 dan Fargate didukung. Wawasan Kontainer secara otomatis mengumpulkan metrik-metrik dari beberapa beban kerja, dan Anda dapat mengonfigurasinya untuk mengumpulkan metrik-metrik dari beban kerja mana pun.

Anda dapat mengadopsi Prometheus sebagai metode open-source dan standar terbuka untuk menyerap metrik khusus. CloudWatch CloudWatch Agen dengan dukungan Prometheus menemukan dan mengumpulkan metrik Prometheus untuk memantau, memecahkan masalah, dan alarm tentang penurunan kinerja aplikasi dan kegagalan lebih cepat. Agen CloudWatch ini juga mengurangi jumlah alat-alat pemantauan yang diperlukan untuk meningkatkan observabilitas.

Container Insights Dukungan Prometheus pay-per-use melibatkan metrik dan log, termasuk mengumpulkan, menyimpan, dan menganalisis. Untuk informasi selengkapnya, lihat [ CloudWatch Harga Amazon](https://aws.amazon.com/cloudwatch/pricing/).

**Dasbor yang sudah dibangun sebelumnya untuk beberapa beban kerja**

Solusi Wawasan Kontainer Prometheus mencakup dasbor yang sudah dibangun sebelumnya untuk beban kerja populer yang dicantumkan dalam bagian ini. Untuk konfigurasi sampel untuk beban kerja ini, silakan lihat [(Opsional) Menyiapkan sampel beban kerja Amazon ECS terkontainer untuk pengujian metrik Prometheus](ContainerInsights-Prometheus-Sample-Workloads-ECS.md) dan [(Opsional) Menyiapkan sampel beban kerja Amazon EKS terkontainer untuk pengujian metrik Prometheus](ContainerInsights-Prometheus-Sample-Workloads.md).

Anda juga dapat mengonfigurasi Wawasan Kontainer untuk mengumpulkan metrik-metrik Prometheus dari layanan-layanan dan aplikasi-aplikasi terkontainer lainnya dengan menyunting file konfigurasi agen.

Beban kerja dengan dasbor yang sudah dibangun sebelumnya untuk klaster Amazon EKS dan klaster Kubernetes yang berjalan di instans Amazon EC2:
+ AWS App Mesh
+ NGINX
+ Memcached
+ Java/JMX
+ HAProxy

Beban kerja dengan dasbor yang sudah dibangun sebelumnya untuk klaster-klaster Amazon ECS:
+ AWS App Mesh
+ Java/JMX
+ NGINX
+ NGINX Plus

# 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" \
   ```

# Menyiapkan dan mengonfigurasikan koleksi metrik-metrik Prometheus di klaster Amazon ECS dan Kubernetes
<a name="ContainerInsights-Prometheus-install-EKS"></a>

Untuk mengumpulkan metrik Prometheus dari cluster yang menjalankan Amazon EKS atau Kubernetes, Anda dapat menggunakan agen sebagai kolektor atau menggunakan CloudWatch 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/eks-prometheus](https://aws-otel.github.io/docs/getting-started/container-insights/eks-prometheus).

Bagian berikut menjelaskan cara mengumpulkan metrik Prometheus menggunakan agen. CloudWatch Mereka menjelaskan cara menginstal CloudWatch agen dengan pemantauan Prometheus pada cluster yang menjalankan Amazon EKS atau Kubernetes, dan cara mengonfigurasi agen untuk mengikis target tambahan. Bagian-bagian ini juga akan menyediakan tutorial opsional untuk menyiapkan beban kerja sampel untuk digunakan dalam pengujian dengan pemantauan Prometheus.

**Topics**
+ [Instal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Setup.md)

# Instal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Setup"></a>

Bagian ini menjelaskan cara mengatur CloudWatch agen dengan pemantauan Prometheus di cluster yang menjalankan Amazon EKS atau Kubernetes. 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
+ NGINX
+ Memcached
+ Java/JMX
+ HAProxy
+ Fluent Bit

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

Sebelum mengikuti langkah-langkah ini untuk menginstal CloudWatch agen untuk koleksi metrik Prometheus, Anda harus memiliki klaster yang berjalan di Amazon EKS atau cluster Kubernetes yang berjalan pada instance Amazon EC2.

**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 EKS dan Kubernetes](#ContainerInsights-Prometheus-Setup-roles)
+ [Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut](ContainerInsights-Prometheus-Setup-configure.md)
+ [(Opsional) Menyiapkan sampel beban kerja Amazon EKS terkontainer untuk pengujian metrik Prometheus](ContainerInsights-Prometheus-Sample-Workloads.md)

## Instal CloudWatch agen dengan koleksi metrik Prometheus di klaster Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Setup-roles"></a>

Bagian ini menjelaskan cara mengatur CloudWatch agen dengan pemantauan Prometheus di cluster yang menjalankan Amazon EKS atau Kubernetes. 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
+ NGINX
+ Memcached
+ Java/JMX
+ HAProxy
+ Fluent Bit

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

Sebelum mengikuti langkah-langkah ini untuk menginstal CloudWatch agen untuk koleksi metrik Prometheus, Anda harus memiliki klaster yang berjalan di Amazon EKS atau cluster Kubernetes yang berjalan pada instance Amazon EC2.

**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**
+ [Menyiapkan peran IAM](#ContainerInsights-Prometheus-Setup-roles)
+ [Menginstal CloudWatch agen untuk mengumpulkan metrik Prometheus](#ContainerInsights-Prometheus-Setup-install-agent)

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

Langkah pertama adalah menyiapkan peran IAM yang diperlukan di klaster tersebut. Ada dua metode:
+ Menyiapkan peran IAM untuk sebuah akun layanan, juga dikenal sebagai sebuah *peran layanan*. Metode ini bisa digunakan untuk tipe peluncuran EC2 dan tipe peluncuran Fargate.
+ Menambahkan kebijakan IAM ke peran IAM yang digunakan untuk klaster. Ini hanya bisa dilakukan untuk tipe peluncuran EC2.

**Menyiapkan sebuah peran layanan (tipe peluncuran EC2 dan tipe peluncuran Fargate)**

Untuk menyiapkan sebuah peran layanan, masukkan perintah berikut. Ganti *MyCluster* dengan nama cluster.

```
eksctl create iamserviceaccount \
 --name cwagent-prometheus \
--namespace amazon-cloudwatch \
 --cluster MyCluster \
--attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
--approve \
--override-existing-serviceaccounts
```

**Tambahkan kebijakan ke peran IAM grup node (hanya tipe peluncuran EC2)**

**Untuk menyiapkan kebijakan IAM dalam grup node untuk dukungan Prometheus**

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Pada panel navigasi, silakan pilih **Instances** (Instans).

1. Anda harus menemukan awalan nama peran IAM untuk klaster. Untuk melakukan ini, pilih kotak centang di sebelah nama instance yang ada di cluster, dan pilih **Actions**, **Security**, **Modify IAM Role**. Kemudian salin awalan peran IAM, seperti `eksctl-dev303-workshop-nodegroup`.

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

1. Pada panel navigasi, silakan pilih **Peran**.

1. Gunakan kotak pencarian untuk menemukan awalan yang Anda salin sebelumnya dalam prosedur ini, dan pilih peran tersebut.

1. Pilih **Lampirkan kebijakan**.

1. Gunakan kotak pencarian untuk menemukan **CloudWatchAgentServerPolicy**. Pilih kotak centang di samping **CloudWatchAgentServerPolicy**, dan pilih **Lampirkan kebijakan**.

### Menginstal CloudWatch agen untuk mengumpulkan metrik Prometheus
<a name="ContainerInsights-Prometheus-Setup-install-agent"></a>

Anda harus menginstal CloudWatch agen di cluster untuk mengumpulkan metrik. Cara melakukan instalasi agen yang berbeda untuk klaster Amazon EKS dan klaster Kubernetes.

**Hapus versi CloudWatch agen sebelumnya dengan dukungan Prometheus**

Jika Anda telah menginstal versi CloudWatch agen dengan dukungan Prometheus di cluster Anda, Anda harus menghapus versi itu dengan memasukkan perintah berikut. Hal perlu dilakukan hanya untuk versi agen sebelumnya yang memiliki dukungan Prometheus. Anda tidak perlu menghapus CloudWatch agen yang mengaktifkan Wawasan Kontainer tanpa dukungan Prometheus.

```
kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
```

#### Menginstal CloudWatch agen di kluster Amazon EKS dengan tipe peluncuran EC2
<a name="ContainerInsights-Prometheus-Setup-install-agent-EKS"></a>

Untuk menginstal CloudWatch agen dengan dukungan Prometheus di kluster Amazon EKS, ikuti langkah-langkah ini.

**Untuk menginstal CloudWatch agen dengan dukungan Prometheus di cluster Amazon EKS**

1. Masukkan perintah berikut untuk memeriksa apakah namespace `amazon-cloudwatch` telah dibuat:

   ```
   kubectl get namespace
   ```

1. Jika `amazon-cloudwatch` tidak ditampilkan di hasil, buat ia dengan memasukkan perintah berikut:

   ```
   kubectl create namespace amazon-cloudwatch
   ```

1. Untuk menyebarkan agen dengan konfigurasi default dan mengirimkannya data ke AWS Wilayah tempat ia diinstal, masukkan perintah berikut:

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   Agar agen tersebut mengirimkan data ke Wilayah yang berbeda, ikuti langkah-langkah berikut:

   1. Unduh file YAML untuk agen tersebut dengan memasukkan perintah berikut:

      ```
      curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
      ```

   1. Buka file dengan editor teks, dan cari blok `cwagentconfig.json` dari file tersebut.

   1. Tambahkan baris-baris yang disorot, dengan menyebutkan Wilayah yang Anda kehendaki:

      ```
      cwagentconfig.json: |
          {
            "agent": {
              "region": "us-east-2"
            },
            "logs": { ...
      ```

   1. Simpan file tersebut dan terapkan agen dengan menggunakan file yang telah diperbarui.

      ```
      kubectl apply -f prometheus-eks.yaml
      ```

#### Menginstal CloudWatch agen di cluster Amazon EKS dengan tipe peluncuran Fargate
<a name="ContainerInsights-Prometheus-Setup-install-agent-EKS-fargate"></a>

Untuk menginstal CloudWatch agen dengan dukungan Prometheus di cluster Amazon EKS dengan jenis peluncuran Fargate, ikuti langkah-langkah ini.

**Untuk menginstal CloudWatch agen dengan dukungan Prometheus di cluster Amazon EKS dengan tipe peluncuran Fargate**

1. Masukkan perintah berikut untuk membuat profil Fargate untuk CloudWatch agen sehingga dapat berjalan di dalam cluster. Ganti *MyCluster* dengan nama cluster.

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --name amazon-cloudwatch \
   --namespace amazon-cloudwatch
   ```

1. Untuk menginstal CloudWatch agen, masukkan perintah berikut. Ganti *MyCluster* dengan nama cluster. Nama ini digunakan dalam nama grup log yang menyimpan peristiwa log yang dikumpulkan oleh agen, dan juga digunakan sebagai dimensi untuk metrik-metrik yang dikumpulkan oleh agen itu.

   Ganti *region* dengan nama Wilayah tempat Anda ingin metrik dikirim. Misalnya, `us-west-1`. 

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml | 
   sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | 
   kubectl apply -f -
   ```

#### Menginstal CloudWatch agen pada cluster Kubernetes
<a name="ContainerInsights-Prometheus-Setup-install-agent-Kubernetes"></a>

Untuk menginstal CloudWatch agen dengan dukungan Prometheus pada cluster yang menjalankan Kubernetes, masukkan perintah berikut:

```
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml | 
sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | 
kubectl apply -f -
```

Ganti *MyCluster* dengan nama cluster. Nama ini digunakan dalam nama grup log yang menyimpan peristiwa log yang dikumpulkan oleh agen, dan juga digunakan sebagai dimensi untuk metrik-metrik yang dikumpulkan oleh agen itu.

Ganti *region* dengan nama AWS Wilayah tempat Anda ingin metrik dikirim. Misalnya, **us-west-1**.

#### Verifikasi bahwa agen sedang berjalan
<a name="ContainerInsights-Prometheus-Setup-install-agent-verify"></a>

Pada keduanya, baik di klaster Amazon EKS maupun Kubernetes, Anda dapat memasukkan perintah berikut untuk mengonfirmasi bahwa agen sedang berjalan.

```
kubectl get pod -l "app=cwagent-prometheus" -n amazon-cloudwatch
```

Jika hasilnya menyertakan satu pod CloudWatch agen dalam `Running` status, agen menjalankan dan mengumpulkan metrik Prometheus. Secara default, CloudWatch agen mengumpulkan metrik untuk App Mesh, NGINX, Memcached, Java/JMX, dan setiap menit. HAProxy Untuk informasi selengkapnya tentang metrik-metrik ini, silakan lihat [Metrik Prometheus dikumpulkan oleh agen CloudWatch](ContainerInsights-Prometheus-metrics.md). Untuk petunjuk tentang cara melihat metrik Prometheus Anda di, lihat CloudWatch [Menampilkan metrik-metrik Prometheus Anda](ContainerInsights-Prometheus-viewmetrics.md)

Anda juga dapat mengonfigurasi CloudWatch agen untuk mengumpulkan metrik dari eksportir Prometheus lainnya. Untuk informasi selengkapnya, lihat [Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut](ContainerInsights-Prometheus-Setup-configure.md).

# Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut
<a name="ContainerInsights-Prometheus-Setup-configure"></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 Amazon EKS, konfigurasi ditentukan dalam `prometheus-eks.yaml` (untuk tipe peluncuran EC2) atau `prometheus-eks-fargate.yaml` (untuk tipe peluncuran Fargate) sebagai dua peta konfigurasi:
+ Bagian `name: prometheus-config` berisi pengaturan untuk scraping Prometheus.
+ `name: prometheus-cwagentconfig`Bagian ini berisi konfigurasi untuk CloudWatch agen. Anda dapat menggunakan bagian ini untuk mengonfigurasi bagaimana metrik Prometheus dikumpulkan oleh. CloudWatch Misalnya, Anda menentukan metrik mana yang akan diimpor CloudWatch, dan menentukan dimensinya. 

Untuk klaster Kubernet yang berjalan di instans Amazon EC2, konfigurasinya ditentukan di file YAML `prometheus-k8s.yaml` sebagai dua peta konfigurasi:
+ Bagian `name: prometheus-config` berisi pengaturan untuk scraping Prometheus.
+ `name: prometheus-cwagentconfig`Bagian ini berisi konfigurasi untuk 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, di `prometheus-eks.yaml`, pekerjaan scraping bawaan dikonfigurasi di baris `job_name` pada bagian `scrape_configs`. Dalam file ini, bagian `kubernetes-pod-jmx` bawaan berikut melakukan scraping terhadap metrik-metrik pengekspor JMX.

```
   - job_name: 'kubernetes-pod-jmx'
      sample_limit: 10000
      metrics_path: /metrics
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels: [__address__]
        action: keep
        regex: '.*:9404$'
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: Namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: pod_name
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_container_name
        target_label: container_name
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_controller_name
        target_label: pod_controller_name
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_controller_kind
        target_label: pod_controller_kind
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_phase
        target_label: pod_phase
```

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 EKS dan Kubernetes disimpan di grup log **/aws/containerinsights/ *cluster\$1name* /prometheus** di Log. CloudWatch 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. Sebagai contoh, pekerjaan scraping Prometheus `kubernetes-pod-appmesh-envoy` ditetapkan untuk App Mesh. **Semua metrik App Mesh Prometheus dari kluster Amazon EKS dan Kubernetes dikirim ke aliran log bernama /aws/containerinsights/ >prometheus//. *cluster\$1name* kubernetes-pod-appmesh-envoy**

Untuk menambahkan sebuah target scraping baru, Anda harus menambahkan sebuah bagian `job_name` baru pada bagian `scrape_configs` 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-new-exporters).

## CloudWatch konfigurasi agen untuk Prometheus
<a name="ContainerInsights-Prometheus-Setup-cw-agent-config2"></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 tersebut akan dapat mendeteksi nama klaster Amazon EKS dan Kubernetes.
+ **log\$1group\$1name**— menentukan nama grup log untuk metrik-metrik Prometheus yang di-scraping. Bidang ini bersifat opsional. Jika Anda menghilangkannya, CloudWatch gunakan **/aws/containerinsights/ *cluster\$1name* /prometheus** untuk log dari Amazon EKS dan Kubernetes cluster.
+ **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 untuk penemuan layanan Amazon ECS Prometheus. Untuk informasi selengkapnya, lihat [Panduan mendetail untuk penemuan otomatis di klaster-klaster Amazon ECS](ContainerInsights-Prometheus-Setup-autodiscovery-ecs.md).

  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. Defaultnya adalah Wilayah cluster Amazon ECS tempat CloudWatch agen diinstal.
  + `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.
+ **metric\$1declaration**— adalah bagian-bagian yang menentukan larik log dengan format metrik tersemat yang akan dihasilkan. Ada `metric_declaration` bagian untuk setiap sumber Prometheus yang diimpor agen secara default CloudWatch . 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",
   ...
}
```

## Tutorial untuk menambahkan sebuah target scraping Prometheus baru: metrik Server API Prometheus
<a name="ContainerInsights-Prometheus-Setup-new-exporters"></a>

Server API Kubernetes membuka metrik-metrik Prometheus pada titik akhir secara bawaan. Contoh resmi untuk konfigurasi scraping Server API Kubernetes tersedia di [Github](https://github.com/prometheus/prometheus/blob/main/documentation/examples/prometheus-kubernetes.yml).

Tutorial berikut menunjukkan cara melakukan langkah-langkah berikut untuk mulai mengimpor metrik API Server Kubernetes ke CloudWatch:
+ Menambahkan konfigurasi scraping Prometheus untuk Kubernetes API Server ke file YAMG agen. CloudWatch 
+ Mengonfigurasi definisi metrik format metrik yang disematkan dalam file CloudWatch YAMM agen.
+ (Opsional) Membuat CloudWatch dasbor untuk metrik Kubernetes API Server.

**catatan**  
Server API Kubernetes membuka metrik-metrik pengukuran, penghitung, histogram, dan ringkasan. Dalam rilis dukungan metrik Prometheus ini, hanya mengimpor metrik dengan jenis CloudWatch pengukur, penghitung, dan ringkasan.

**Untuk mulai mengumpulkan metrik Prometheus Server API Kubernetes di CloudWatch**

1. Unduh versi terbaru dari file `prometheus-eks.yaml`, `prometheus-eks-fargate.yaml`, atau `prometheus-k8s.yaml` dengan memasukkan salah satu dari perintah-perintah berikut.

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan perintah berikut:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, masukkan perintah berikut:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml
   ```

   Untuk sebuah klaster Kubernetes yang berjalan di sebuah instans Amazon EC2, masukkan perintah berikut:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
   ```

1. Buka file dengan editor teks, temukan bagian `prometheus-config` dan tambahkan bagian berikut di dalam bagian tersebut. Kemudian simpan perubahannya:

   ```
       # Scrape config for API servers
       - job_name: 'kubernetes-apiservers'
         kubernetes_sd_configs:
           - role: endpoints
             namespaces:
               names:
                 - default
         scheme: https
         tls_config:
           ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
           insecure_skip_verify: true
         bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
         relabel_configs:
         - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
           action: keep
           regex: kubernetes;https
         - action: replace
           source_labels:
           - __meta_kubernetes_namespace
           target_label: Namespace
         - action: replace
           source_labels:
           - __meta_kubernetes_service_name
           target_label: Service
   ```

1. Meskipun file YAML masih terbuka di editor teks, temukan bagian `cwagentconfig.json`. Tambahkan subbagian berikut dan simpan perubahannya. Bagian ini menempatkan metrik server API ke daftar CloudWatch izin agen. Tiga jenis metrik Server API ditambahkan ke daftar yang diizinkan:
   + penghitungan objek etcd
   + Metrik pengendali registrasi Server API
   + Metrik permintaan Server API

   ```
   {"source_labels": ["job", "resource"],
     "label_matcher": "^kubernetes-apiservers;(services|daemonsets.apps|deployments.apps|configmaps|endpoints|secrets|serviceaccounts|replicasets.apps)",
     "dimensions": [["ClusterName","Service","resource"]],
     "metric_selectors": [
     "^etcd_object_counts$"
     ]
   },
   {"source_labels": ["job", "name"],
      "label_matcher": "^kubernetes-apiservers;APIServiceRegistrationController$",
      "dimensions": [["ClusterName","Service","name"]],
      "metric_selectors": [
      "^workqueue_depth$",
      "^workqueue_adds_total$",
      "^workqueue_retries_total$"
     ]
   },
   {"source_labels": ["job","code"],
     "label_matcher": "^kubernetes-apiservers;2[0-9]{2}$",
     "dimensions": [["ClusterName","Service","code"]],
     "metric_selectors": [
      "^apiserver_request_total$"
     ]
   },
   {"source_labels": ["job"],
     "label_matcher": "^kubernetes-apiservers",
     "dimensions": [["ClusterName","Service"]],
     "metric_selectors": [
     "^apiserver_request_total$"
     ]
   },
   ```

1. Jika Anda sudah memiliki CloudWatch agen dengan dukungan Prometheus yang diterapkan di cluster, Anda harus menghapusnya dengan memasukkan perintah berikut:

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   ```

1. Terapkan CloudWatch agen dengan konfigurasi Anda yang diperbarui dengan memasukkan salah satu perintah berikut. Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan:

   ```
   kubectl apply -f prometheus-eks.yaml
   ```

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, Anda perlu memasukkan perintah berikut. Ganti *MyCluster* dan *region* dengan nilai agar sesuai dengan penerapan Anda.

   ```
   cat prometheus-eks-fargate.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

   Untuk sebuah klaster Kubernetes, masukkan perintah berikut. Ganti *MyCluster* dan *region* dengan nilai agar sesuai dengan penerapan Anda.

   ```
   cat prometheus-k8s.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

**Setelah Anda melakukan ini, Anda akan melihat aliran log baru bernama **kubernetes-apiservers** di grup log /aws/containerinsights/ /prometheus. *cluster\$1name*** Log stream ini harus mencakup peristiwa log dengan penetapan format metrik tersemat seperti berikut:

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"apiserver_request_total"
            }
         ],
         "Dimensions":[
            [
               "ClusterName",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "ClusterName":"my-cluster-name",
   "Namespace":"default",
   "Service":"kubernetes",
   "Timestamp":"1592267020339",
   "Version":"0",
   "apiserver_request_count":0,
   "apiserver_request_total":0,
   "code":"0",
   "component":"apiserver",
   "contentType":"application/json",
   "instance":"192.0.2.0:443",
   "job":"kubernetes-apiservers",
   "prom_metric_type":"counter",
   "resource":"pods",
   "scope":"namespace",
   "verb":"WATCH",
   "version":"v1"
}
```

Anda dapat melihat metrik Anda di CloudWatch konsol di namespace **ContainerInsights/Prometheus**. Anda juga dapat secara opsional membuat CloudWatch dasbor untuk metrik Prometheus Kubernetes API Server Anda.

### (Opsional) Membuat sebuah dasbor untuk metrik-metrik Server API Kubernetes.
<a name="ContainerInsights-Prometheus-Setup-KPI-dashboard"></a>

Untuk melihat metrik API Server Kubernetes di dasbor Anda, Anda harus terlebih dahulu menyelesaikan langkah-langkah di bagian sebelumnya untuk mulai mengumpulkan metrik ini di CloudWatch.

**Cara membuat sebuah dasbor untuk metrik-metrik Server API Kubernetes**

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

1. Pastikan Anda telah memilih AWS Wilayah yang benar.

1. Pada panel navigasi, silakan pilih **Dasbor**.

1. Pilih **Buat Dasbor**. Masukkan nama untuk dasbor baru tersebut, dan pilih **Buat dasbor**.

1. Di **Tambahkan ke dasbor ini**, pilih **Batalkan**.

1. Pilih **Tindakan**, **Tampilkan/sunting sumber**.

1. Unduh file JSON berikut: [Sumber Dasbor API Kubernetes](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/kubernetes_api_server/cw_dashboard_kubernetes_api_server.json).

1. Buka file JSON yang Anda unduh dengan editor teks, dan lakukan perubahan-perubahan berikut:
   + Ganti semua string `{{YOUR_CLUSTER_NAME}}` dengan nama persis seperti nama klaster Anda. Anda harus memastikan untuk tidak menambahkan spasi putih sebelum atau setelah teks.
   + Ganti semua string `{{YOUR_AWS_REGION}}` dengan nama Wilayah tempat metrik-metrik dikumpulkan. Sebagai contoh, `us-west-2`. Pastikan untuk tidak menambahkan spasi putih sebelum atau setelah teks.

1. Salin seluruh gumpalan JSON dan tempelkan ke dalam kotak teks di CloudWatch konsol, mengganti yang sudah ada di dalam kotak.

1. Pilih **Perbarui**, **Simpan dasbor**.

# (Opsional) Menyiapkan sampel beban kerja Amazon EKS terkontainer untuk pengujian metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads"></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).

Sebelum Anda dapat melakukan instalasi salah satu beban kerja ini, Anda harus melakukan instalasi Helm 3.x dengan memasukkan perintah-perintah berikut:

```
brew install helm
```

Untuk informasi selengkapnya, silakan lihat [Helm](https://helm.sh).

**Topics**
+ [Siapkan AWS App Mesh contoh beban kerja untuk Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-appmesh.md)
+ [Siapkan NGINX dengan lalu lintas sampel di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-nginx.md)
+ [Siapkan memcached dengan sebuah pengekspor metrik di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-memcached.md)
+ [Siapkan Java/JMX contoh beban kerja di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md)
+ [Siapkan HAProxy dengan eksportir metrik di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-haproxy.md)
+ [Tutorial untuk menambahkan target scrape Prometheus baru: Redis OSS di Amazon EKS dan Kubernetes cluster](ContainerInsights-Prometheus-Setup-redis-eks.md)

# Siapkan AWS App Mesh contoh beban kerja untuk Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh"></a>

Dukungan Prometheus dalam dukungan Container Insights. CloudWatch AWS App Mesh Bagian-bagian berikut akan menjelaskan cara menyiapkan App Mesh.

**Topics**
+ [Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran EC2 atau klaster Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-appmesh-EKS.md)
+ [Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran Fargate](ContainerInsights-Prometheus-Sample-Workloads-appmesh-Fargate.md)

# Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran EC2 atau klaster Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-EKS"></a>

Gunakan petunjuk ini jika Anda menyiapkan App Mesh pada sebuah klaster yang menjalankan Amazon EKS dengan tipe peluncuran EC2, atau sebuah klaster Kubernetes.

## Mengonfigurasi izin IAM
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-iam"></a>

Anda harus menambahkan **AWSAppMeshFullAccess** kebijakan peran IAM untuk grup simpul Amazon EKS atau Kubernetes Anda. Pada Amazon EKS, nama grup simpul ini terlihat mirip dengan `eksctl-integ-test-eks-prometheus-NodeInstanceRole-ABCDEFHIJKL`. Di Kubernetes, mungkin terlihat mirip dengan `nodes.integ-test-kops-prometheus.k8s.local`.

## Melakukan instalasi App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-install"></a>

Untuk melakukan instalasi pengendali App Mesh Kubernetes, ikuti petunjuk-petunjuk yang diuraikan di [Kontroler App Mesh](https://github.com/aws/eks-charts/tree/master/stable/appmesh-controller#app-mesh-controller).

## Melakukan instalasi aplikasi sampel
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-application"></a>

[aws-app-mesh-examples](https://github.com/aws/aws-app-mesh-examples)berisi beberapa penelusuran App Mesh Kubernetes. Untuk tutorial ini, Anda melakukan instalasi untuk sebuah aplikasi warna sampel yang menunjukkan bagaimana rute http dapat menggunakan header untuk mencocokkan permintaan masuk.

**Cara menggunakan sebuah aplikasi App Mesh sampel untuk menguji Wawasan Kontainer**

1. Instal aplikasi dengan menggunakan petunjuk ini: [https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-http-headers](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-http-headers). 

1. Luncurkan sebuah pod curler untuk menghasilkan lalu lintas:

   ```
   kubectl -n default run -it curler --image=tutum/curl /bin/bash
   ```

1. Lakukan curling pada titik akhir yang berbeda dengan mengubah header HTTP. Jalankan perintah curl beberapa kali, sebagaimana yang ditunjukkan:

   ```
   curl -H "color_header: blue" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   
   curl -H "color_header: red" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   
   curl -H "color_header: yellow" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   ```

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

1. Di AWS Wilayah tempat klaster Anda berjalan, pilih **Metrik** di panel navigasi. Metrik berada di **ContainerInsights/Prometheus** ruangnama.

1. Untuk melihat peristiwa CloudWatch Log, pilih **Grup log** di panel navigasi. Peristiwa-peristiwa berada dalam grup log ` /aws/containerinsights/your_cluster_name/prometheus ` di dalam log stream `kubernetes-pod-appmesh-envoy`.

## Menghapus lingkungan pengujian App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-delete"></a>

Setelah selesai menggunakan App Mesh dan aplikasi sampel, gunakan perintah berikut untuk menghapus sumber daya yang tidak diperlukan. Menghapus aplikasi sampel dengan memasukkan perintah berikut:

```
cd aws-app-mesh-examples/walkthroughs/howto-k8s-http-headers/
kubectl delete -f _output/manifest.yaml
```

Menghapus pengendali App Mesh dengan memasukkan perintah berikut:

```
helm delete appmesh-controller -n appmesh-system
```

# Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran Fargate
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-Fargate"></a>

Gunakan petunjuk-petunjuk ini jika Anda hendak menyiapkan App Mesh pada sebuah klaster yang menjalankan Amazon EKS dengan tipe peluncuran Fargate.

## Mengonfigurasi izin IAM
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh--fargate-iam"></a>

Untuk menyiapkan izin IAM, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create iamserviceaccount --cluster MyCluster \
 --namespace howto-k8s-fargate \
 --name appmesh-pod \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapDiscoverInstanceAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess \
 --override-existing-serviceaccounts \
 --approve
```

## Melakukan instalasi App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-install"></a>

Untuk melakukan instalasi pengendali App Mesh Kubernetes, ikuti petunjuk-petunjuk yang diuraikan di [Kontroler App Mesh](https://github.com/aws/eks-charts/tree/master/stable/appmesh-controller#app-mesh-controller). Pastikan untuk mengikuti petunjuk-petunjuk untuk Amazon EKS dengan tipe peluncuran Fargate.

## Melakukan instalasi aplikasi sampel
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-application"></a>

[aws-app-mesh-examples](https://github.com/aws/aws-app-mesh-examples)berisi beberapa penelusuran App Mesh Kubernetes. Untuk tutorial ini, Anda melakukan instalasi aplikasi warna sampel yang bekerja untuk klaster Amazon EKS dengan tipe peluncuran Fargate.

**Cara menggunakan sebuah aplikasi App Mesh sampel untuk menguji Wawasan Kontainer**

1. Instal aplikasi dengan menggunakan petunjuk ini: [https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-fargate](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-fargate). 

   Instruksi-instruksi tersebut mengasumsikan bahwa Anda membuat sebuah klaster baru dengan profil Fargate yang benar. Jika Anda ingin menggunakan sebuah klaster Amazon EKS yang telah Anda siapkan, maka Anda dapat menggunakan perintah-perintah berikut untuk menyiapkan klaster tersebut untuk demonstrasi ini. Ganti *MyCluster* dengan nama klaster Anda.

   ```
   eksctl create iamserviceaccount --cluster MyCluster \
    --namespace howto-k8s-fargate \
    --name appmesh-pod \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapDiscoverInstanceAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess \
    --override-existing-serviceaccounts \
    --approve
   ```

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --namespace howto-k8s-fargate --name howto-k8s-fargate
   ```

1. Port meneruskan deployment aplikasi depan:

   ```
   kubectl -n howto-k8s-fargate port-forward deployment/front 8080:8080
   ```

1. Lakukan curling pada aplikasi depan:

   ```
   while true; do  curl -s http://localhost:8080/color; sleep 0.1; echo ; done
   ```

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

1. Di AWS Wilayah tempat klaster Anda berjalan, pilih **Metrik** di panel navigasi. Metrik berada di **ContainerInsights/Prometheus** ruangnama.

1. Untuk melihat peristiwa CloudWatch Log, pilih **Grup log** di panel navigasi. Peristiwa-peristiwa berada dalam grup log ` /aws/containerinsights/your_cluster_name/prometheus ` di dalam log stream `kubernetes-pod-appmesh-envoy`.

## Menghapus lingkungan pengujian App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-delete"></a>

Setelah selesai menggunakan App Mesh dan aplikasi sampel, gunakan perintah berikut untuk menghapus sumber daya yang tidak diperlukan. Menghapus aplikasi sampel dengan memasukkan perintah berikut:

```
cd aws-app-mesh-examples/walkthroughs/howto-k8s-fargate/
kubectl delete -f _output/manifest.yaml
```

Menghapus pengendali App Mesh dengan memasukkan perintah berikut:

```
helm delete appmesh-controller -n appmesh-system
```

# Siapkan NGINX dengan lalu lintas sampel di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-nginx"></a>

NGINX adalah sebuah server web yang juga dapat digunakan sebagai penyeimbang beban dan proksi balik. Untuk informasi selengkapnya tentang bagaimana Kubernetes menggunakan NGINX untuk ingress, silakan lihat [kubernetes/ingress-nginx.](https://github.com/kubernetes/ingress-nginx)

**Untuk melakukan instalasi Ingress-NGINX dengan layanan lalu lintas sampel untuk menguji dukungan Prometheus Wawasan Kontainer**

1. Masukkan perintah berikut untuk menambahkan repo ingress-nginx Helm:

   ```
   helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
   ```

1. Masukkan perintah-perintah berikut.

   ```
   kubectl create namespace nginx-ingress-sample
   
   helm install my-nginx ingress-nginx/ingress-nginx \
   --namespace nginx-ingress-sample \
   --set controller.metrics.enabled=true \
   --set-string controller.metrics.service.annotations."prometheus\.io/port"="10254" \
   --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"
   ```

1. Periksa apakah layanan-layanan dimulai dengan benar dengan memasukkan perintah berikut:

   ```
   kubectl get service -n nginx-ingress-sample
   ```

   Output dari perintah ini akan menampilkan beberapa kolom, termasuk sebuah kolom `EXTERNAL-IP`.

1. Mengatur variabel `EXTERNAL-IP` terhadap nilai kolom `EXTERNAL-IP` dalam baris pengendali ingress NGINX.

   ```
   EXTERNAL_IP=your-nginx-controller-external-ip
   ```

1. Mulai beberapa lalu lintas NGINX sampel dengan memasukkan perintah berikut. 

   ```
   SAMPLE_TRAFFIC_NAMESPACE=nginx-sample-traffic
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/nginx-traffic/nginx-traffic-sample.yaml | 
   sed "s/{{external_ip}}/$EXTERNAL_IP/g" | 
   sed "s/{{namespace}}/$SAMPLE_TRAFFIC_NAMESPACE/g" | 
   kubectl apply -f -
   ```

1. Masukkan perintah berikut untuk mengonfirmasi bahwa ketiga pod berada dalam status `Running`.

   ```
   kubectl get pod -n $SAMPLE_TRAFFIC_NAMESPACE
   ```

   Jika mereka berjalan, Anda akan segera melihat metrik di **ContainerInsights/Prometheus** ruangnama.

**Cara menghapus NGINX dan aplikasi lalu lintas sampel**

1. Hapus layanan lalu lintas sampel dengan memasukkan perintah berikut:

   ```
   kubectl delete namespace $SAMPLE_TRAFFIC_NAMESPACE
   ```

1. Hapus egress NGINX dengan nama rilis Helm. 

   ```
   helm uninstall my-nginx --namespace nginx-ingress-sample
   kubectl delete namespace nginx-ingress-sample
   ```

# Siapkan memcached dengan sebuah pengekspor metrik di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-memcached"></a>

Memcached adalah sebuah sistem caching objek memori sumber terbuka. Untuk informasi selengkapnya, silakan lihat [ Apa itu Memcached?](https://www.memcached.org)

Jika Anda menjalankan memcached pada sebuah klaster dengan tipe peluncuran Fargate, maka Anda perlu meyiapkan profil Fargate sebelum melakukan langkah-langkah dalam prosedur ini. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace memcached-sample --name memcached-sample
```

**Cara melakukan instalasi dengan pengekspor metrik untuk menguji dukungan Wawasan Kontainer Prometheus**

1. Masukkan perintah berikut untuk menambahkan repo:

   ```
   helm repo add bitnami https://charts.bitnami.com/bitnami
   ```

1. Masukkan perintah berikut untuk membuat sebuah namespace baru:

   ```
   kubectl create namespace memcached-sample
   ```

1. Masukkan perintah berikut untuk melakukan instalasi Memcached

   ```
   helm install my-memcached bitnami/memcached --namespace memcached-sample \
   --set metrics.enabled=true \
   --set-string serviceAnnotations.prometheus\\.io/port="9150" \
   --set-string serviceAnnotations.prometheus\\.io/scrape="true"
   ```

1. Masukkan perintah berikut untuk mengonfirmasi keterangan dari layanan yang berjalan:

   ```
   kubectl describe service my-memcached-metrics -n memcached-sample
   ```

   Anda seharusnya melihat dua keterangan berikut:

   ```
   Annotations:   prometheus.io/port: 9150
                  prometheus.io/scrape: true
   ```

**Cara menghapus instalasi memcached**
+ Masukkan perintah-perintah berikut.

  ```
  helm uninstall my-memcached --namespace memcached-sample
  kubectl delete namespace memcached-sample
  ```

# Siapkan Java/JMX contoh beban kerja di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-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).

Wawasan Kontainer dapat mengumpulkan metrik-metrik Prometheus yang telah ditentukan sebelumnya dari Java Virtual Machine (JVM), Java, dan Tomcat (Catalina) dengan menggunakan JMX Exporter.

## Konfigurasi scraping Prometheus bawaan
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-default"></a>

Secara default, CloudWatch agen dengan dukungan Prometheus akan mengikis metrik Java/JMX Prometheus dari setiap pod di kluster Amazon EKS atau Kubernetes. `http://CLUSTER_IP:9404/metrics` Hal ini dilakukan oleh penemuan `role: pod` Prometheus `kubernetes_sd_config`. 9404 adalah port bawaan yang dialokasikan untuk JMX Exporter oleh Prometheus. Untuk informasi selengkapnya tentang penemuan `role: pod`, silakan lihat [ pod](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#pod). Anda dapat mengonfigurasi JMX Exporter untuk mengekspos metrik-metrik sebuah pada port atau metrik\$1path yang berbeda. Jika Anda mengubah port atau jalur, perbarui jmx scrape\$1config default di peta konfigurasi agen. CloudWatch Jalankan perintah berikut untuk mendapatkan konfigurasi Prometheus CloudWatch agen saat ini:

```
kubectl describe cm prometheus-config -n amazon-cloudwatch
```

Bidang yang harus diubah adalah bidang `/metrics` dan `regex: '.*:9404$'`, seperti yang disorot dalam contoh berikut.

```
job_name: 'kubernetes-jmx-pod'
sample_limit: 10000
metrics_path: /metrics
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__address__]
  action: keep
  regex: '.*:9404$'
- action: replace
  regex: (.+)
  source_labels:
```

## Konfigurasi scraping Prometheus lainnya
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-other"></a>

Jika Anda mengekspos aplikasi yang berjalan pada sekumpulan pod dengan pengekspor Java/JMX Prometheus oleh Layanan Kubernetes, maka Anda juga dapat beralih untuk menggunakan penemuan `role: service` atau penemuan `role: endpoint` dari Prometheus `kubernetes_sd_config`. Untuk informasi selengkapnya tentang metode penemuan ini, silakan lihat [ layanan](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#service), [titik akhir](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#endpoints), dan [ <kubernetes\$1sd\$1config>.](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config). 

Lebih banyak label meta disediakan oleh dua mode penemuan layanan ini yang dapat berguna bagi Anda untuk membangun dimensi CloudWatch metrik. Sebagai contoh, Anda dapat mengubah label `__meta_kubernetes_service_name` menjadi `Service` dan memasukkannya ke dalam dimensi metrik Anda. Untuk informasi selengkapnya tentang menyesuaikan CloudWatch metrik dan dimensinya, lihat. [CloudWatch konfigurasi agen untuk Prometheus](ContainerInsights-Prometheus-Setup-configure-ECS.md#ContainerInsights-Prometheus-Setup-cw-agent-config)

## Citra Docker dengan JMX Exporter
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-docker"></a>

Berikutnya, buat sebuah citra Docker. Bagian-bagian berikut memberikan dua contoh Dockerfile.

Setelah membangun citra tersebut, muatkan citra itu ke Amazon EKS atau Kubernetes, dan kemudian jalankan perintah berikut untuk memverifikasi bahwa metrik-metrik Prometheus diekspos oleh `JMX_EXPORTER` di port 9404. Ganti *\$1JAR\$1SAMPLE\$1TRAFFIC\$1POD* dengan nama pod yang sedang berjalan dan ganti *\$1JAR\$1SAMPLE\$1TRAFFIC\$1NAMESPACE* dengan namespace aplikasi Anda. 

Jika Anda menjalankan JMX Exporter pada sebuah klaster dengan tipe peluncuran Fargate, maka Anda juga perlu meyiapkan sebuah profil Fargate sebelum melakukan langkah-langkah dalam prosedur ini. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace $JAR_SAMPLE_TRAFFIC_NAMESPACE\
 --name $JAR_SAMPLE_TRAFFIC_NAMESPACE
```

```
kubectl exec $JAR_SAMPLE_TRAFFIC_POD -n $JARCAT_SAMPLE_TRAFFIC_NAMESPACE -- curl http://localhost:9404
```

## Contoh: Citra Docker Apache Tomcat dengan metrik-metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-tomcat"></a>

Server Apache Tomcat membuka JMX mBeans secara bawaan. Anda dapat mengintegrasikan JMX Exporter dengan Tomcat untuk mengekspos JMX mBeans sebagai metrik-metrik Prometheus. Contoh Dockerfile berikut menunjukkan langkah-langkah untuk membangun sebuah citra pengujian: 

```
# From Tomcat 9.0 JDK8 OpenJDK 
FROM tomcat:9.0-jdk8-openjdk 

RUN mkdir -p /opt/jmx_exporter

COPY ./jmx_prometheus_javaagent-0.12.0.jar /opt/jmx_exporter
COPY ./config.yaml /opt/jmx_exporter
COPY ./setenv.sh /usr/local/tomcat/bin 
COPY your web application.war /usr/local/tomcat/webapps/

RUN chmod  o+x /usr/local/tomcat/bin/setenv.sh

ENTRYPOINT ["catalina.sh", "run"]
```

Daftar berikut menjelaskan empat baris `COPY` dalam Dockerfile ini.
+ [Unduh file jar JMX Exporter terbaru dari jmx\$1exporter. https://github.com/prometheus/](https://github.com/prometheus/jmx_exporter)
+ `config.yaml` adalah file konfigurasi JMX Exporter. Untuk informasi selengkapnya, lihat [https://github.com/prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter#Configuration ) \$1Configuration.

  Berikut ini adalah sebuah file konfigurasi sampel untuk Java dan Tomcat:

  ```
  lowercaseOutputName: true
  lowercaseOutputLabelNames: true
  
  rules:
  - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
    name: java_lang_OperatingSystem_$1
    type: GAUGE
  
  - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
    name: java_lang_threading_$1
    type: GAUGE
  
  - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
    name: catalina_globalrequestprocessor_$3_total
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina global $3
    type: COUNTER
  
  - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
    name: catalina_servlet_$3_total
    labels:
      module: "$1"
      servlet: "$2"
    help: Catalina servlet $3 total
    type: COUNTER
  
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
    name: catalina_threadpool_$3
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina threadpool $3
    type: GAUGE
  
  - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
    name: catalina_session_$3_total
    labels:
      context: "$2"
      host: "$1"
    help: Catalina session $3 total
    type: COUNTER
  
  - pattern: ".*"
  ```
+ `setenv.sh` adalah sebuah skrip perusahaan rintisan Tomcat untuk memulai JMX exporter bersama dengan Tomcat dan mengekspos metrik-metrik Prometheus di port 9404 dari host lokal. Ia juga menyediakan JMX Exporter dengan jalur file `config.yaml`.

  ```
  $ cat setenv.sh 
  export JAVA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/jmx_exporter/config.yaml $JAVA_OPTS"
  ```
+ Web application.war Anda adalah file `war` aplikasi web Anda yang akan dimuat oleh Tomcat.

Bangun sebuah citra docker dengan konfigurasi ini dan unggah citra tersebut ke sebuah repositori citra.

## Contoh: Citra Docker Aplikasi Jar Java dengan metrik-metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-jar"></a>

Contoh Dockerfile berikut menunjukkan langkah-langkah untuk membangun sebuah citra pengujian: 

```
# Alpine Linux with OpenJDK JRE
FROM openjdk:8-jre-alpine

RUN mkdir -p /opt/jmx_exporter

COPY ./jmx_prometheus_javaagent-0.12.0.jar /opt/jmx_exporter
COPY ./SampleJavaApplication-1.0-SNAPSHOT.jar /opt/jmx_exporter
COPY ./start_exporter_example.sh /opt/jmx_exporter
COPY ./config.yaml /opt/jmx_exporter

RUN chmod -R o+x /opt/jmx_exporter
RUN apk add curl

ENTRYPOINT exec /opt/jmx_exporter/start_exporter_example.sh
```

Daftar berikut menjelaskan empat baris `COPY` dalam Dockerfile ini.
+ [Unduh file jar JMX Exporter terbaru dari jmx\$1exporter. https://github.com/prometheus/](https://github.com/prometheus/jmx_exporter)
+ `config.yaml` adalah file konfigurasi JMX Exporter. Untuk informasi selengkapnya, lihat [https://github.com/prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter#Configuration ) \$1Configuration.

  Berikut ini adalah sebuah file konfigurasi sampel untuk Java dan Tomcat:

  ```
  lowercaseOutputName: true
  lowercaseOutputLabelNames: true
  
  rules:
  - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
    name: java_lang_OperatingSystem_$1
    type: GAUGE
  
  - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
    name: java_lang_threading_$1
    type: GAUGE
  
  - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
    name: catalina_globalrequestprocessor_$3_total
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina global $3
    type: COUNTER
  
  - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
    name: catalina_servlet_$3_total
    labels:
      module: "$1"
      servlet: "$2"
    help: Catalina servlet $3 total
    type: COUNTER
  
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
    name: catalina_threadpool_$3
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina threadpool $3
    type: GAUGE
  
  - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
    name: catalina_session_$3_total
    labels:
      context: "$2"
      host: "$1"
    help: Catalina session $3 total
    type: COUNTER
  
  - pattern: ".*"
  ```
+ `start_exporter_example.sh` adalah skrip untuk memulai aplikasi JAR dengan metrik-metrik Prometheus yang diekspor. Ia juga menyediakan JMX Exporter dengan jalur file `config.yaml`.

  ```
  $ cat start_exporter_example.sh 
  java -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/jmx_exporter/config.yaml -cp  /opt/jmx_exporter/SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App
  ```
+ SampleJavaApplication-1.0-snapshot.jar adalah contoh file jar aplikasi Java. Ganti file tersebut dengan aplikasi Java yang ingin Anda pantau.

Bangun sebuah citra docker dengan konfigurasi ini dan unggah citra tersebut ke sebuah repositori citra.

# Siapkan HAProxy dengan eksportir metrik di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-haproxy"></a>

HAProxy adalah aplikasi proxy sumber terbuka. Untuk informasi selengkapnya, lihat [HAProxy](https://www.haproxy.org).

Jika Anda menjalankan HAProxy cluster dengan tipe peluncuran Fargate, Anda perlu mengatur profil Fargate sebelum melakukan langkah-langkah dalam prosedur ini. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace haproxy-ingress-sample --name haproxy-ingress-sample
```

**Untuk menginstal HAProxy dengan eksportir metrik untuk menguji dukungan Container Insights Prometheus**

1. Masukkan perintah berikut untuk menambahkan repo inkubator Helm:

   ```
   helm repo add haproxy-ingress https://haproxy-ingress.github.io/charts
   ```

1. Masukkan perintah berikut untuk membuat sebuah namespace baru:

   ```
   kubectl create namespace haproxy-ingress-sample
   ```

1. Masukkan perintah berikut untuk menginstal HAProxy:

   ```
   helm install haproxy haproxy-ingress/haproxy-ingress \
   --namespace haproxy-ingress-sample \
   --set defaultBackend.enabled=true \
   --set controller.stats.enabled=true \
   --set controller.metrics.enabled=true \
   --set-string controller.metrics.service.annotations."prometheus\.io/port"="9101" \
   --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"
   ```

1. Masukkan perintah berikut untuk mengonfirmasi keterangan dari layanan:

   ```
   kubectl describe service haproxy-haproxy-ingress-metrics -n haproxy-ingress-sample
   ```

   Anda seharusnya melihat dua keterangan berikut.

   ```
   Annotations:   prometheus.io/port: 9101
                  prometheus.io/scrape: true
   ```

**Untuk menghapus instalasi HAProxy**
+ Masukkan perintah-perintah berikut.

  ```
  helm uninstall haproxy --namespace haproxy-ingress-sample
  kubectl delete namespace haproxy-ingress-sample
  ```

# Tutorial untuk menambahkan target scrape Prometheus baru: Redis OSS di Amazon EKS dan Kubernetes cluster
<a name="ContainerInsights-Prometheus-Setup-redis-eks"></a>

Tutorial ini memberikan pengantar langsung untuk mengikis metrik Prometheus dari contoh aplikasi Redis OSS di Amazon EKS dan Kubernetes. 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 Redis OSS Prometheus 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)

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

1. Mengatur namespace untuk sampel beban kerja Redis OSS.

   ```
   REDIS_NAMESPACE=redis-sample
   ```

1. Jika Anda menjalankan Redis OSS pada cluster dengan tipe peluncuran Fargate, Anda perlu mengatur profil Fargate. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
   ```

1. Masukkan perintah berikut untuk menginstal sampel beban kerja Redis OSS.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml \
   | sed "s/{{namespace}}/$REDIS_NAMESPACE/g" \
   | kubectl apply -f -
   ```

1. Instalasi termasuk layanan bernama `my-redis-metrics` yang mengekspos metrik Redis OSS Prometheus pada port 9121 Masukkan perintah berikut untuk mendapatkan rincian layanan: 

   ```
   kubectl describe service/my-redis-metrics  -n $REDIS_NAMESPACE
   ```

   Di `Annotations` bagian hasil, Anda akan melihat dua anotasi yang cocok dengan konfigurasi scrape Prometheus agen, sehingga dapat menemukan beban kerja CloudWatch secara otomatis:

   ```
   prometheus.io/port: 9121
   prometheus.io/scrape: true
   ```

   Konfigurasi scraping Prometheus terkait dapat ditemukan di bagian `- job_name: kubernetes-service-endpoints` dari `kubernetes-eks.yaml` atau `kubernetes-k8s.yaml`.

**Untuk mulai mengumpulkan metrik Redis OSS Prometheus di CloudWatch**

1. Unduh versi terbaru dari file `kubernetes-eks.yaml` atau `kubernetes-k8s.yaml` dengan memasukkan salah satu perintah dari perintah-perintah berikut. Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan perintah ini:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, masukkan perintah ini:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml
   ```

   Untuk sebuah klaster Kubernetes yang berjalan di sebuah instans Amazon EC2, masukkan perintah ini:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
   ```

1. Buka file dengan editor teks, dan temukan bagian `cwagentconfig.json`. Tambahkan subbagian berikut dan simpan perubahannya. Pastikan bahwa indentasi mengikuti pola yang ada saat itu.

   ```
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName"]],
     "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": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName","cmd"]],
     "metric_selectors": [
       "^redis_commands_total$"
     ]
   },
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName","db"]],
     "metric_selectors": [
       "^redis_db_keys$"
     ]
   },
   ```

   Bagian yang Anda tambahkan menempatkan metrik Redis OSS ke daftar izin CloudWatch agen. Untuk daftar metrik ini, silakan lihat bagian berikut.

1. Jika Anda sudah memiliki CloudWatch agen dengan dukungan Prometheus yang diterapkan di cluster ini, Anda harus menghapusnya dengan memasukkan perintah berikut.

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   ```

1. Terapkan CloudWatch agen dengan konfigurasi Anda yang diperbarui dengan memasukkan salah satu perintah berikut. Ganti *MyCluster* dan *region* untuk mencocokkan pengaturan Anda.

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan perintah ini:

   ```
   kubectl apply -f prometheus-eks.yaml
   ```

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, masukkan perintah ini:

   ```
   cat prometheus-eks-fargate.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

   Untuk sebuah klaster Kubernetes, masukkan perintah ini.

   ```
   cat prometheus-k8s.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

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

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


| Nama metrik | Dimensi | 
| --- | --- | 
|  `redis_net_input_bytes_total` |  ClusterName, `Namespace`  | 
|  `redis_net_output_bytes_total` |  ClusterName, `Namespace`  | 
|  `redis_expired_keys_total` |  ClusterName, `Namespace`  | 
|  `redis_evicted_keys_total` |  ClusterName, `Namespace`  | 
|  `redis_keyspace_hits_total` |  ClusterName, `Namespace`  | 
|  `redis_keyspace_misses_total` |  ClusterName, `Namespace`  | 
|  `redis_memory_used_bytes` |  ClusterName, `Namespace`  | 
|  `redis_connected_clients` |  ClusterName, `Namespace`  | 
|  `redis_commands_total` |  ClusterName, `Namespace`, cmd  | 
|  `redis_db_keys` |  ClusterName, `Namespace`, 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
   REGION_NAME=your_metric_region_such_as_us-east-1
   CLUSTER_NAME=your_k8s_cluster_name_here
   NAMESPACE=your_redis_service_namespace_here
   ```

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" \
   ```

# Konversi tipe metrik Prometheus oleh Agen CloudWatch
<a name="ContainerInsights-Prometheus-metrics-conversion"></a>

Pustaka klien Prometheus menawarkan empat tipe metrik inti: 
+ Penghitung
+ Pengukur
+ Ringkasan
+ Histogram

 CloudWatch Agen mendukung jenis metrik penghitung, pengukur, dan ringkasan.

 Metrik Prometheus dengan tipe metrik histogram yang tidak didukung diturunkan oleh CloudWatch agen. Untuk informasi selengkapnya, lihat [Mencatat log metrik-metrik Prometheus yang dibuang](ContainerInsights-Prometheus-troubleshooting-EKS.md#ContainerInsights-Prometheus-troubleshooting-droppedmetrics).

**Metrik pengukuran**

Sebuah metrik pengukur Prometheus adalah sebuah metrik yang merepresentasikan nilai numerik tunggal yang dapat naik dan turun tanpa alasan. CloudWatch Agen menggores metrik pengukur dan mengirimkan nilai-nilai ini secara langsung.

**Metrik penghitung**

Metrik penghitung Prometheus adalah sebuah metrik kumulatif yang merepresentasikan sebuah penghitung tunggal yang terus-menerus meningkat secara monoton, di mana nilainya hanya dapat bertambah atau direset menjadi nol CloudWatch agen menghitung delta dari scrape sebelumnya dan mengirimkan nilai delta sebagai nilai metrik dalam peristiwa log. Jadi CloudWatch agen akan mulai menghasilkan satu peristiwa log dari goresan kedua dan melanjutkan dengan goresan berikutnya, jika ada.

**Metrik ringkasan**

Sebuah metrik ringkasan Prometheus adalah jenis metrik kompleks yang direpresentasikan oleh beberapa titik data. Metrik ini menyediakan jumlah observasi total dan jumlah dari semua nilai-nilai yang diamati. Metrik ini menghitung kuantil yang dapat dikonfigurasi selama jendela waktu yang bergerak

Jumlah dan hitungan dari sebuah metrik ringkasan bersifat kumulatif, namun kuantil-kuantilnya tidak demikian Contoh berikut menunjukkan varian kuantil.

```
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 7.123e-06
go_gc_duration_seconds{quantile="0.25"} 9.204e-06
go_gc_duration_seconds{quantile="0.5"} 1.1065e-05
go_gc_duration_seconds{quantile="0.75"} 2.8731e-05
go_gc_duration_seconds{quantile="1"} 0.003841496
go_gc_duration_seconds_sum 0.37630427
go_gc_duration_seconds_count 9774
```

 CloudWatch Agen menangani jumlah dan hitungan metrik ringkasan dengan cara yang sama seperti menangani metrik penghitung, seperti yang dijelaskan di bagian sebelumnya. CloudWatch Agen mempertahankan nilai kuantil seperti yang dilaporkan semula.

# Metrik Prometheus dikumpulkan oleh agen CloudWatch
<a name="ContainerInsights-Prometheus-metrics"></a>

 CloudWatch Agen dengan dukungan Prometheus secara otomatis mengumpulkan metrik dari beberapa layanan dan beban kerja. Metrik-metrik yang dikumpulkan secara bawaan dicantumkan dalam bagian-bagian berikut. Anda juga dapat mengonfigurasi agen untuk mengumpulkan lebih banyak metrik dari layanan-layanan ini, dan untuk mengumpulkan metrik-metrik Prometheus dari aplikasi dan layanan lain. Untuk informasi selengkapnya tentang pengumpulan metrik tambahan, silakan lihat [CloudWatch konfigurasi agen untuk Prometheus](ContainerInsights-Prometheus-Setup-configure-ECS.md#ContainerInsights-Prometheus-Setup-cw-agent-config).

Metrik prometheus yang dikumpulkan dari kluster Amazon EKS dan Kubernetes ada di **ContainerInsights/Prometheus** ruangnama. Metrik Prometheus yang dikumpulkan dari cluster Amazon ECS ada di namespace. **ECS/ContainerInsights/Prometheus** 

**Topics**
+ [Metrik-metrik Prometheus untuk App Mesh](#ContainerInsights-Prometheus-metrics-appmesh)
+ [Metrik-metrik Prometheus untuk NGINX](#ContainerInsights-Prometheus-metrics-nginx)
+ [Metrik-metrik Prometheus untuk Memcached](#ContainerInsights-Prometheus-metrics-memcached)
+ [Metrik-metrik Prometheus untuk Java/JMX](#ContainerInsights-Prometheus-metrics-jmx)
+ [Metrik Prometheus untuk HAProxy](#ContainerInsights-Prometheus-metrics-haproxy)

## Metrik-metrik Prometheus untuk App Mesh
<a name="ContainerInsights-Prometheus-metrics-appmesh"></a>

Metrik-metrik berikut secara otomatis dikumpulkan dari App Mesh .

**Metrik-metrik Prometheus untuk App Mesh di klaster Amazon EKS dan Kubernetes**


| Nama metrik | Dimensi | 
| --- | --- | 
|  `envoy_http_downstream_rq_total` |  ClusterName, `Namespace`  | 
|  `envoy_http_downstream_rq_xx` |  ClusterName, `Namespace` ClusterName, `Namespace`, envoy\$1http\$1conn\$1manager\$1prefix, envoy\$1response\$1code\$1class  | 
|  `envoy_cluster_upstream_cx_rx_bytes_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_tx_bytes_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_membership_healthy` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_membership_total` |  ClusterName, `Namespace`  | 
|  `envoy_server_memory_heap_size` |  ClusterName, `Namespace`  | 
|  `envoy_server_memory_allocated` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_connect_timeout` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_pending_failure_eject` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_pending_overflow` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_timeout` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_try_per_timeout` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_rx_reset` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_destroy_local_with_active_rq` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_cx_destroy_remote_active_rq` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_maintenance_mode` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_paused_reading_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_resumed_reading_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_backed_up_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_flow_control_drained_total` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_retry` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_retry_success` |  ClusterName, `Namespace`  | 
|  `envoy_cluster_upstream_rq_retry_overflow` |  ClusterName, `Namespace`  | 
|  `envoy_server_live` |  ClusterName, `Namespace`  | 
|  `envoy_server_uptime` |  ClusterName, `Namespace`  | 

**Metrik-metrik Prometheus untuk App Mesh di klaster Amazon ECS**


| Nama metrik | Dimensi | 
| --- | --- | 
|  `envoy_http_downstream_rq_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_http_downstream_rq_xx` |  ClusterName, `TaskDefinitionFamily` | 
|  `envoy_cluster_upstream_cx_rx_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_tx_bytes_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_membership_healthy` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_membership_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_memory_heap_size` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_memory_allocated` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_connect_timeout` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_pending_failure_eject` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_pending_overflow` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_timeout` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_try_per_timeout` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_rx_reset` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_destroy_local_with_active_rq` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_cx_destroy_remote_active_rq` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_maintenance_mode` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_paused_reading_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_resumed_reading_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_backed_up_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_flow_control_drained_total` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_retry` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_retry_success` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_cluster_upstream_rq_retry_overflow` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_live` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_server_uptime` |  ClusterName, `TaskDefinitionFamily`  | 
|  `envoy_http_downstream_rq_xx` |  ClusterName,, TaskDefinitionFamily envoy\$1http\$1conn\$1manager\$1awalan, envoy\$1response\$1code\$1class ClusterName,, TaskDefinitionFamily envoy\$1response\$1code\$1class | 

**catatan**  
`TaskDefinitionFamily` adalah namespace Kubernetes dari mesh.  
Nilai dari `envoy_http_conn_manager_prefix` dapat berupa `ingress`, `egress`, atau `admin`.   
Nilai dari `envoy_response_code_class` dapat berupa `1` (singkatan untuk `1xx`), `2` singkatan untuk `2xx`), `3` singkatan untuk `3xx`), `4` singkatan untuk `4xx`), atau `5` singkatan untuk `5xx`). 

## Metrik-metrik Prometheus untuk NGINX
<a name="ContainerInsights-Prometheus-metrics-nginx"></a>

Metrik-metrik berikut secara otomatis akan dikumpulkan dari NGINX pada klaster Amazon EKS dan Kubernetes.


| Nama metrik | Dimensi | 
| --- | --- | 
|  `nginx_ingress_controller_nginx_process_cpu_seconds_total` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_success` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_requests` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_nginx_process_connections` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_nginx_process_connections_total` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_nginx_process_resident_memory_bytes` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_config_last_reload_successful` |  ClusterName, `Namespace`, Layanan  | 
|  `nginx_ingress_controller_requests` |  ClusterName,`Namespace`, Layanan, status  | 

## Metrik-metrik Prometheus untuk Memcached
<a name="ContainerInsights-Prometheus-metrics-memcached"></a>

Metrik-metrik berikut secara otomatis akan dikumpulkan dari Memcached pada klaster Amazon EKS dan Kubernetes.


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

## Metrik-metrik Prometheus untuk Java/JMX
<a name="ContainerInsights-Prometheus-metrics-jmx"></a>

**Metrik-metrik yang dikumpulkan di klaster Amazon EKS dan Kubernetes**

Di klaster Amazon EKS dan Kubernetes, Wawasan Kontainer dapat mengumpulkan metrik-metrik Prometheus yang telah ditentukan sebelumnya untuk yang berikutnya dari Java Virtual Machine (JVM), Java, dan Tomcat (Catalina) dengan menggunakan JMX Exporter. Untuk informasi selengkapnya, silakan lihat [ prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter) di Github.

**Java/JMX di klaster Amazon EKS dan Kubernetes**


| Nama metrik | Dimensi | 
| --- | --- | 
|  `jvm_classes_loaded` |  `ClusterName`, `Namespace`  | 
|  `jvm_threads_current` |  `ClusterName`, `Namespace`  | 
|  `jvm_threads_daemon` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_totalswapspacesize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_systemcpuload` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_processcpuload` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_freeswapspacesize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_totalphysicalmemorysize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_freephysicalmemorysize` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_openfiledescriptorcount` |  `ClusterName`, `Namespace`  | 
|  `java_lang_operatingsystem_availableprocessors` |  `ClusterName`, `Namespace`  | 
|  `jvm_memory_bytes_used` |  `ClusterName`, `Namespace`, bidang  | 
|  `jvm_memory_pool_bytes_used` |  `ClusterName`, `Namespace`, kolam  | 

**catatan**  
Nilai dari dimensi `area` bisa `heap` atau `nonheap`.  
Nilai dari `pool` dimensi bisa `Tenured Gen`, `Compress Class Space`, `Survivor Space`, `Eden Space`, `Code Cache`, atau `Metaspace`.

**Tomcat/JMX di klaster Amazon EKS dan Kubernetes**

Selain Java/JMX metrik di tabel sebelumnya, metrik berikut juga dikumpulkan untuk beban kerja Tomcat.


| Nama metrik | Dimensi | 
| --- | --- | 
|  `catalina_manager_activesessions` |  `ClusterName`, `Namespace`  | 
|  `catalina_manager_rejectedsessions` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_bytesreceived` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_bytessent` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_requestcount` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_errorcount` |  `ClusterName`, `Namespace`  | 
|  `catalina_globalrequestprocessor_processingtime` |  `ClusterName`, `Namespace`  | 

**Java/JMX di klaster Amazon ECS**


| Nama metrik | Dimensi | 
| --- | --- | 
|  `jvm_classes_loaded` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `jvm_threads_current` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `jvm_threads_daemon` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_totalswapspacesize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_systemcpuload` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_processcpuload` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_freeswapspacesize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_totalphysicalmemorysize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_freephysicalmemorysize` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_openfiledescriptorcount` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `java_lang_operatingsystem_availableprocessors` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `jvm_memory_bytes_used` |  `ClusterName`, TaskDefinitionFamily, daerah  | 
|  `jvm_memory_pool_bytes_used` |  `ClusterName`, TaskDefinitionFamily, kolam  | 

**catatan**  
Nilai dari dimensi `area` bisa `heap` atau `nonheap`.  
Nilai dari dimensi `pool` bisa `Tenured Gen`, `Compress Class Space`, `Survivor Space`, `Eden Space`, `Code Cache`, atau `Metaspace`.

**Tomcat/JMX di klaster Amazon ECS**

Selain Java/JMX metrik di tabel sebelumnya, metrik berikut juga dikumpulkan untuk beban kerja Tomcat di cluster Amazon ECS.


| Nama metrik | Dimensi | 
| --- | --- | 
|  `catalina_manager_activesessions` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_manager_rejectedsessions` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_bytesreceived` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_bytessent` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_requestcount` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_errorcount` |  `ClusterName`, `TaskDefinitionFamily`  | 
|  `catalina_globalrequestprocessor_processingtime` |  `ClusterName`, `TaskDefinitionFamily`  | 

## Metrik Prometheus untuk HAProxy
<a name="ContainerInsights-Prometheus-metrics-haproxy"></a>

Metrik berikut dikumpulkan secara otomatis dari klaster HAProxy Amazon EKS dan Kubernetes.

Metrik yang dikumpulkan bergantung pada versi HAProxy Ingress yang Anda gunakan. Untuk informasi selengkapnya tentang HAProxy Ingress dan versinya, lihat [haproxy-ingress](https://artifacthub.io/packages/helm/haproxy-ingress/haproxy-ingress).


| Nama metrik | Dimensi | Ketersediaan | 
| --- | --- | --- | 
|  `haproxy_backend_bytes_in_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_backend_bytes_out_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_backend_connection_errors_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_backend_connections_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_backend_current_sessions` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_backend_http_responses_total` |  `ClusterName`, `Namespace`, Layanan, kode, backend  | Semua versi HAProxy Ingress | 
|  `haproxy_backend_status` |  `ClusterName`, `Namespace`, Layanan  |  Hanya dalam versi 0.10 atau yang lebih baru dari Ingress HAProxy   | 
|  `haproxy_backend_up` |  `ClusterName`, `Namespace`, Layanan  |  Hanya dalam versi HAProxy Ingress lebih awal dari 0,10  | 
|  `haproxy_frontend_bytes_in_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_bytes_out_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_connections_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_current_sessions` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_http_requests_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_http_responses_total` |  `ClusterName`, `Namespace`, Layanan, kode, frontend  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_request_errors_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 
|  `haproxy_frontend_requests_denied_total` |  `ClusterName`, `Namespace`, Layanan  | Semua versi HAProxy Ingress | 

**catatan**  
Nilai dari dimensi `code` bisa `1xx`, `2xx`, `3xx`, `4xx`, `5xx`, atau `other`.  
Nilai dari dimensi `backend` bisa:  
`http-default-backend`,`http-shared-backend`, atau `httpsback-shared-backend` untuk HAProxy Ingress versi 0.0.27 atau yang lebih lama.
`_default_backend`untuk versi HAProxy Ingress lebih lambat dari 0.0.27.
Nilai dari dimensi `frontend` bisa:  
`httpfront-default-backend`,`httpfront-shared-frontend`, atau `httpfronts` untuk HAProxy Ingress versi 0.0.27 atau yang lebih lama.
`_front_http`atau `_front_https` untuk versi HAProxy Ingress lebih lambat dari 0.0.27.

# Menampilkan metrik-metrik Prometheus Anda
<a name="ContainerInsights-Prometheus-viewmetrics"></a>

Anda dapat memantau dan alarm pada semua metrik Prometheus Anda termasuk metrik pra-agregat yang dikurasi dari App Mesh, NGINX, Java/JMX, Memcached, dan, dan pengekspor Prometheus lain yang dikonfigurasi secara manual yang mungkin telah Anda tambahkan. HAProxy Untuk informasi selengkapnya tentang cara mengumpulkan metrik dari pengekspor Prometheus lainnya, silakan lihat [Tutorial untuk menambahkan sebuah target scraping Prometheus baru: metrik Server API Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).

Di CloudWatch konsol, Container Insights menyediakan laporan pra-bangun berikut: 
+ Untuk klaster Amazon EKS dan Kubernetes, ada laporan-laporan yang telah dibuat sebelumnya untuk App Mesh, NGINX, HAPROXY, Memcached, dan Java/JMX.
+ Untuk klaster Amazon ECS, ada laporan-laporan yang telah dibuat sebelumnya untuk App Mesh dan Java/JMX.

Wawasan Kontainer juga menyediakan dasbor yang disesuaikan untuk masing-masing beban kerja yang digunakan oleh Wawasan Kontainer untuk mengumpulkan metrik-metrik terkurasi. Anda dapat mengunduh dasbor ini dari GitHub 

**Cara melihat semua metrik Prometheus Anda**

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

1. Pada panel navigasi, silakan pilih **Metrik**.

1. Dalam daftar ruang nama, pilih **ContainerInsights/Prometheus** atau. **ECS/ContainerInsights/Prometheus**

1. Pilih salah satu set dimensi dalam daftar berikut. Kemudian pilih kotak centang yang ada di samping metrik yang ingin Anda lihat.

**Cara melihat laporan yang telah dibuat sebelumnya tentang metrik-metrik Prometheus Anda**

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

1. Pada panel navigasi, silakan pilih **Pemantauan Performa**.

1. Di kotak menu geser-turun yang ada di sekitar bagian atas halaman, pilih opsi Prometheus mana pun.

   Di kotak menu geser-turun lainnya, pilih sebuah klaster yang hendak dilihat

Kami juga telah menyediakan dasbor khusus untuk NGINX, App Mesh, Memcached, dan Java/JMX. HAProxy

**Cara menggunakan dasbor kustom yang disediakan Amazon**

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

1. Pada panel navigasi, silakan pilih **Dasbor**.

1. Pilih **Buat Dasbor**. Masukkan nama untuk dasbor baru tersebut, dan pilih **Buat dasbor**.

1. Di **Tambahkan ke dasbor ini**, pilih **Batalkan**.

1. Pilih **Tindakan**, **Tampilkan/sunting sumber**.

1. Unduh salah satu file JSON berikut:
   + [ Sumber dasbor kustom NGINX di Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/nginx-ingress/cw_dashboard_nginx_ingress_controller.json).
   + [ Sumber dasbor kustom App Mesh di Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/appmesh/cw_dashboard_awsappmesh.json).
   + [ Sumber dasbor kustom Memcached di Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json)
   + [ HAProxy-Ingress sumber dasbor khusus di Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/haproxy-ingress/cw_dashboard_haproxy_ingress.json)
   + [ Java/JMX sumber dasbor khusus di Github](https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/javajmx/cw_dashboard_javajmx.json).

1. Buka file JSON yang Anda unduh dengan editor teks, dan lakukan perubahan-perubahan berikut:
   + Ganti semua string `{{YOUR_CLUSTER_NAME}}` dengan nama persis seperti nama klaster Anda. Anda harus memastikan untuk tidak menambahkan spasi putih sebelum atau setelah teks.
   + Ganti semua `{{YOUR_REGION}}` string dengan AWS Wilayah tempat cluster Anda berjalan. Sebagai contoh, **us-west-1** Anda harus memastikan untuk tidak menambahkan spasi putih sebelum atau setelah teks. 
   + Ganti semua string `{{YOUR_NAMESPACE}}` dengan nama persis seperti nama beban kerja Anda.
   + Ganti semua string `{{YOUR_SERVICE_NAME}}` dengan nama persis seperti nama layanan beban kerja Anda. Sebagai contoh, **haproxy-haproxy-ingress-controller-metrics**.

1. Salin seluruh gumpalan JSON dan tempel ke kotak teks di CloudWatch konsol, ganti apa yang sudah ada di dalam kotak.

1. Pilih **Perbarui**, **Simpan dasbor**.

# Pemecahan masalah metrik-metrik Prometheus
<a name="ContainerInsights-Prometheus-troubleshooting"></a>

Bagian ini akan memberikan Anda bantuan untuk melakukan pemecahan masalah konfigurasi untuk penyiapan metrik-metrik Prometheus Anda. 

**Topics**
+ [Pemecahan masalah untuk metri-metrik Prometheus di Amazon ECS](ContainerInsights-Prometheus-troubleshooting-ECS.md)
+ [Pemecahan masalah terkait metrik-metrik Prometheus di klaster Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-troubleshooting-EKS.md)

# Pemecahan masalah untuk metri-metrik Prometheus di Amazon ECS
<a name="ContainerInsights-Prometheus-troubleshooting-ECS"></a>

Bagian ini akan memberikan Anda bantuan untuk melakukan pemecahan masalah konfigurasi untuk penyiapan metrik-metrik Prometheus Anda di klaster Amazon ECS. 

## Saya tidak melihat metrik Prometheus dikirim ke Log CloudWatch
<a name="ContainerInsights-Prometheus-troubleshooting-ECS-nometrics"></a>

**Metrik Prometheus harus dicerna sebagai peristiwa log di grup log/. aws/ecs/containerinsights/cluster-name/Prometheus** Jika grup log tidak dibuat atau metrik Prometheus tidak dikirim ke grup log, Anda harus terlebih dahulu memeriksa apakah target Prometheus telah berhasil ditemukan oleh agen. CloudWatch Lalu periksa grup keamanan dan pengaturan izin CloudWatch agen. Langkah-langkah berikut akan memandu Anda melakukan debug.

**Langkah 1: Aktifkan CloudWatch mode debugging agen**

Pertama, ubah CloudWatch agen ke mode debug dengan menambahkan baris tebal berikut ke file CloudFormation template Anda, `cwagent-ecs-prometheus-metric-for-bridge-host.yaml` atau`cwagent-ecs-prometheus-metric-for-awsvpc.yaml`. Kemudian simpan filenya.

```
cwagentconfig.json: |
    {
      "agent": {
        "debug": true
      },
      "logs": {
        "metrics_collected": {
```

Buat CloudFormation set perubahan baru terhadap tumpukan yang ada. Setel parameter lain di changeset ke nilai yang sama seperti di tumpukan yang ada CloudFormation . Contoh berikut adalah untuk CloudWatch agen yang dipasang di cluster Amazon ECS menggunakan tipe peluncuran EC2 dan mode jaringan jembatan.

```
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
NEW_CHANGESET_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 $NEW_CHANGESET_NAME
```

Buka CloudFormation konsol untuk meninjau set perubahan baru,. `$NEW_CHANGESET_NAME` Harus ada satu perubahan yang diterapkan pada 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 your_service_name_here \
--region $AWS_REGION
```

Tunggu sekitar 10 detik dan kemudian masukkan perintah berikut.

```
aws ecs update-service --cluster $ECS_CLUSTER_NAME \
--desired-count 1 \
--service your_service_name_here \
--region $AWS_REGION
```

**Langkah 2: Memeriksa log penemuan layanan ECS**

Definisi tugas ECS dari CloudWatch agen memungkinkan log secara default di bagian di bawah ini. Log dikirim ke CloudWatch Log di grup log **ecs-cwagent-prometheus/ecs/**.

```
LogConfiguration:
  LogDriver: awslogs
    Options:
      awslogs-create-group: 'True'
      awslogs-group: "/ecs/ecs-cwagent-prometheus"
      awslogs-region: !Ref AWS::Region
      awslogs-stream-prefix: !Sub 'ecs-${ECSLaunchType}-awsvpc'
```

Lakukan penyaringan log berdasarkan string `ECS_SD_Stats` untuk mendapatkan metrik-metrik terkait penemuan layanan ECS, seperti yang ditunjukkan dalam contoh berikut.

```
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeContainerInstances: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeInstancesRequest: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTaskDefinition: 2
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTasks: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_ListTasks: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: Exporter_DiscoveredTargetCount: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_EC2MetaData: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_TaskDefinition: 2
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_ContainerInstance: 1
2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_TaskDefinition: 2
2020-09-1T01:53:14Z D! ECS_SD_Stats: Latency: 43.399783ms
```

Arti dari masing-masing metrik untuk siklus penemuan layanan ECS tertentu adalah sebagai berikut:
+ **AWSCLI\$1DescribeContainerInstances**— jumlah panggilan `ECS::DescribeContainerInstances` API yang dilakukan.
+ **AWSCLI\$1DescribeInstancesRequest**— jumlah panggilan `ECS::DescribeInstancesRequest` API yang dilakukan.
+ **AWSCLI\$1DescribeTaskDefinition**— jumlah panggilan `ECS::DescribeTaskDefinition` API yang dilakukan.
+ **AWSCLI\$1DescribeTasks**— jumlah panggilan `ECS::DescribeTasks` API yang dilakukan.
+ **AWSCLI\$1ListTasks**— jumlah panggilan `ECS::ListTasks` API yang dilakukan.
+ **ExporterDiscoveredTargetCount** – jumlah target Prometheus yang ditemukan dan berhasil diekspor ke dalam file hasil target di dalam kontainer.
+ **LRUCache\$1Get\$1 EC2 MetaData** — berapa kali metadata instance kontainer diambil dari cache.
+ **LRUCache\$1Dapatkan\$1 TaskDefinition** — berapa kali metadata definisi tugas ECS diambil dari cache.
+ **LRUCache\$1Size\$1 ContainerInstance** — jumlah metadata instance kontainer unik yang di-cache dalam memori.
+ **LRUCache\$1Ukuran\$1 TaskDefinition** — jumlah definisi tugas ECS unik yang disimpan dalam memori.
+ **Latensi** – berapa lama siklus penemuan layanan berlangsung.

Periksa nilai `ExporterDiscoveredTargetCount` untuk melihat apakah target-target Prometheus yang ditemukan sesuai dengan harapan Anda. Jika tidak, kemungkinan penyebabnya adalah sebagai berikut:
+ Konfigurasi penemuan layanan ECS mungkin tidak sesuai dengan pengaturan aplikasi Anda. Untuk penemuan layanan berbasis label docker, kontainer target Anda mungkin tidak memiliki label docker yang diperlukan yang dikonfigurasi di agen CloudWatch untuk menemukannya secara otomatis. Untuk penemuan layanan berbasis ekspresi reguler ARN definisi tugas ECS, pengaturan regex di agen mungkin tidak cocok CloudWatch dengan definisi tugas aplikasi Anda. 
+ Peran tugas ECS CloudWatch agen mungkin tidak memiliki izin untuk mengambil metadata tugas ECS. Periksa apakah CloudWatch agen telah diberikan izin hanya-baca berikut:
  + `ec2:DescribeInstances`
  + `ecs:ListTasks`
  + `ecs:DescribeContainerInstances`
  + `ecs:DescribeTasks`
  + `ecs:DescribeTaskDefinition`

**Langkah 3: Memeriksa koneksi jaringan dan kebijakan peran tugas ECS**

Jika masih belum ada peristiwa log yang dikirim ke grup CloudWatch log Log target meskipun nilai `Exporter_DiscoveredTargetCount` menunjukkan bahwa ada target Prometheus yang ditemukan, ini dapat disebabkan oleh salah satu hal berikut:
+  CloudWatch Agen mungkin tidak dapat terhubung ke port target Prometheus. Periksa pengaturan grup keamanan di belakang CloudWatch agen. IP pribadi harus memungkinkan CloudWatch agen untuk terhubung ke port eksportir Prometheus. 
+ Peran tugas ECS CloudWatch agen mungkin tidak memiliki kebijakan yang **CloudWatchAgentServerPolicy**dikelola. CloudWatch peran tugas ECS agen perlu memiliki kebijakan ini agar dapat mengirim metrik Prometheus sebagai peristiwa log. Jika Anda menggunakan CloudFormation template sampel untuk membuat peran IAM secara otomatis, peran tugas ECS dan peran eksekusi ECS diberikan dengan hak istimewa paling sedikit untuk melakukan pemantauan Prometheus. 

# Pemecahan masalah terkait metrik-metrik Prometheus di klaster Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-troubleshooting-EKS"></a>

Bagian ini akan menyediakan Anda bantuan untuk melakukan pemecahan masalah konfigurasi metrik-metrik Prometheus Anda di klaster Amazon EKS dan Kubernetes. 

## Langkah-langkah pemecahan masalah umum di Amazon EKS
<a name="ContainerInsights-Prometheus-troubleshooting-general"></a>

Untuk mengonfirmasi bahwa CloudWatch agen sedang berjalan, masukkan perintah berikut.

```
kubectl get pod -n amazon-cloudwatch
```

Outputnya harus menyertakan sebuah baris dengan `cwagent-prometheus-id` pada kolom `NAME` dan `Running` dalam `STATUS column.`

Untuk menampilkan detail tentang pod yang sedang berjalan, Anda harus memasukkan perintah berikut. Ganti *pod-name* dengan nama lengkap pod Anda yang memiliki nama yang dimulai dengan`cw-agent-prometheus`.

```
kubectl describe pod pod-name -n amazon-cloudwatch
```

Jika Anda telah menginstal CloudWatch Wawasan Kontainer, Anda dapat menggunakan Wawasan CloudWatch Log untuk menanyakan log dari CloudWatch agen yang mengumpulkan metrik Prometheus.

**Cara menjalankan kueri terhadap log aplikasi**

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

1. Di panel navigasi, pilih **CloudWatch Wawasan Logs**.

1. Pilih grup log untuk log aplikasi, **/aws/containerinsights/ *cluster-name* /application**

1. Ganti ekspresi kueri pencarian dengan kueri berikut, dan kemudian pilih **Jalankan kueri**

   ```
   fields ispresent(kubernetes.pod_name) as haskubernetes_pod_name, stream, kubernetes.pod_name, log | 
   filter haskubernetes_pod_name and kubernetes.pod_name like /cwagent-prometheus
   ```

Anda juga dapat mengonfirmasi bahwa metrik dan metadata Prometheus sedang dicerna sebagai CloudWatch Mencatat kejadian.

**Cara mengonfirmasi bahwa data Prometheus sedang diserap**

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

1. Di panel navigasi, pilih **CloudWatch Wawasan Logs**.

1. Pilih **/aws/containerinsights/ /prometheus *cluster-name***

1. Ganti ekspresi kueri pencarian dengan kueri berikut, dan kemudian pilih **Jalankan kueri**

   ```
   fields @timestamp, @message | sort @timestamp desc | limit 20
   ```

## Mencatat log metrik-metrik Prometheus yang dibuang
<a name="ContainerInsights-Prometheus-troubleshooting-droppedmetrics"></a>

Rilis ini tidak akan mengumpulkan metrik-metrik Prometheus yang bertipe histogram. Anda dapat menggunakan CloudWatch agen untuk memeriksa apakah ada metrik Prometheus yang dijatuhkan karena merupakan metrik histogram. Anda juga dapat mencatat daftar 500 metrik Prometheus pertama yang dijatuhkan dan tidak dikirim CloudWatch karena merupakan metrik histogram.

Untuk melihat apakah ada metrik yang dibuang, masukkan perintah berikut:

```
kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1
```

Jika ada metrik yang dibuang, maka Anda akan melihat garis-garis berikut di file `/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log`.

```
I! Drop Prometheus metrics with unsupported types. Only Gauge, Counter and Summary are supported.
I! Please enable CWAgent debug mode to view the first 500 dropped metrics
```

Jika Anda melihat garis-garis tersebut dan ingin mengetahui metrik apa yang dibuang, lakukan langkah-langkah berikut ini.

**Cara mencatat log daftar metrik Prometheus yang dibuang**

1. Ubah CloudWatch agen ke mode debug dengan menambahkan baris tebal berikut ke `prometheus-k8s.yaml` file `prometheus-eks.yaml` atau Anda, dan simpan file.

   ```
   {
         "agent": {
           "debug": true
         },
   ```

   Bagian file ini akan terlihat seperti berikut ini:

   ```
   cwagentconfig.json: |
       {
         "agent": {
           "debug": true
         },
         "logs": {
           "metrics_collected": {
   ```

1. Instal ulang CloudWatch agen untuk mengaktifkan mode debug dengan memasukkan perintah berikut:

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   kubectl apply -f prometheus.yaml
   ```

   Metrik yang dijatuhkan dicatat di pod CloudWatch agen.

1. Untuk mengambil log dari pod CloudWatch agen, masukkan perintah berikut:

   ```
   kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1
   ```

   **Atau, jika Anda menginstal logging Container Insights Fluentd, log juga disimpan di grup CloudWatch log Logs /aws/containerinsights/ /application. *cluster\$1name***

   Untuk menjalankan kueri pada log ini, Anda dapat mengikuti langkah-langkah untuk menjalankan kueri terhadap log aplikasi di [Langkah-langkah pemecahan masalah umum di Amazon EKS](#ContainerInsights-Prometheus-troubleshooting-general).

## Di mana metrik Prometheus dicerna sebagai peristiwa log Log? CloudWatch
<a name="ContainerInsights-Prometheus-troubleshooting-metrics_ingested"></a>

 CloudWatch Agen membuat aliran log untuk setiap konfigurasi pekerjaan scrape Prometheus. Sebagai contoh, di dalam file `prometheus-eks.yaml` dan file `prometheus-k8s.yaml`, garis `job_name: 'kubernetes-pod-appmesh-envoy'` melakukan scraping terhadap metrik-metrik App Mesh. Target Prometheus ditentukan sebagai `kubernetes-pod-appmesh-envoy`. **Jadi semua metrik App Mesh Prometheus dicerna CloudWatch sebagai peristiwa Log di aliran log di bawah grup log bernama/. **kubernetes-pod-appmesh-envoy**aws/containerinsights/cluster-name/Prometheus**

## Saya tidak melihat metrik Amazon EKS atau Kubernetes Prometheus dalam metrik CloudWatch
<a name="ContainerInsights-Prometheus-troubleshooting-no-metrics"></a>

**Pertama, pastikan bahwa metrik Prometheus dicerna sebagai peristiwa log di grup log/. aws/containerinsights/cluster-name/Prometheus** Gunakan informasi dalam [Di mana metrik Prometheus dicerna sebagai peristiwa log Log? CloudWatch](#ContainerInsights-Prometheus-troubleshooting-metrics_ingested) untuk membantu Anda memeriksa log stream target. Jika log stream tidak dibuat atau tidak ada peristiwa log baru di log stream, periksa hal berikut:
+ Periksa apakah titik akhir pengekspor metrik Prometheus sudah diatur dengan benar
+ Periksa apakah konfigurasi pengikisan Prometheus di `config map: cwagent-prometheus` bagian file YAMAL agen sudah benar. CloudWatch Konfigurasinya harus sama dengan konfigurasi yang akan digunakan dalam file konfigurasi Prometheus. Untuk informasi selengkapnya, silakan lihat [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) dalam dokumentasi Prometheus.

Jika metrik Prometheus dicerna sebagai log peristiwa dengan benar, periksa bahwa pengaturan format metrik tersemat ditambahkan ke dalam peristiwa log untuk menghasilkan CloudWatch metrik.

```
"CloudWatchMetrics":[
   {
      "Metrics":[
         {
            "Name":"envoy_http_downstream_cx_destroy_remote_active_rq"
         }
      ],
      "Dimensions":[
         [
            "ClusterName",
            "Namespace"
         ]
      ],
      "Namespace":"ContainerInsights/Prometheus"
   }
],
```

Untuk informasi selengkapnya tentang format metrik tersemat, silakan lihat [Spesifikasi: Format metrik tersemat](CloudWatch_Embedded_Metric_Format_Specification.md).

Jika tidak ada format metrik yang disematkan dalam peristiwa log, periksa apakah `metric_declaration` bagian tersebut dikonfigurasi dengan benar di `config map: prometheus-cwagentconfig` bagian file YAMAL instalasi CloudWatch agen. Untuk informasi selengkapnya, lihat [Tutorial untuk menambahkan sebuah target scraping Prometheus baru: metrik Server API Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).