Menerapkan CloudWatch agen untuk mengumpulkan metrik tingkat EC2 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 metrik tingkat EC2 instans di Amazon ECS

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

Kedua metode tersebut mengharuskan Anda sudah memiliki setidaknya satu ECS kluster Amazon yang disebarkan dengan tipe EC2 peluncuran dan kontinen CloudWatch agen memiliki akses ke Amazon EC2 Instance Metadata Service (). IMDS Untuk informasi selengkapnyaIMDS, lihat Metadata instans dan data pengguna.

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 FullAccess kebijakan IAMFullAccessdan Amazon ECS _.

Pengaturan cepat menggunakan AWS CloudFormation

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

Perintah ini menciptakan IAM peran CWAgentECSTaskRoledan CWAgentECSExecutionRole. 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 IAM Peran Anda Sendiri

Jika Anda ingin menggunakan peran ECS tugas kustom Anda sendiri dan peran eksekusi ECS tugas alih-alih CWAgentECSExecutionRoleperan CWAgentECSTaskRoledan, pertama-tama pastikan bahwa peran yang akan digunakan sebagai peran ECS tugas telah CloudWatchAgentServerPolicydilampirkan. Juga, pastikan bahwa peran yang akan digunakan sebagai peran pelaksanaan ECS tugas memiliki mazonECSTask ExecutionRolePolicy kebijakan CloudWatchAgentServerPolicydan A yang dilampirkan. Kemudian masukkan perintah berikut. Dengan perintah, ganti task-role-arn dengan peran ECS tugas khusus Anda, dan ganti ARN execution-role-arn dengan peran ARN eksekusi ECS tugas 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 ECS Amazon yang dihosting pada instans. EC2

IAMPeran dan kebijakan yang diperlukan

Diperlukan dua IAM peran. Anda harus membuat dua peran ini jika belum ada. Untuk informasi selengkapnya tentang peran ini, lihat IAMperan untuk Tugas dan Peran Eksekusi ECS Tugas Amazon.

  • Peran ECS tugas, 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 ECS tugas, yang digunakan oleh ECS agen Amazon untuk meluncurkan CloudWatch agen. 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 menciptakan peran ECS tugas.

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 ini menciptakan peran eksekusi ECS tugas.

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 definisi tugas, masukkan perintah berikut. Pada baris pertama, ganti placeholder dengan nilai aktual untuk penerapan Anda. logs-region adalah Wilayah tempat CloudWatch Log berada, dan cluster-region adalah Wilayah tempat klaster Anda berada. task-role-arn adalah Arn dari peran ECS tugas yang Anda gunakan, dan execution-role-arn adalah Arn dari peran eksekusi ECS tugas.

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

Kemudian jalankan perintah berikut untuk meluncurkan layanan daemon. Ganti cluster-name and cluster-region dengan nama dan Wilayah ECS cluster Amazon 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 ECS kluster Amazon Anda yang dihosting pada EC2 instance. 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 ini jika Anda memublikasikan dari klaster di a VPC dan Anda ingin data log masuk ke VPC titik akhir.

    Nilai endpoint_override harus berupa string yang merupakanURL.

  • 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 default, agen menerbitkan metrik ke Wilayah yang sama di mana instans ECS penampung Amazon 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 ECS kontainer Amazon
  1. Pastikan mazonSSMRead OnlyAccess kebijakan A dilampirkan ke peran Eksekusi ECS Tugas Amazon Anda. Untuk melakukan hal itu, Anda harus memasukkan perintah berikut. Contoh ini mengasumsikan bahwa peran Eksekusi ECS Tugas Amazon Anda adalahCWAgentECSExecutionRole. 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 ECS cluster Amazon Anda. Untuk menjalankan perintah ini, Anda harus login ke pengguna atau peran yang memiliki kebijakan mazonSSMFull Akses.

    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 untuk meluncurkan layanan daemon. Ganti cluster-name and cluster-region dengan nama dan Wilayah ECS cluster Amazon 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