

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

# Menyebarkan CloudWatch agen untuk mengumpulkan metrik tingkat instans EC2 di Amazon ECS
<a name="deploy-container-insights-ECS-instancelevel"></a>

Untuk menerapkan CloudWatch agen untuk mengumpulkan metrik tingkat instans dari kluster Amazon ECS yang dihosting di instans EC2, gunakan penyiapan mulai cepat dengan konfigurasi default, atau instal agen secara manual agar dapat menyesuaikannya.

Kedua metode tersebut mengharuskan Anda sudah memiliki setidaknya satu kluster Amazon ECS yang disebarkan dengan tipe peluncuran EC2 dan kontiner CloudWatch agen memiliki akses ke Layanan Metadata Instans Amazon EC2 (IMDS). Untuk informasi selengkapnya tentang IMDS, silakan lihat [Metadata dan data pengguna instans](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html).

Metode ini juga mengasumsikan bahwa Anda telah AWS CLI menginstal. Selain itu, untuk menjalankan perintah dalam prosedur berikut, Anda harus masuk ke akun atau peran yang memiliki kebijakan **IAMFullAccess** dan **FullAccessAmazonECS\$1**.

**penting**  
Saat mendefinisikan wadah CloudWatch Agen dalam definisi tugas Anda, atur`essential: false`. Ini mencegah seluruh layanan Amazon ECS berhenti jika kontainer CloudWatch Agen gagal. Wadah aplikasi penting lainnya akan terus berjalan bahkan jika agen sementara tidak tersedia.

**Topics**
+ [Pengaturan cepat menggunakan CloudFormation](#deploy-container-insights-ECS-instancelevel-quickstart)
+ [Konfigurasi manual dan kustom](#deploy-container-insights-ECS-instancelevel-manual)

## Pengaturan cepat menggunakan CloudFormation
<a name="deploy-container-insights-ECS-instancelevel-quickstart"></a>

Untuk menggunakan pengaturan cepat, masukkan perintah berikut untuk digunakan CloudFormation untuk menginstal agen. Ganti *cluster-name* dan *cluster-region* dengan nama dan Wilayah cluster Amazon ECS Anda.

Perintah ini menciptakan peran IAM Peran dan **CWAgentECSTask**CWAgentECSExecutionPeran****. Jika peran-peran ini sudah ada di akun Anda, gunakan `ParameterKey=CreateIAMRoles,ParameterValue=False` alih-alih `ParameterKey=CreateIAMRoles,ParameterValue=True` saat Anda memasukkan perintah. Jika tidak, maka perintah akan gagal.

```
ClusterName=cluster-name
Region=cluster-region
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=CreateIAMRoles,ParameterValue=True \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**(Alternatif) Menggunakan peran IAM Anda sendiri**

Jika Anda ingin menggunakan peran tugas ECS kustom Anda sendiri dan peran eksekusi tugas ECS alih-alih peran **CWAgentECSTaskPeran** dan **CWAgentECSExecutionPeran**, pertama-tama pastikan bahwa peran yang akan digunakan sebagai peran tugas ECS telah dilampirkan. **CloudWatchAgentServerPolicy** Juga, pastikan bahwa peran yang akan digunakan sebagai peran eksekusi tugas ECS memiliki ECSTask ExecutionRolePolicy kebijakan **Amazon **CloudWatchAgentServerPolicy**dan Amazon** yang terlampir. Masukkan perintah berikut ini. Dalam perintah, ganti *task-role-arn* dengan ARN peran tugas ECS kustom Anda, dan ganti dengan ARN peran *execution-role-arn* eksekusi tugas ECS kustom Anda.

```
ClusterName=cluster-name
Region=cluster-region
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=TaskRoleArn,ParameterValue=${TaskRoleArn} \
                 ParameterKey=ExecutionRoleArn,ParameterValue=${ExecutionRoleArn} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**Pemecahan masalah pengaturan cepat**

Untuk memeriksa status CloudFormation tumpukan, masukkan perintah berikut.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stacks --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Jika Anda melihat status dari `StackStatus` bukan `CREATE_COMPLETE` atau `CREATE_IN_PROGRESS`, maka Anda harus memeriksa peristiwa tumpukan untuk menemukan kesalahan. Masukkan perintah berikut.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stack-events --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Untuk memeriksa status dari layanan daemon `cwagent`, Anda harus memasukkan perintah berikut. Dalam outputnya, Anda akan melihat bahwa `runningCount` sama dengan `desiredCount` dalam bagian `deployment`. Jika tidak sama, periksa bagian `failures` yang ada di output tersebut.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs describe-services --services cwagent-daemon-service --cluster $ClusterName --region $Region
```

Anda juga dapat menggunakan konsol CloudWatch Log untuk memeriksa log agen. Cari grup log **/ecs/ ecs-cwagent-daemon-service**.

**Menghapus CloudFormation tumpukan untuk agen CloudWatch **

Jika Anda perlu menghapus CloudFormation tumpukan, masukkan perintah berikut.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation delete-stack --stack-name CWAgentECS-${ClusterName}-${Region} --region ${Region}
```

## Konfigurasi manual dan kustom
<a name="deploy-container-insights-ECS-instancelevel-manual"></a>

Ikuti langkah-langkah di bagian ini untuk menerapkan CloudWatch agen secara manual guna mengumpulkan metrik tingkat instans dari kluster Amazon ECS yang dihosting di instans EC2.

### Peran IAM dan kebijakan yang diperlukan
<a name="deploy-container-insights-ECS-instancelevel-IAMRoles"></a>

Ada dua peran IAM yang diperlukan. Anda harus membuat dua peran ini jika belum ada. Untuk informasi selengkapnya tentang peran-peran ini, silakan lihat [Peran IAM untuk Tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) dan [Peran Eksekusi Tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html).
+ *Peran tugas ECS*, yang digunakan oleh CloudWatch agen untuk mempublikasikan metrik. Jika peran ini sudah ada, maka Anda harus memastikan bahwa peran tersebut melampirkan kebijakan `CloudWatchAgentServerPolicy`.
+ *Peran eksekusi tugas ECS*, yang digunakan oleh agen Amazon ECS untuk meluncurkan agen. CloudWatch Jika peran ini sudah ada, maka Anda harus memastikan bahwa peran tersebut melampirkan kebijakan `AmazonECSTaskExecutionRolePolicy` dan `CloudWatchAgentServerPolicy`.

Jika Anda belum memiliki peran-peran ini, maka Anda dapat menggunakan perintah-perintah berikut untuk membuat dan melampirkan kebijakan yang diperlukan. Perintah pertama ini untuk membuat peran tugas ECS.

```
aws iam create-role --role-name CWAgentECSTaskRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Setelah Anda memasukkan perintah sebelumnya, perhatikan nilai `Arn` dari output perintah sebagai "TaskRoleArn”. Anda perlu menggunakannya nanti saat membuat definisi tugas. Kemudian masukkan perintah berikut untuk melampirkan kebijakan-kebijakan yang diperlukan.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSTaskRole
```

Perintah berikutnya untuk membuat peran eksekusi tugas ECS.

```
aws iam create-role --role-name CWAgentECSExecutionRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Setelah Anda memasukkan perintah sebelumnya, perhatikan nilai `Arn` dari output perintah sebagai "ExecutionRoleArn”. Anda harus menggunakannya nanti saat Anda membuat penetapan tugas. Kemudian masukkan perintah-perintah berikut untuk melampirkan kebijakan-kebijakan yang diperlukan.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSExecutionRole
          
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy \
    --role-name CWAgentECSExecutionRole
```

### Membuat penetapan tugas dan meluncurkan layanan daemon
<a name="deploy-container-insights-ECS-instancelevel-taskdefinition"></a>

Buat definisi tugas dan gunakan untuk meluncurkan CloudWatch agen sebagai layanan daemon. Untuk membuat penetapan tugas, Anda harus memasukkan perintah berikut. Di baris pertama, ganti placeholder dengan nilai aktual untuk penerapan Anda. *logs-region*adalah Wilayah tempat CloudWatch Log berada, dan *cluster-region* merupakan Wilayah tempat cluster Anda berada. *task-role-arn*adalah Arn dari peran tugas ECS yang Anda gunakan, dan *execution-role-arn* merupakan Arn dari peran eksekusi tugas ECS.

```
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
AWSLogsRegion=logs-region
Region=cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json \
    | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
    | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
```

Dan kemudian, eksekusi perintah berikut ini untuk meluncurkan layanan daemon. Ganti *cluster-name* dan *cluster-region* dengan nama dan Wilayah cluster Amazon ECS Anda.

**penting**  
Hapus semua strategi penyedia kapasitas sebelum Anda menjalankan perintah ini. Jika tidak, perintah tidak akan berfungsi.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs create-service \
    --cluster ${ClusterName} \
    --service-name cwagent-daemon-service \
    --task-definition ecs-cwagent-daemon-service \
    --scheduling-strategy DAEMON \
    --region ${Region}
```

Jika Anda melihat pesan kesalahan ini, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, maka Anda telah membuat sebuah layanan daemon bernama `cwagent-daemon-service`. Anda harus menghapus layanan yang pertama dengan menggunakan perintah berikut sebagai contohnya.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs delete-service \
    --cluster ${ClusterName} \
    --service cwagent-daemon-service \
    --region ${Region} \
    --force
```

### (Opsional) Konfigurasi lanjutan
<a name="deploy-container-insights-ECS-instancelevel-advanced"></a>

Atau, Anda dapat menggunakan SSM untuk menentukan opsi konfigurasi lainnya untuk CloudWatch di kluster ECS Amazon Anda yang di-host di EC2. Opsi-opsi ini adalah sebagai berikut:
+ `metrics_collection_interval`— Seberapa sering dalam hitungan detik CloudWatch agen mengumpulkan metrik. Bawaannya adalah 60. Rentangnya adalah 1–172.000.
+ `endpoint_override` – (Opsional) Menentukan sebuah titik akhir berbeda yang akan menerima kiriman log. Anda mungkin ingin melakukan hal ini jika Anda melakukan penerbitan dari sebuah klaster di VPC dan Anda ingin data log masuk ke sebuah titik akhir VPC.

  Nilai dari `endpoint_override` harus berupa string yang berupa URL.
+ `force_flush_interval` – Menentukan lamanya waktu maksimum log tetap berada dalam buffer memori sebelum dikirim ke server, dalam satuan detik. Apa pun pengaturan yang Anda tetapkan untuk bidang ini, jika ukuran log dalam penyangga mencapai 1 MB, log akan segera dikirim ke server saat itu juga. Nilai bawaannya adalah 5 detik.
+ `region` – Secara bawaan, agen menerbitkan metrik–metrik ke Wilayah yang sama di mana instans kontainer Amazon ECS berada. Untuk melakukan penggantian atas ini, Anda dapat menentukan Wilayah yang berbeda di sini. Sebagai contoh, `"region" : "us-east-1"`.

Berikut ini adalah sebuah contoh konfigurasi yang disesuaikan:

```
{
    "agent": {
        "region": "us-east-1"
    },
    "logs": {
        "metrics_collected": {
            "ecs": {
                "metrics_collection_interval": 30
            }
        },
        "force_flush_interval": 5
    }
}
```

**Untuk menyesuaikan konfigurasi CloudWatch agen Anda di wadah Amazon ECS**

1. Pastikan bahwa SSMRead OnlyAccess kebijakan **Amazon** dilampirkan ke peran Eksekusi Tugas Amazon ECS Anda. Untuk melakukan hal itu, Anda harus memasukkan perintah berikut. Contoh ini mengasumsikan bahwa peran Eksekusi Tugas Amazon ECS Anda adalah CWAgent ECSExecution Peran. Jika Anda menggunakan peran yang berbeda, maka Anda harus mengganti nama peran itu dengan perintah berikut.

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \
           --role-name CWAgentECSExecutionRole
   ```

1. Buat file konfigurasi kustom yang serupa dengan contoh sebelumnya. Beri nama file ini dengan nama `/tmp/ecs-cwagent-daemon-config.json`.

1. Eksekusi perintah berikut untuk memasukkan konfigurasi ini ke dalam Parameter Store. Ganti *cluster-region* dengan Wilayah cluster Amazon ECS Anda. Untuk menjalankan perintah ini, Anda harus masuk ke pengguna atau peran yang memiliki kebijakan **SSMFullAkses Amazon**.

   ```
   Region=cluster-region
   aws ssm put-parameter \
       --name "ecs-cwagent-daemon-service" \
       --type "String" \
       --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \
       --region $Region
   ```

1. Unduh file penetapan tugas ke file lokal, misalnya `/tmp/cwagent-ecs-instance-metric.json`

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json -o /tmp/cwagent-ecs-instance-metric.json
   ```

1. Ubah file penetapan tugas. Hapus bagian berikut:

   ```
   "environment": [
                   {
                       "name": "USE_DEFAULT_CONFIG",
                       "value": "True"
                   }
               ],
   ```

   Ganti bagian tersebut dengan hal berikut ini:

   ```
   "secrets": [
                   {
                       "name": "CW_CONFIG_CONTENT",
                       "valueFrom": "ecs-cwagent-daemon-service"
                   }
               ],
   ```

1. Mulai ulang agen sebagai sebuah layanan daemon dengan mengikuti langkah-langkah berikut:

   1. Jalankan perintah berikut.

      ```
      TaskRoleArn=task-role-arn
      ExecutionRoleArn=execution-role-arn
      AWSLogsRegion=logs-region
      Region=cluster-region
      cat /tmp/cwagent-ecs-instance-metric.json \
          | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
          | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
      ```

   1. Jalankan perintah berikut ini untuk meluncurkan layanan daemon. Ganti *cluster-name* dan *cluster-region* dengan nama dan Wilayah cluster Amazon ECS Anda.

      ```
      ClusterName=cluster-name
      Region=cluster-region
      aws ecs create-service \
          --cluster ${ClusterName} \
          --service-name cwagent-daemon-service \
          --task-definition ecs-cwagent-daemon-service \
          --scheduling-strategy DAEMON \
          --region ${Region}
      ```

      Jika Anda melihat pesan kesalahan ini, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, maka Anda telah membuat sebuah layanan daemon bernama `cwagent-daemon-service`. Anda harus menghapus layanan yang pertama dengan menggunakan perintah berikut sebagai contohnya.

      ```
      ClusterName=cluster-name
      Region=Region
      aws ecs delete-service \
          --cluster ${ClusterName} \
          --service cwagent-daemon-service \
          --region ${Region} \
          --force
      ```