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
danCloudWatchAgentServerPolicy
.
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-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
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
-
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
-
Buat file konfigurasi kustom yang serupa dengan contoh sebelumnya. Beri nama file ini dengan nama
/tmp/ecs-cwagent-daemon-config.json
. -
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 -
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
-
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" } ],
-
Mulai ulang agen sebagai sebuah layanan daemon dengan mengikuti langkah-langkah berikut:
-
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 -
Jalankan perintah berikut ini untuk meluncurkan layanan daemon. Ganti
cluster-name
dancluster-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 bernamacwagent-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
-