Menggunakan perutean log khusus - Amazon Elastic Container Service

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

Menggunakan perutean log khusus

Anda dapat menggunakan Amazon ECS FireLens untuk menggunakan parameter definisi tugas untuk merutekan log ke AWS layanan atau tujuan AWS Partner Network (APN) untuk penyimpanan log dan analitik. AWS Partner Network Ini adalah komunitas mitra global yang memanfaatkan program, keahlian, dan sumber daya untuk membangun, memasarkan, dan menjual penawaran pelanggan. Untuk informasi lebih lanjut lihat AWS Partner. FireLensbekerja dengan Fluentd danFluent Bit. Kami menyediakan AWS untuk Fluent Bit gambar atau Anda dapat menggunakan gambar Anda sendiri Fluentd atau Fluent Bit gambar.

Pertimbangan

Pertimbangkan hal berikut saat menggunakan FireLens untuk Amazon ECS:

  • Kami menyarankan Anda my_service_ menambahkan nama wadah log sehingga Anda dapat dengan mudah membedakan nama kontainer di konsol.

  • Amazon ECS menambahkan dependensi pesanan kontainer awal antara container aplikasi dan FireLens container secara default. Saat Anda menentukan urutan kontainer antara wadah aplikasi dan FireLens kontainer, maka urutan kontainer awal default diganti.

  • FireLensuntuk Amazon ECS didukung untuk tugas-tugas yang di-host AWS Fargate di Linux dan Amazon EC2 di Linux. Kontainer Windows tidak mendukungFireLens.

    Untuk informasi tentang cara mengonfigurasi pencatatan terpusat untuk kontainer Windows, lihat Pencatatan terpusat untuk kontainer Windows di Amazon ECS menggunakan Bit Lancar.

  • FireLensuntuk Amazon ECS didukung dalam AWS CloudFormation template. Untuk informasi selengkapnya, lihat AWS::ECS::TaskDefinition FirelensConfigurationdi Panduan AWS CloudFormation Pengguna

  • FireLensmendengarkan di port24224, jadi untuk memastikan bahwa router FireLens log tidak dapat dijangkau di luar tugas, Anda tidak boleh mengizinkan lalu lintas masuk pada port 24224 dalam grup keamanan yang digunakan tugas Anda. Untuk tugas yang menggunakan mode awsvpc jaringan, ini adalah grup keamanan yang terkait dengan tugas tersebut. Untuk tugas yang menggunakan mode host jaringan, ini adalah grup keamanan yang terkait dengan instans Amazon EC2 yang menghosting tugas tersebut. Untuk tugas yang menggunakan mode bridge jaringan, jangan membuat pemetaan port apa pun yang menggunakan port. 24224

  • Untuk tugas yang menggunakan mode bridge jaringan, wadah dengan FireLens konfigurasi harus dimulai sebelum wadah aplikasi apa pun yang mengandalkannya dimulai. Untuk mengendalikan urutan mulai kontainer Anda, gunakan syarat dependensi dalam ketentuan tugas Anda. Untuk informasi selengkapnya, lihat Dependensi kontainer.

    catatan

    Jika Anda menggunakan parameter kondisi ketergantungan dalam definisi kontainer dengan FireLens konfigurasi, pastikan bahwa setiap kontainer memiliki persyaratan START atau HEALTHY kondisi.

  • Secara default, FireLens tambahkan nama definisi klaster dan tugas serta Nama Sumber Daya Amazon (ARN) klaster sebagai kunci metadata ke log kontainer stdout/stderr Anda. Berikut ini adalah contoh format metadata.

    "ecs_cluster": "cluster-name", "ecs_task_arn": "arn:aws:ecs:region:111122223333:task/cluster-name/f2ad7dba413f45ddb4EXAMPLE", "ecs_task_definition": "task-def-name:revision",

    Jika Anda tidak ingin metadata di log Anda, atur enable-ecs-log-metadata ke false firelensConfiguration bagian definisi tugas.

    "firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"false", "config-file-type":"file", "config-file-value":"/extra.conf" }

Izin IAM yang diperlukan

Untuk menggunakan fitur ini, Anda harus membuat peran IAM untuk tugas Anda yang memberikan izin yang diperlukan untuk menggunakan AWS layanan apa pun yang diperlukan tugas. Misalnya, jika kontainer merutekan log ke Firehose, tugas tersebut memerlukan izin untuk memanggil firehose:PutRecordBatch API. Untuk informasi selengkapnya, silakan lihat Menambahkan dan Menghapus Izin Identitas IAM dalam Panduan Pengguna IAM.

Contoh berikut kebijakan IAM menambahkan izin yang diperlukan untuk routing log ke Firehose.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

Contoh berikut kebijakan IAM menambahkan izin yang diperlukan untuk routing log ke Amazon Logs. CloudWatch

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": "*" }] }

Tugas Anda mungkin juga memerlukan peran eksekusi tugas Amazon ECS dalam kondisi berikut. Untuk informasi selengkapnya, lihat Peran IAM eksekusi tugas Amazon ECS.

  • Jika tugas Anda di-host di Fargate dan Anda menarik gambar kontainer dari Amazon ECR atau mereferensikan data sensitif dari AWS Secrets Manager konfigurasi log Anda, maka Anda harus menyertakan peran IAM eksekusi tugas.

  • Jika Anda menentukan file konfigurasi khusus yang di-host di Amazon S3, peran IAM eksekusi tugas Anda harus menyertakan s3:GetObject izin untuk file konfigurasi dan izin s3:GetBucketLocation pada bucket Amazon S3 tempat file tersebut berada. Untuk informasi selengkapnya, lihat Menentukan Izin dalam Kebijakan di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

    Contoh berikut kebijakan IAM menambahkan izin yang diperlukan untuk mengambil file dari Amazon S3. Tentukan nama bucket Amazon S3 dan nama file konfigurasi Anda.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

Batas buffer fluentd

Saat Anda membuat definisi tugas, Anda dapat menentukan jumlah peristiwa yang di-buffer dalam memori dengan menentukan nilai (dalam byte) di file. log-driver-buffer-limit Untuk informasi selengkapnya, lihat Driver logging fluentd di dokumentasi Docker.

Gunakan opsi ini ketika ada throughput tinggi, karena Docker mungkin kehabisan memori buffer dan membuang pesan buffer sehingga dapat menambahkan pesan baru. Log yang hilang mungkin menyulitkan pemecahan masalah. Menyetel batas buffer dapat membantu mencegah masalah ini.

Berikut ini menunjukkan sintaks untuk menentukan. log-driver-buffer-limit Ganti my_service_ dengan nama layanan Anda. :

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "my_service_log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "2097152" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }

Pertimbangkan hal berikut saat menggunakan FireLens Amazon ECS dengan opsi batas buffer:

  • Opsi ini didukung pada jenis peluncuran Amazon EC2 dan jenis peluncuran Fargate dengan versi platform atau yang lebih baru. 1.4.0

  • Opsi ini hanya valid ketika logDriver diatur keawsfirelens.

  • Batas buffer default adalah 1 MiB.

  • Nilai yang valid adalah 0 dan 536870912 (512 MiB).

  • Jumlah total memori yang dialokasikan pada tingkat tugas harus lebih besar dari jumlah memori yang dialokasikan untuk semua wadah selain batas buffer memori. Jumlah total memori buffer yang ditentukan harus kurang dari 536870912 (512MiB) ketika Anda tidak menentukan wadah dan nilai. memory memoryReservation Lebih khusus lagi, Anda dapat memiliki wadah aplikasi dengan driver awsfirelens log dan log-driver-buffer-limit opsi disetel ke 300 MiB. Namun, Anda tidak akan diizinkan untuk menjalankan tugas jika Anda memiliki lebih dari dua kontainer dengan log-driver-buffer-limit set ke 300 MiB (300 MiB * 2 > 512 MiB).

Menggunakan pustaka Fluent logger atau Log4j melalui TCP

Saat driver awsfirelens log ditentukan dalam definisi tugas, agen penampung Amazon ECS menyuntikkan variabel lingkungan berikut ke dalam wadah:

FLUENT_HOST

Alamat IP yang ditetapkan ke FireLens wadah.

FLUENT_PORT

Port tempat protokol Fluent Forward mendengarkan.

Anda dapat menggunakan variabel FLUENT_HOST dan FLUENT_PORT lingkungan untuk log langsung ke router log dari kode alih-alih melaluistdout. Untuk informasi lebih lanjut, lihat fluent-logger-golangdi GitHub.

Topik