Menerapkan CloudWatch agen untuk mengumpulkan EC2 metrik tingkat instans di Amazon ECS - Amazon CloudWatch

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

Menerapkan CloudWatch agen untuk mengumpulkan EC2 metrik tingkat instans di Amazon ECS

Untuk menerapkan CloudWatch agen untuk mengumpulkan metrik tingkat instans dari kluster Amazon ECS yang di-host pada EC2 instans, 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 EC2 peluncuran dan kontinen CloudWatch agen memiliki akses ke Amazon EC2 Instance Metadata Service (IMDS). Untuk informasi selengkapnya tentang IMDS, silakan lihat Metadata dan data pengguna instans.

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

Pengaturan cepat menggunakan AWS CloudFormation

Untuk menggunakan pengaturan cepat, masukkan perintah berikut untuk digunakan AWS 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 CWAgentECSTaskCWAgentECSExecutionPeran. 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 CloudWatchAgentServerPolicydan 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 AWS 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 AWS CloudFormation tumpukan untuk agen CloudWatch

Jika Anda perlu menghapus AWS 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

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

Peran IAM dan kebijakan yang diperlukan

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 dan Peran Eksekusi Tugas Amazon ECS.

  • 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

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-regionadalah Wilayah tempat CloudWatch Log berada, dan cluster-region merupakan Wilayah tempat cluster Anda berada. task-role-arnadalah 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

Secara opsional, Anda dapat menggunakan SSM untuk menentukan opsi konfigurasi lain untuk CloudWatch agen di kluster Amazon ECS yang di-host pada instans. 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 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
  2. Buat file konfigurasi kustom yang serupa dengan contoh sebelumnya. Beri nama file ini dengan nama /tmp/ecs-cwagent-daemon-config.json.

  3. 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
  4. 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
  5. 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" } ],
  6. 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
    2. 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