Menyebarkan Fluent Bit di Amazon ECS untuk wadah Windows - Amazon Elastic Container Service

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

Menyebarkan Fluent Bit di Amazon ECS untuk wadah Windows

Fluent Bit adalah prosesor log dan router yang cepat dan fleksibel yang didukung oleh berbagai sistem operasi. Ini dapat digunakan untuk merutekan log ke berbagai AWS tujuan seperti Amazon CloudWatch Log, Firehose Amazon S3, dan Amazon Service. OpenSearch Fluent Bit mendukung solusi mitra umum seperti Datadog, Splunk, dan server HTTP kustom. Untuk informasi lebih lanjut tentang Fluent Bit, lihat Fluent Bit situs web.

Gambar AWS for Fluent Bit tersedia di Amazon ECR di Galeri Publik Amazon ECR dan di repositori ECR Amazon di sebagian besar Wilayah untuk ketersediaan tinggi. Untuk informasi lebih lanjut, lihat aws-for-fluent-bit di GitHub situs web.

Tutorial ini memandu Anda melalui cara menerapkan container Fluent Bit pada instance Windows mereka yang berjalan di Amazon ECS untuk mengalirkan log yang dihasilkan oleh tugas Windows ke Amazon CloudWatch untuk pencatatan terpusat.

Tutorial ini menggunakan pendekatan berikut:

  • Fluent Bit berjalan sebagai layanan dengan strategi penjadwalan Daemon. Strategi ini memastikan bahwa satu instance Fluent Bit selalu berjalan pada instance container di cluster.

    • Mendengarkan pada port 24224 menggunakan plug-in input forward.

    • Ekspos port 24224 ke host sehingga runtime docker dapat mengirim log ke Fluent Bit menggunakan port yang terbuka ini.

    • Memiliki konfigurasi yang memungkinkan Fluent Bit untuk mengirim catatan log ke tujuan tertentu.

  • Luncurkan semua wadah tugas Amazon ECS lainnya menggunakan driver logging lancar. Untuk informasi selengkapnya, lihat Driver logging fluentd di situs web dokumentasi Docker.

    • Docker terhubung ke soket TCP 24224 di localhost di dalam namespace host.

    • Agen Amazon ECS menambahkan label ke wadah yang mencakup nama cluster, nama keluarga definisi tugas, nomor revisi definisi tugas, ARN tugas, dan nama penampung. Informasi yang sama ditambahkan ke catatan log menggunakan opsi label dari driver logging docker fluentd. Untuk informasi selengkapnya, lihat label, labels-regex, env, dan env-regex di situs web dokumentasi Docker.

    • Karena async opsi driver logging fluentd disetel ketrue, ketika wadah Fluent Bit dimulai ulang, docker menyangga log hingga wadah Fluent Bit dimulai ulang. Anda dapat meningkatkan batas buffer dengan mengatur fluentd-buffer-limit opsi. Untuk informasi selengkapnya, lihat fluentd-buffer-limitdi situs web dokumentasi Docker.

Alur kerja adalah sebagai berikut:

  • Kontainer Fluent Bit dimulai dan mendengarkan pada port 24224 yang diekspos ke host.

  • Fluent Bit menggunakan kredensyal peran IAM tugas yang ditentukan dalam definisi tugasnya.

  • Tugas lain yang diluncurkan pada instance yang sama menggunakan driver logging docker fluentd untuk terhubung ke wadah Fluent Bit pada port 24224.

  • Saat wadah aplikasi menghasilkan log, docker runtime menandai catatan tersebut, menambahkan metadata tambahan yang ditentukan dalam label, dan kemudian meneruskannya di port 24224 di namespace host.

  • Fluent Bit menerima catatan log pada port 24224 karena terkena namespace host.

  • Fluent Bit melakukan pemrosesan internal dan merutekan log seperti yang ditentukan.

Tutorial ini menggunakan konfigurasi CloudWatch Fluent Bit default yang melakukan hal berikut:

  • Membuat grup log baru untuk setiap cluster dan keluarga definisi tugas.

  • Membuat aliran log baru untuk setiap wadah tugas di grup log yang dihasilkan di atas setiap kali tugas baru diluncurkan. Setiap aliran akan ditandai dengan id tugas tempat wadah tersebut berada.

  • Menambahkan metadata tambahan termasuk nama cluster, ARN tugas, nama wadah tugas, keluarga definisi tugas, dan nomor revisi definisi tugas di setiap entri log.

    Misalnya, jika Anda memiliki task_1 dengan container_1 dan container_2 dan t ask_2 dengancontainer_3, maka berikut ini adalah aliran CloudWatch log:

    • /aws/ecs/windows.ecs_task_1

      task-out.TASK_ID.container_1

      task-out.TASK_ID.container_2

    • /aws/ecs/windows.ecs_task_2

      task-out.TASK_ID.container_3

Prasyarat

Tutorial ini mengasumsikan bahwa prasyarat berikut telah diselesaikan:

  • Versi terbaru diinstal dan dikonfigurasi. AWS CLI Untuk informasi selengkapnya, silakan lihat Menginstal AWS Command Line Interface.

  • Gambar aws-for-fluent-bit kontainer tersedia untuk sistem operasi Windows berikut:

    • Windows Server 2019 Core

    • Windows Server 2019 Full

    • Windows Server 2022 Inti

    • Windows Server 2022 Lengkap

  • Langkah-langkah di Siapkan untuk menggunakan Amazon ECS telah diselesaikan.

  • Anda memiliki cluster. Dalam tutorial ini, nama cluster adalah FluentBit-cluster.

  • Anda memiliki VPC dengan subnet publik tempat instans EC2 akan diluncurkan. Anda dapat menggunakan VPC default Anda. Anda juga dapat menggunakan subnet pribadi yang memungkinkan CloudWatch titik akhir Amazon mencapai subnet. Untuk informasi selengkapnya tentang CloudWatch titik akhir Amazon, lihat CloudWatch titik akhir dan kuota Amazon di. Referensi Umum AWS Untuk informasi tentang cara menggunakan wizard VPC Amazon untuk membuat VPC, lihat. Buat virtual private cloud

Langkah 1: Buat peran akses IAM

Buat peran Amazon ECS IAM.

  1. Buat peran instans penampung Amazon ECS bernama "ecsInstanceRoleā€. Untuk informasi selengkapnya, lihat peran IAM instans penampung Amazon ECS.

  2. Buat peran IAM untuk tugas Fluent Bit bernama. fluentTaskRole Untuk informasi selengkapnya, lihat Tugas peran IAM.

    Izin IAM yang diberikan dalam peran IAM ini diasumsikan oleh wadah tugas. Untuk memungkinkan Bit Lancar mengirim log CloudWatch, Anda harus melampirkan izin berikut ke peran IAM tugas.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "*" } ] }
  3. Lampirkan kebijakan pada peran tersebut.

    1. Simpan konten di atas dalam file bernamafluent-bit-policy.json.

    2. Jalankan perintah berikut untuk melampirkan kebijakan inline ke peran fluentTaskRole IAM.

      aws iam put-role-policy --role-name fluentTaskRole --policy-name fluentTaskPolicy --policy-document file://fluent-bit-policy.json

Langkah 2: Buat instance penampung Amazon ECS Windows

Buat instance penampung Amazon ECS Windows.

Untuk membuat instans Amazon ECS
  1. Gunakan aws ssm get-parameters perintah untuk mengambil ID AMI untuk Wilayah yang menghosting VPC Anda. Untuk informasi selengkapnya, lihat Mengambil metadata AMI yang dioptimalkan Amazon ECS.

  2. Gunakan konsol Amazon EC2 untuk meluncurkan instans.

    1. Buka konsol Amazon EC2 di https://console.aws.amazon.com/ec2/.

    2. Dari bilah navigasi, pilih Wilayah untuk digunakan.

    3. Dari Dasbor EC2, pilih Meluncurkan instans.

    4. Untuk Nama, masukkan nama unik.

    5. Untuk Gambar Aplikasi dan OS (Amazon Machine Image), pilih AMI yang Anda ambil pada langkah pertama.

    6. Untuk jenis Instance, piliht3.xlarge.

    7. Untuk Key pair (login), pilih key pair.

    8. Di bawah Pengaturan jaringan, untuk grup Keamanan, pilih grup keamanan yang ada, atau buat yang baru.

    9. Di bawah Pengaturan jaringan, untuk Auto-assign IP Publik, pilih Aktifkan.

    10. Di bawah Detail lanjutan, untuk profil instans IAM, pilih ecsInstanceRole.

    11. Konfigurasikan instans penampung Amazon ECS Anda dengan data pengguna berikut. Di bawah Detail Lanjutan, tempelkan skrip berikut ke bidang data Pengguna, ganti cluster_name dengan nama cluster Anda.

      <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster cluster-name -EnableTaskENI -EnableTaskIAMRole -LoggingDrivers '["awslogs","fluentd"]' </powershell>
    12. Saat Anda siap, pilih bidang pengakuan, lalu pilih Luncurkan Instans.

    13. Halaman konfirmasi memberi tahu Anda bahwa instans Anda akan diluncurkan. Pilih Lihat Instans untuk menutup halaman konfirmasi dan kembali ke konsol tersebut.

Langkah 3: Konfigurasikan Bit Lancar

Anda dapat menggunakan konfigurasi default berikut yang disediakan oleh AWS untuk memulai dengan cepat:

Atau, Anda dapat menggunakan konfigurasi default lain yang disediakan oleh AWS. Untuk informasi selengkapnya, lihat Mengganti titik masuk untuk gambar Windows di situs web Githubaws-for-fluent-bit.

Konfigurasi Amazon CloudWatch Fluent Bit default ditunjukkan di bawah ini.

Ganti variabel berikut:

  • wilayah dengan Wilayah tempat Anda ingin mengirim CloudWatch log Amazon.

[SERVICE] Flush 5 Log_Level info Daemon off [INPUT] Name forward Listen 0.0.0.0 Port 24224 Buffer_Chunk_Size 1M Buffer_Max_Size 6M Tag_Prefix ecs. # Amazon ECS agent adds the following log keys as labels to the docker container. # We would use fluentd logging driver to add these to log record while sending it to Fluent Bit. [FILTER] Name modify Match ecs.* Rename com.amazonaws.ecs.cluster ecs_cluster Rename com.amazonaws.ecs.container-name ecs_container_name Rename com.amazonaws.ecs.task-arn ecs_task_arn Rename com.amazonaws.ecs.task-definition-family ecs_task_definition_family Rename com.amazonaws.ecs.task-definition-version ecs_task_definition_version [FILTER] Name rewrite_tag Match ecs.* Rule $ecs_task_arn ^([a-z-:0-9]+)/([a-zA-Z0-9-_]+)/([a-z0-9]+)$ out.$3.$ecs_container_name false Emitter_Name re_emitted [OUTPUT] Name cloudwatch_logs Match out.* region region log_group_name fallback-group log_group_template /aws/ecs/$ecs_cluster.$ecs_task_definition_family log_stream_prefix task- auto_create_group On

Setiap log yang masuk ke Fluent Bit memiliki tag yang Anda tentukan, atau dibuat secara otomatis ketika Anda tidak menyediakannya. Tag dapat digunakan untuk merutekan log yang berbeda ke tujuan yang berbeda. Untuk informasi tambahan, lihat Tag di Manual Resmi Fluent Bit.

Konfigurasi Fluent Bit yang dijelaskan di atas memiliki properti berikut:

  • Plug-in input maju mendengarkan lalu lintas masuk pada port TCP 24224.

  • Setiap entri log yang diterima pada port tersebut memiliki tag yang dimodifikasi oleh plug-in input forward untuk mengawali catatan dengan string. ecs.

  • Pipeline internal Fluent Bit merutekan entri log untuk memodifikasi filter menggunakan regex Match. Filter ini menggantikan kunci dalam catatan log JSON ke format yang dapat dikonsumsi Fluent Bit.

  • Entri log yang dimodifikasi kemudian dikonsumsi oleh filter rewrite_tag. Filter ini mengubah tag catatan log ke format keluar. TASK_ID. CONTAINER_NAME.

  • Tag baru akan dirutekan ke plug-in cloudwatch_logs keluaran yang membuat grup log dan aliran seperti yang dijelaskan sebelumnya dengan menggunakan opsi dan plug-in keluaran. log_group_template log_stream_prefix CloudWatch Untuk informasi tambahan, lihat Parameter konfigurasi di Manual Resmi Bit Lancar.

Langkah 4: Daftarkan definisi tugas Windows Fluent Bit yang merutekan log ke CloudWatch

Daftarkan definisi tugas Windows Fluent Bit yang merutekan log ke CloudWatch.

catatan

Definisi tugas ini mengekspos port kontainer Fluent Bit 24224 ke port host 24224. Pastikan port ini tidak terbuka di grup keamanan instans EC2 Anda untuk mencegah akses dari luar.

Untuk mendaftarkan ketentuan tugas
  1. Buat file yang diberi nama fluent-bit.json dengan konten berikut ini.

    Ganti variabel berikut:

    • task-iam-roledengan Nama Sumber Daya Amazon (ARN) dari peran IAM tugas Anda

    • wilayah dengan Wilayah tempat tugas Anda berjalan

    { "family": "ecs-windows-fluent-bit", "taskRoleArn": "task-iam-role", "containerDefinitions": [ { "name": "fluent-bit", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:windowsservercore-latest", "cpu": 512, "portMappings": [ { "hostPort": 24224, "containerPort": 24224, "protocol": "tcp" } ], "entryPoint": [ "Powershell", "-Command" ], "command": [ "C:\\entrypoint.ps1 -ConfigFile C:\\ecs_windows_forward_daemon\\cloudwatch.conf" ], "environment": [ { "name": "AWS_REGION", "value": "region" } ], "memory": 512, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fluent-bit-logs", "awslogs-region": "region", "awslogs-stream-prefix": "flb", "awslogs-create-group": "true" } } } ], "memory": "512", "cpu": "512" }
  2. Jalankan perintah berikut untuk mendaftarkan definisi tugas.

    aws ecs register-task-definition --cli-input-json file://fluent-bit.json --region region

    Anda dapat membuat daftar definisi tugas untuk akun Anda dengan menjalankan list-task-definitions perintah. Output menampilkan nilai keluarga dan revisi yang dapat Anda gunakan bersama dengan run-task ataustart-task.

Langkah 5: Jalankan definisi ecs-windows-fluent-bit tugas sebagai layanan Amazon ECS menggunakan strategi penjadwalan daemon

Setelah mendaftarkan definisi tugas untuk akun Anda, Anda dapat menjalankan tugas di klaster. Untuk tutorial ini, Anda menjalankan satu contoh definisi ecs-windows-fluent-bit:1 tugas di FluentBit-cluster cluster Anda. Jalankan tugas dalam layanan yang menggunakan strategi penjadwalan daemon, yang memastikan bahwa satu instance Fluent Bit selalu berjalan pada setiap instance container Anda.

Untuk menjalankan tugas
  1. Jalankan perintah berikut untuk memulai definisi ecs-windows-fluent-bit:1 tugas (terdaftar pada langkah sebelumnya) sebagai layanan.

    catatan

    Definisi tugas ini menggunakan driver awslogs logging, instance container Anda harus memiliki izin yang diperlukan.

    Ganti variabel berikut:

    • wilayah dengan Wilayah tempat layanan Anda berjalan

    aws ecs create-service \ --cluster FluentBit-cluster \ --service-name FluentBitForwardDaemonService \ --task-definition ecs-windows-fluent-bit:1 \ --launch-type EC2 \ --scheduling-strategy DAEMON \ --region region
  2. Jalankan perintah berikut untuk membuat daftar tugas Anda.

    Ganti variabel berikut:

    • wilayah dengan Wilayah tempat tugas layanan Anda berjalan

    aws ecs list-tasks --cluster FluentBit-cluster --region region

Langkah 6: Daftarkan definisi tugas Windows yang menghasilkan log

Daftarkan definisi tugas yang menghasilkan log. Definisi tugas ini menyebarkan gambar kontainer Windows yang akan menulis angka tambahan untuk stdout setiap detik.

Definisi tugas menggunakan driver logging lancar yang terhubung ke port 24224 yang didengarkan oleh plug-in Fluent Bit. Agen Amazon ECS memberi label pada setiap wadah Amazon ECS dengan tag termasuk nama cluster, ARN tugas, nama keluarga definisi tugas, nomor revisi definisi tugas, dan nama wadah tugas. Label nilai kunci ini diteruskan ke Fluent Bit.

catatan

Tugas ini menggunakan mode default jaringan. Namun, Anda juga dapat menggunakan mode awsvpc jaringan dengan tugas tersebut.

Untuk mendaftarkan ketentuan tugas
  1. Buat file yang diberi nama windows-app-task.json dengan konten berikut ini.

    { "family": "windows-app-task", "containerDefinitions": [ { "name": "sample-container", "image": "mcr.microsoft.com/windows/servercore:ltsc2019", "cpu": 512, "memory": 512, "essential": true, "entryPoint": [ "Powershell", "-Command" ], "command": [ "$count=1;while(1) { Write-Host $count; sleep 1; $count=$count+1;}" ], "logConfiguration": { "logDriver": "fluentd", "options": { "fluentd-address": "localhost:24224", "tag": "{{ index .ContainerLabels \"com.amazonaws.ecs.task-definition-family\" }}", "fluentd-async": "true", "labels": "com.amazonaws.ecs.cluster,com.amazonaws.ecs.container-name,com.amazonaws.ecs.task-arn,com.amazonaws.ecs.task-definition-family,com.amazonaws.ecs.task-definition-version" } } } ], "memory": "512", "cpu": "512" }
  2. Jalankan perintah berikut untuk mendaftarkan definisi tugas.

    Ganti variabel berikut:

    • wilayah dengan Wilayah tempat tugas Anda berjalan

    aws ecs register-task-definition --cli-input-json file://windows-app-task.json --region region

    Anda dapat membuat daftar definisi tugas untuk akun Anda dengan menjalankan list-task-definitions perintah. Output menampilkan nilai keluarga dan revisi yang dapat Anda gunakan bersama dengan run-task ataustart-task.

Langkah 7: Jalankan definisi windows-app-task tugas

Setelah Anda mendaftarkan definisi windows-app-task tugas, jalankan di FluentBit-cluster cluster Anda.

Untuk menjalankan tugas
  1. Jalankan definisi windows-app-task:1 tugas yang Anda daftarkan di langkah sebelumnya.

    Ganti variabel berikut:

    • wilayah dengan Wilayah tempat tugas Anda berjalan

    aws ecs run-task --cluster FluentBit-cluster --task-definition windows-app-task:1 --count 2 --region region
  2. Jalankan perintah berikut untuk membuat daftar tugas Anda.

    aws ecs list-tasks --cluster FluentBit-cluster

Langkah 8: Verifikasi log CloudWatch

Untuk memverifikasi penyiapan Fluent Bit Anda, periksa grup log berikut di CloudWatch konsol:

  • /ecs/fluent-bit-logs- Ini adalah grup log yang sesuai dengan wadah daemon Fluent Bit yang berjalan pada instance container.

  • /aws/ecs/FluentBit-cluster.windows-app-task- Ini adalah grup log yang sesuai dengan semua tugas yang diluncurkan untuk keluarga definisi windows-app-task tugas di dalam FluentBit-cluster cluster.

    task-out.FIRST_TASK_ID.sample-container- Aliran log ini berisi semua log yang dihasilkan oleh contoh pertama tugas dalam wadah tugas sample-container.

    task-out.SECOND_TASK_ID.sample-container- Aliran log ini berisi semua log yang dihasilkan oleh instance kedua tugas dalam wadah tugas sample-container.

Aliran task-out.TASK_ID.sample-container log memiliki bidang yang mirip dengan berikut ini:

{ "source": "stdout", "ecs_task_arn": "arn:aws:ecs:region:0123456789012:task/FluentBit-cluster/13EXAMPLE", "container_name": "/ecs-windows-app-task-1-sample-container-cEXAMPLE", "ecs_cluster": "FluentBit-cluster", "ecs_container_name": "sample-container", "ecs_task_definition_version": "1", "container_id": "61f5e6EXAMPLE", "log": "10", "ecs_task_definition_family": "windows-app-task" }
Untuk memverifikasi pengaturan Fluent Bit
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pada panel navigasi, pilih Grup log. Pastikan Anda berada di Wilayah tempat Anda menerapkan Fluent Bit ke kontainer Anda.

    Dalam daftar grup log di Wilayah AWS, Anda akan melihat yang berikut:

    • /ecs/fluent-bit-logs

    • /aws/ecs/FluentBit-cluster.windows-app-task

    Jika Anda melihat grup log ini, pengaturan Bit Lancar diverifikasi.

Langkah 9: Membersihkan

Setelah Anda menyelesaikan tutorial ini, bersihkan sumber daya yang terkait dengannya untuk menghindari biaya yang tidak Anda gunakan.

Untuk membersihkan sumber daya tutorial
  1. Hentikan windows-simple-task tugas dan ecs-fluent-bit tugas. Untuk informasi selengkapnya, lihat Hentikan tugas Amazon ECS.

  2. Jalankan perintah berikut untuk menghapus grup /ecs/fluent-bit-logs log. Untuk informasi selengkapnya, tentang menghapus grup log lihat delete-log-groupdi AWS Command Line Interface Referensi.

    aws logs delete-log-group --log-group-name /ecs/fluent-bit-logs aws logs delete-log-group --log-group-name /aws/ecs/FluentBit-cluster.windows-app-task
  3. Jalankan perintah berikut untuk mengakhiri instance.

    aws ec2 terminate-instances --instance-ids instance-id
  4. Jalankan perintah berikut untuk menghapus peran IAM.

    aws iam delete-role --role-name ecsInstanceRole aws iam delete-role --role-name fluentTaskRole
  5. Jalankan perintah berikut untuk menghapus cluster Amazon ECS.

    aws ecs delete-cluster --cluster FluentBit-cluster