Menyebarkan Fluent Bit di Amazon Windows container ECS - 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 Windows container ECS

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 khusus. HTTP Untuk informasi selengkapnya tentang Fluent Bit, lihat Fluent Bit situs web.

Citra AWS untuk Fluent Bit untuk tersedia di Amazon ECR di Galeri ECR Publik Amazon dan dalam ECR repositori Amazon di sebagian besar Wilayah untuk ketersediaan tinggi. Untuk informasi selengkapnya, silakan lihat aws-for-fluent-bit di situs GitHub 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 ECS tugas Amazon lainnya menggunakan driver logging lancar. Untuk informasi selengkapnya, lihat Driver pencatatan fluentd di situs web dokumentasi Docker.

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

    • ECSAgen Amazon menambahkan label ke wadah yang mencakup nama cluster, nama keluarga definisi tugas, nomor revisi definisi tugas, tugasARN, 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 kredenal IAM peran 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 milik kontainer.

  • Menambahkan metadata tambahan termasuk nama cluster, tugasARN, 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 dari diinstal dan dikonfigurasi. AWS CLI Untuk informasi selengkapnya, lihat Menginstal atau memperbarui ke versi terbaru AWS CLI.

  • 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 Mengatur untuk menggunakan Amazon ECS telah diselesaikan.

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

  • Anda memiliki VPC subnet publik tempat EC2 instance akan diluncurkan. Anda dapat menggunakan default AndaVPC. 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 VPC wizard Amazon untuk membuatVPC, lihatBuat virtual private cloud.

Langkah 1: Buat peran IAM akses

Buat ECS IAM peran Amazon.

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

  2. Buat IAM peran untuk tugas Fluent Bit bernamafluentTaskRole. Untuk informasi selengkapnya, lihat IAMPeran ECS tugas Amazon.

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

    { "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 sebaris ke fluentTaskRole IAM peran.

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

Langkah 2: Buat instans penampung Amazon ECS Windows

Buat instance penampung Amazon ECS Windows.

Untuk membuat ECS instance Amazon
  1. Gunakan aws ssm get-parameters perintah untuk mengambil AMI ID untuk Wilayah yang menjadi tuan rumah AndaVPC. Untuk informasi selengkapnya, lihat Mengambil metadata Amazon ECS -Optimized AMI.

  2. Gunakan EC2 konsol Amazon untuk meluncurkan instance.

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

    2. Dari bilah navigasi, pilih Wilayah untuk digunakan.

    3. Dari EC2Dasbor, pilih Launch instance.

    4. Untuk Nama, masukkan nama yang unik.

    5. Untuk Aplikasi dan Gambar 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 Pengaturan jaringan, untuk Grup keamanan, pilih grup keamanan yang sudah ada, atau buat grup keamanan baru.

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

    10. Di bawah Detail lanjutan, IAMmisalnya profil, pilih ecsInstanceRole.

    11. Konfigurasikan instance ECS penampung Amazon Anda dengan data pengguna berikut. Di Advanced Details (Detail Lanjutan), tempelkan skrip berikut ke bidang Data pengguna, ganti cluster_name dengan nama klaster 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: Konfigurasi 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:

  • region 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 TCP port 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 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 EC2 instans 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-role dengan Amazon Resource Name (ARN) dari IAM peran tugas Anda

    • region 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 ketentuan tugas.

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

    Anda dapat mencantumkan daftar ketentuan 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 ECS layanan Amazon menggunakan strategi penjadwalan daemon

Setelah Anda mendaftarkan ketentuan tugas untuk akun Anda, Anda dapat menjalankan tugas di klaster. Untuk tutorial ini, Anda menjalankan salah satu instans ketentuan ecs-windows-fluent-bit:1 tugas di FluentBit-cluster klaster 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:

    • region 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:

    • region dengan Wilayah tempat tugas layanan Anda berjalan

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

Langkah 6: Daftarkan ketentuan tugas Windows yang menghasilkan log

Mendaftarkan ketentuan 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. ECSAgen Amazon memberi label pada setiap ECS wadah Amazon dengan tag termasuk nama cluster, tugasARN, 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.

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 ketentuan tugas.

    Ganti variabel berikut:

    • region dengan Wilayah tempat tugas Anda berjalan

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

    Anda dapat mencantumkan daftar ketentuan 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 windows-app-task ketentuan tugas

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

Untuk menjalankan tugas
  1. Jalankan windows-app-task:1 ketentuan tugas yang telah Anda daftarkan pada langkah sebelumnya.

    Ganti variabel berikut:

    • region 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 pada 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 hal 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 bahwa Anda berada di Wilayah tempat Anda men-deploy ke kontainer Anda.

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

    • /ecs/fluent-bit-logs

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

    Jika Anda melihat grup log ini, penyiapan Fluent Bit 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 Menghentikan ECS tugas Amazon.

  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 menghentikan instans.

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

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

    aws ecs delete-cluster --cluster FluentBit-cluster