Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggabungkan pesan log Amazon ECS multiline atau stack-trace
Dimulai dengan AWS untuk Fluent Bit versi 2.22.0, filter multiline disertakan. Filter multiline membantu menggabungkan pesan log yang awalnya milik satu konteks tetapi dibagi menjadi beberapa catatan atau baris log. Untuk informasi selengkapnya tentang filter multiline, lihat dokumentasi Fluent Bit
Contoh umum pesan log terpisah adalah:
-
Jejak tumpukan.
-
Aplikasi yang mencetak log pada beberapa baris.
-
Log pesan yang dibagi karena lebih panjang dari ukuran buffer maks runtime yang ditentukan. Anda dapat menggabungkan pesan log yang dibagi berdasarkan runtime container dengan mengikuti contoh di GitHub: FireLens Contoh:
Concatenate Container Logs. Partial/Split
Izin IAM yang diperlukan
Anda memiliki izin IAM yang diperlukan untuk agen penampung untuk menarik gambar kontainer dari Amazon ECR dan wadah untuk merutekan log ke Log. CloudWatch
Untuk izin ini, Anda harus memiliki peran berikut:
-
Peran tugas IAM.
-
Peran IAM eksekusi tugas.
Anda memerlukan izin berikut:
logs:CreateLogStreamlogs:CreateLogGrouplogs:PutLogEvents
Tentukan kapan harus menggunakan pengaturan log multiline
Berikut ini adalah contoh cuplikan log yang Anda lihat di konsol CloudWatch Log dengan pengaturan log default. Anda dapat melihat garis yang dimulai dengan log untuk menentukan apakah Anda memerlukan filter multiline. Ketika konteksnya sama, Anda dapat menggunakan pengaturan log multiline, Dalam contoh ini, konteksnya adalah “com.myproject.model. MyProject”.
2022-09-20T15:47:56:595-05-00 {"container_id": "82ba37cada1d44d389b03e78caf74faa-EXAMPLE", "container_name": "example-app", "source=": "stdout", "log": ": " at com.myproject.modele.(MyProject.badMethod.java:22)",
{
"container_id": "82ba37cada1d44d389b03e78caf74faa-EXAMPLE",
"container_name: ": "example-app",
"source": "stdout",
"log": ": " at com.myproject.model.MyProject.badMethod(MyProject.java:22)",
"ecs_cluster": "default",
"ecs_task_arn": "arn:aws:region:123456789012:task/default/b23c940d29ed4714971cba72cEXAMPLE",
"ecs_task_definition": "firelense-example-multiline:3"
}
2022-09-20T15:47:56:595-05-00 {"container_id": "82ba37cada1d44d389b03e78caf74faa-EXAMPLE", "container_name": "example-app", "stdout", "log": ": " at com.myproject.modele.(MyProject.oneMoreMethod.java:18)",
{
"container_id": "82ba37cada1d44d389b03e78caf74faa-EXAMPLE",
"container_name: ": "example-app",
"source": "stdout",
"log": ": " at com.myproject.model.MyProject.oneMoreMethod(MyProject.java:18)",
"ecs_cluster": "default",
"ecs_task_arn": "arn:aws:region:123456789012:task/default/b23c940d29ed4714971cba72cEXAMPLE,
"ecs_task_definition": "firelense-example-multiline:3"
}
Setelah Anda menggunakan pengaturan log multiline, output akan terlihat mirip dengan contoh di bawah ini.
2022-09-20T15:47:56:595-05-00 {"container_id": "82ba37cada1d44d389b03e78caf74faa-EXAMPLE", "container_name": "example-app", "stdout",...
{
"container_id": "82ba37cada1d44d389b03e78caf74faa-EXAMPLE",
"container_name: ": "example-app",
"source": "stdout",
"log: "September 20, 2022 06:41:48 Exception in thread \"main\" java.lang.RuntimeException: Something has gone wrong, aborting!\n
at com.myproject.module.MyProject.badMethod(MyProject.java:22)\n at
at com.myproject.model.MyProject.oneMoreMethod(MyProject.java:18) com.myproject.module.MyProject.main(MyProject.java:6)",
"ecs_cluster": "default",
"ecs_task_arn": "arn:aws:region:123456789012:task/default/b23c940d29ed4714971cba72cEXAMPLE",
"ecs_task_definition": "firelense-example-multiline:2"
}
Parse dan concatenate pilihan
Untuk mengurai log dan menggabungkan baris yang terbagi karena baris baru, Anda dapat menggunakan salah satu dari dua opsi ini.
-
Gunakan file parser Anda sendiri yang berisi aturan untuk mengurai dan menggabungkan baris yang termasuk dalam pesan yang sama.
-
Gunakan parser bawaan Fluent Bit. Untuk daftar bahasa yang didukung oleh parser bawaan Fluent Bit, lihat Dokumentasi Bit Lancar
.
Tutorial berikut memandu Anda melalui langkah-langkah untuk setiap kasus penggunaan. Langkah-langkah menunjukkan cara menggabungkan multiline dan mengirim log ke Amazon. CloudWatch Anda dapat menentukan tujuan yang berbeda untuk log Anda.
Contoh: Gunakan parser yang Anda buat
Dalam contoh ini, Anda akan menyelesaikan langkah-langkah berikut:
-
Buat dan unggah gambar untuk wadah Fluent Bit.
-
Buat dan unggah gambar untuk aplikasi multiline demo yang berjalan, gagal, dan menghasilkan jejak tumpukan multiline.
-
Buat definisi tugas dan jalankan tugas.
-
Lihat log untuk memverifikasi bahwa pesan yang menjangkau beberapa baris tampak digabungkan.
Buat dan unggah gambar untuk wadah Fluent Bit
Gambar ini akan menyertakan file parser tempat Anda menentukan ekspresi reguler dan file konfigurasi yang mereferensikan file parser.
-
Buat folder dengan nama
FluentBitDockerImage. -
Di dalam folder, buat file parser yang berisi aturan untuk mengurai log dan menggabungkan baris yang termasuk dalam pesan yang sama.
-
Tempel konten berikut di file parser:
[MULTILINE_PARSER] name multiline-regex-test type regex flush_timeout 1000 # # Regex rules for multiline parsing # --------------------------------- # # configuration hints: # # - first state always has the name: start_state # - every field in the rule must be inside double quotes # # rules | state name | regex pattern | next state # ------|---------------|-------------------------------------------- rule "start_state" "/(Dec \d+ \d+\:\d+\:\d+)(.*)/" "cont" rule "cont" "/^\s+at.*/" "cont"Saat Anda menyesuaikan pola regex Anda, kami sarankan Anda menggunakan editor ekspresi reguler untuk menguji ekspresi.
-
Simpan file sebagai
parsers_multiline.conf.
-
-
Di dalam
FluentBitDockerImagefolder, buat file konfigurasi khusus yang mereferensikan file parser yang Anda buat di langkah sebelumnya.Untuk informasi selengkapnya tentang file konfigurasi kustom, lihat Menentukan file konfigurasi kustom di Panduan Pengembang Layanan Amazon Elastic Container
-
Tempel konten berikut dalam file:
[SERVICE] flush 1 log_level info parsers_file /parsers_multiline.conf [FILTER] name multiline match * multiline.key_content log multiline.parser multiline-regex-testcatatan
Anda harus menggunakan jalur absolut parser.
-
Simpan file sebagai
extra.conf.
-
-
Di dalam
FluentBitDockerImagefolder, buat Dockerfile dengan gambar Fluent Bit dan parser dan file konfigurasi yang Anda buat.-
Tempel konten berikut dalam file:
FROM public.ecr.aws/aws-observability/aws-for-fluent-bit:latest ADD parsers_multiline.conf /parsers_multiline.conf ADD extra.conf /extra.conf -
Simpan file sebagai
Dockerfile.
-
-
Menggunakan Dockerfile, buat gambar Fluent Bit kustom dengan parser dan file konfigurasi khusus disertakan.
catatan
Anda dapat menempatkan file parser dan file konfigurasi di mana saja di gambar Docker kecuali
/fluent-bit/etc/fluent-bit.confkarena jalur file ini digunakan oleh. FireLens-
Bangun gambar:
docker build -t fluent-bit-multiline-image.Dimana:
fluent-bit-multiline-imageadalah nama untuk gambar dalam contoh ini. -
Verifikasi bahwa gambar telah dibuat dengan benar:
docker images —filter reference=fluent-bit-multiline-imageJika berhasil, output menunjukkan gambar dan
latesttag.
-
-
Unggah gambar Fluent Bit kustom ke Amazon Elastic Container Registry.
-
Buat repositori Amazon ECR untuk menyimpan gambar:
aws ecr create-repository --repository-name fluent-bit-multiline-repo --region us-east-1Dimana:
fluent-bit-multiline-repoadalah nama untuk repositori danus-east-1merupakan wilayah dalam contoh ini.Outputnya memberi Anda detail repositori baru.
-
Tandai gambar Anda dengan
repositoryUrinilai dari output sebelumnya:docker tagfluent-bit-multiline-imagerepositoryUriContoh:
docker tag fluent-bit-multiline-image xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/fluent-bit-multiline-repo -
Jalankan docker image untuk memverifikasi itu berjalan dengan benar:
docker images —filter reference=repositoryUriDalam output, nama repositori berubah dari fluent-bit-multiline-repo ke.
repositoryUri -
Otentikasi ke Amazon ECR dengan menjalankan
aws ecr get-login-passwordperintah dan menentukan ID registri yang ingin Anda autentikasi:aws ecr get-login-password | docker login --username AWS --password-stdinregistry ID.dkr.ecr.region.amazonaws.com.rproxy.govskope.caContoh:
ecr get-login-password | docker login --username AWS --password-stdin xxxxxxxxxxxx---dkr---ecr---us-east-1.amazonaws.com.rproxy.govskope.caPesan login yang berhasil muncul.
-
Dorong gambar ke Amazon ECR:
docker pushregistry ID.dkr.ecr.region.amazonaws.com/repository nameContoh:
docker push xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/fluent-bit-multiline-repo
-
Membangun dan meng-upload gambar untuk aplikasi demo multiline
Gambar ini akan mencakup file skrip Python yang menjalankan aplikasi dan file log sampel.
Saat Anda menjalankan tugas, aplikasi mensimulasikan berjalan, lalu gagal dan membuat jejak tumpukan.
-
Buat folder bernama
multiline-app:mkdir multiline-app -
Buat file skrip Python.
-
Di dalam
multiline-appfolder, buat file dan beri namamain.py. -
Tempel konten berikut dalam file:
import os import time file1 = open('/test.log', 'r') Lines = file1.readlines() count = 0 for i in range(10): print("app running normally...") time.sleep(1) # Strips the newline character for line in Lines: count += 1 print(line.rstrip()) print(count) print("app terminated.") -
Simpan file
main.py.
-
-
Buat file log sampel.
-
Di dalam
multiline-appfolder, buat file dan beri namatest.log. -
Tempel konten berikut dalam file:
single line... Dec 14 06:41:08 Exception in thread "main" java.lang.RuntimeException: Something has gone wrong, aborting! at com.myproject.module.MyProject.badMethod(MyProject.java:22) at com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18) at com.myproject.module.MyProject.anotherMethod(MyProject.java:14) at com.myproject.module.MyProject.someMethod(MyProject.java:10) at com.myproject.module.MyProject.main(MyProject.java:6) another line... -
Simpan file
test.log.
-
-
Di dalam
multiline-appfolder, buat Dockerfile.-
Tempel konten berikut dalam file:
FROM public.ecr.aws/amazonlinux/amazonlinux:latest ADD test.log /test.log RUN yum upgrade -y && yum install -y python3 WORKDIR /usr/local/bin COPY main.py . CMD ["python3", "main.py"] -
Simpan file
Dockerfile.
-
-
Menggunakan Dockerfile, buat gambar.
-
Bangun gambar:
docker build -t multiline-app-imageDimana:
multiline-app-imageadalah nama untuk gambar dalam contoh ini. -
Verifikasi bahwa gambar telah dibuat dengan benar:
docker images —filter reference=multiline-app-imageJika berhasil, output menunjukkan gambar dan
latesttag.
-
-
Unggah gambar ke Amazon Elastic Container Registry.
-
Buat repositori Amazon ECR untuk menyimpan gambar:
aws ecr create-repository --repository-name multiline-app-repo --region us-east-1Dimana:
multiline-app-repoadalah nama untuk repositori danus-east-1merupakan wilayah dalam contoh ini.Outputnya memberi Anda detail repositori baru. Perhatikan
repositoryUrinilainya karena Anda akan membutuhkannya di langkah selanjutnya. -
Tandai gambar Anda dengan
repositoryUrinilai dari output sebelumnya:docker tagmultiline-app-imagerepositoryUriContoh:
docker tag multiline-app-image xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/multiline-app-repo -
Jalankan docker image untuk memverifikasi itu berjalan dengan benar:
docker images —filter reference=repositoryUriDalam output, nama repositori berubah dari
multiline-app-repoke nilai.repositoryUri -
Dorong gambar ke Amazon ECR:
docker pushaws_account_id.dkr.ecr.region.amazonaws.com/repository nameContoh:
docker pushxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/multiline-app-repo
-
Buat definisi tugas dan jalankan tugas
-
Buat file definisi tugas dengan nama file
multiline-task-definition.json. -
Tempel konten berikut dalam
multiline-task-definition.jsonfile:{ "family": "firelens-example-multiline", "taskRoleArn": "task role ARN, "executionRoleArn": "execution role ARN", "containerDefinitions": [ { "essential": true, "image": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/fluent-bit-multiline-image:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "file", "config-file-value": "/extra.conf" } }, "memoryReservation": 50 }, { "essential": true, "image": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/multiline-app-image:latest", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "cloudwatch_logs", "region": "us-east-1", "log_group_name": "multiline-test/application", "auto_create_group": "true", "log_stream_prefix": "multiline-" } }, "memoryReservation": 100 } ], "requiresCompatibilities": ["FARGATE"], "networkMode": "awsvpc", "cpu": "256", "memory": "512" }Ganti yang berikut ini dalam definisi
multiline-task-definition.jsontugas:-
task role ARNUntuk menemukan peran tugas ARN, buka konsol IAM. Pilih Peran dan temukan peran
ecs-task-role-for-firelenstugas yang Anda buat. Pilih peran dan salin ARN yang muncul di bagian Ringkasan. -
execution role ARNUntuk menemukan peran eksekusi ARN, buka konsol IAM. Pilih Peran dan temukan
ecsTaskExecutionRoleperannya. Pilih peran dan salin ARN yang muncul di bagian Ringkasan. -
aws_account_idUntuk menemukan Anda
aws_account_id, masuk ke Konsol Manajemen AWS. Pilih nama pengguna Anda di kanan atas dan salin ID Akun Anda. -
us-east-1Ganti wilayah jika perlu.
-
-
Daftarkan file definisi tugas:
aws ecs register-task-definition --cli-input-json file://multiline-task-definition.json --regionregion Buka konsol di https://console.aws.amazon.com/ecs/v2
. -
Di panel navigasi, pilih Definisi Tugas dan kemudian pilih
firelens-example-multilinekeluarga karena kami mendaftarkan definisi tugas ke keluarga ini di baris pertama definisi tugas di atas. -
Pilih versi terbaru.
-
Pilih tugas Deploy, Run.
-
Pada halaman Jalankan Tugas, Untuk Cluster, pilih cluster, dan kemudian di bawah Jaringan, untuk Subnet, pilih subnet yang tersedia untuk tugas Anda.
-
Pilih Buat.
Verifikasi bahwa pesan log multiline di Amazon CloudWatch tampak digabungkan
Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/
. -
Dari panel navigasi, perluas Log dan pilih Grup log.
-
Pilih grup
multiline-test/applicatiolog. -
Pilih log. Lihat pesan. Baris yang cocok dengan aturan dalam file parser digabungkan dan muncul sebagai pesan tunggal.
Cuplikan log berikut menunjukkan baris yang digabungkan dalam satu peristiwa jejak tumpukan Java:
{ "container_id": "xxxxxx", "container_name": "app", "source": "stdout", "log": "Dec 14 06:41:08 Exception in thread \"main\" java.lang.RuntimeException: Something has gone wrong, aborting!\n at com.myproject.module.MyProject.badMethod(MyProject.java:22)\n at com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)\n at com.myproject.module.MyProject.anotherMethod(MyProject.java:14)\n at com.myproject.module.MyProject.someMethod(MyProject.java:10)\n at com.myproject.module.MyProject.main(MyProject.java:6)", "ecs_cluster": "default", "ecs_task_arn": "arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task/default/xxxxxx", "ecs_task_definition": "firelens-example-multiline:2" }Cuplikan log berikut menunjukkan bagaimana pesan yang sama muncul hanya dengan satu baris jika Anda menjalankan wadah Amazon ECS yang tidak dikonfigurasi untuk menggabungkan pesan log multiline.
{ "log": "Dec 14 06:41:08 Exception in thread \"main\" java.lang.RuntimeException: Something has gone wrong, aborting!", "container_id": "xxxxxx-xxxxxx", "container_name": "app", "source": "stdout", "ecs_cluster": "default", "ecs_task_arn": "arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task/default/xxxxxx", "ecs_task_definition": "firelens-example-multiline:3" }
Contoh: Gunakan parser bawaan Fluent Bit
Dalam contoh ini, Anda akan menyelesaikan langkah-langkah berikut:
-
Buat dan unggah gambar untuk wadah Fluent Bit.
-
Buat dan unggah gambar untuk aplikasi multiline demo yang berjalan, gagal, dan menghasilkan jejak tumpukan multiline.
-
Buat definisi tugas dan jalankan tugas.
-
Lihat log untuk memverifikasi bahwa pesan yang menjangkau beberapa baris tampak digabungkan.
Buat dan unggah gambar untuk wadah Fluent Bit
Gambar ini akan menyertakan file konfigurasi yang mereferensikan parser Fluent Bit.
-
Buat folder dengan nama
FluentBitDockerImage. -
Di dalam
FluentBitDockerImagefolder, buat file konfigurasi khusus yang mereferensikan file parser bawaan Fluent Bit.Untuk informasi selengkapnya tentang file konfigurasi kustom, lihat Menentukan file konfigurasi kustom di Panduan Pengembang Layanan Amazon Elastic Container
-
Tempel konten berikut dalam file:
[FILTER] name multiline match * multiline.key_content log multiline.parser go -
Simpan file sebagai
extra.conf.
-
-
Di dalam
FluentBitDockerImagefolder, buat Dockerfile dengan gambar Fluent Bit dan parser dan file konfigurasi yang Anda buat.-
Tempel konten berikut dalam file:
FROM public.ecr.aws/aws-observability/aws-for-fluent-bit:latest ADD extra.conf /extra.conf -
Simpan file sebagai
Dockerfile.
-
-
Menggunakan Dockerfile, buat gambar Fluent Bit kustom dengan file konfigurasi khusus yang disertakan.
catatan
Anda dapat menempatkan file konfigurasi di mana saja di gambar Docker kecuali
/fluent-bit/etc/fluent-bit.confkarena jalur file ini digunakan oleh FireLens.-
Bangun gambar:
docker build -t fluent-bit-multiline-image.Dimana:
fluent-bit-multiline-imageadalah nama untuk gambar dalam contoh ini. -
Verifikasi bahwa gambar telah dibuat dengan benar:
docker images —filter reference=fluent-bit-multiline-imageJika berhasil, output menunjukkan gambar dan
latesttag.
-
-
Unggah gambar Fluent Bit kustom ke Amazon Elastic Container Registry.
-
Buat repositori Amazon ECR untuk menyimpan gambar:
aws ecr create-repository --repository-name fluent-bit-multiline-repo --region us-east-1Dimana:
fluent-bit-multiline-repoadalah nama untuk repositori danus-east-1merupakan wilayah dalam contoh ini.Outputnya memberi Anda detail repositori baru.
-
Tandai gambar Anda dengan
repositoryUrinilai dari output sebelumnya:docker tagfluent-bit-multiline-imagerepositoryUriContoh:
docker tag fluent-bit-multiline-image xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/fluent-bit-multiline-repo -
Jalankan docker image untuk memverifikasi itu berjalan dengan benar:
docker images —filter reference=repositoryUriDalam output, nama repositori berubah dari fluent-bit-multiline-repo ke.
repositoryUri -
Otentikasi ke Amazon ECR dengan menjalankan
aws ecr get-login-passwordperintah dan menentukan ID registri yang ingin Anda autentikasi:aws ecr get-login-password | docker login --username AWS --password-stdinregistry ID.dkr.ecr.region.amazonaws.com.rproxy.govskope.caContoh:
ecr get-login-password | docker login --username AWS --password-stdin xxxxxxxxxxxx---dkr---ecr---us-east-1.amazonaws.com.rproxy.govskope.caPesan login yang berhasil muncul.
-
Dorong gambar ke Amazon ECR:
docker pushregistry ID.dkr.ecr.region.amazonaws.com/repository nameContoh:
docker push xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/fluent-bit-multiline-repo
-
Membangun dan meng-upload gambar untuk aplikasi demo multiline
Gambar ini akan mencakup file skrip Python yang menjalankan aplikasi dan file log sampel.
-
Buat folder bernama
multiline-app:mkdir multiline-app -
Buat file skrip Python.
-
Di dalam
multiline-appfolder, buat file dan beri namamain.py. -
Tempel konten berikut dalam file:
import os import time file1 = open('/test.log', 'r') Lines = file1.readlines() count = 0 for i in range(10): print("app running normally...") time.sleep(1) # Strips the newline character for line in Lines: count += 1 print(line.rstrip()) print(count) print("app terminated.") -
Simpan file
main.py.
-
-
Buat file log sampel.
-
Di dalam
multiline-appfolder, buat file dan beri namatest.log. -
Tempel konten berikut dalam file:
panic: my panic goroutine 4 [running]: panic(0x45cb40, 0x47ad70) /usr/local/go/src/runtime/panic.go:542 +0x46c fp=0xc42003f7b8 sp=0xc42003f710 pc=0x422f7c main.main.func1(0xc420024120) foo.go:6 +0x39 fp=0xc42003f7d8 sp=0xc42003f7b8 pc=0x451339 runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc42003f7e0 sp=0xc42003f7d8 pc=0x44b4d1 created by main.main foo.go:5 +0x58 goroutine 1 [chan receive]: runtime.gopark(0x4739b8, 0xc420024178, 0x46fcd7, 0xc, 0xc420028e17, 0x3) /usr/local/go/src/runtime/proc.go:280 +0x12c fp=0xc420053e30 sp=0xc420053e00 pc=0x42503c runtime.goparkunlock(0xc420024178, 0x46fcd7, 0xc, 0x1000f010040c217, 0x3) /usr/local/go/src/runtime/proc.go:286 +0x5e fp=0xc420053e70 sp=0xc420053e30 pc=0x42512e runtime.chanrecv(0xc420024120, 0x0, 0xc420053f01, 0x4512d8) /usr/local/go/src/runtime/chan.go:506 +0x304 fp=0xc420053f20 sp=0xc420053e70 pc=0x4046b4 runtime.chanrecv1(0xc420024120, 0x0) /usr/local/go/src/runtime/chan.go:388 +0x2b fp=0xc420053f50 sp=0xc420053f20 pc=0x40439b main.main() foo.go:9 +0x6f fp=0xc420053f80 sp=0xc420053f50 pc=0x4512ef runtime.main() /usr/local/go/src/runtime/proc.go:185 +0x20d fp=0xc420053fe0 sp=0xc420053f80 pc=0x424bad runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc420053fe8 sp=0xc420053fe0 pc=0x44b4d1 goroutine 2 [force gc (idle)]: runtime.gopark(0x4739b8, 0x4ad720, 0x47001e, 0xf, 0x14, 0x1) /usr/local/go/src/runtime/proc.go:280 +0x12c fp=0xc42003e768 sp=0xc42003e738 pc=0x42503c runtime.goparkunlock(0x4ad720, 0x47001e, 0xf, 0xc420000114, 0x1) /usr/local/go/src/runtime/proc.go:286 +0x5e fp=0xc42003e7a8 sp=0xc42003e768 pc=0x42512e runtime.forcegchelper() /usr/local/go/src/runtime/proc.go:238 +0xcc fp=0xc42003e7e0 sp=0xc42003e7a8 pc=0x424e5c runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc42003e7e8 sp=0xc42003e7e0 pc=0x44b4d1 created by runtime.init.4 /usr/local/go/src/runtime/proc.go:227 +0x35 goroutine 3 [GC sweep wait]: runtime.gopark(0x4739b8, 0x4ad7e0, 0x46fdd2, 0xd, 0x419914, 0x1) /usr/local/go/src/runtime/proc.go:280 +0x12c fp=0xc42003ef60 sp=0xc42003ef30 pc=0x42503c runtime.goparkunlock(0x4ad7e0, 0x46fdd2, 0xd, 0x14, 0x1) /usr/local/go/src/runtime/proc.go:286 +0x5e fp=0xc42003efa0 sp=0xc42003ef60 pc=0x42512e runtime.bgsweep(0xc42001e150) /usr/local/go/src/runtime/mgcsweep.go:52 +0xa3 fp=0xc42003efd8 sp=0xc42003efa0 pc=0x419973 runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc42003efe0 sp=0xc42003efd8 pc=0x44b4d1 created by runtime.gcenable /usr/local/go/src/runtime/mgc.go:216 +0x58 one more line, no multiline -
Simpan file
test.log.
-
-
Di dalam
multiline-appfolder, buat Dockerfile.-
Tempel konten berikut dalam file:
FROM public.ecr.aws/amazonlinux/amazonlinux:latest ADD test.log /test.log RUN yum upgrade -y && yum install -y python3 WORKDIR /usr/local/bin COPY main.py . CMD ["python3", "main.py"] -
Simpan file
Dockerfile.
-
-
Menggunakan Dockerfile, buat gambar.
-
Bangun gambar:
docker build -t multiline-app-imageDimana:
multiline-app-imageadalah nama untuk gambar dalam contoh ini. -
Verifikasi bahwa gambar telah dibuat dengan benar:
docker images —filter reference=multiline-app-imageJika berhasil, output menunjukkan gambar dan
latesttag.
-
-
Unggah gambar ke Amazon Elastic Container Registry.
-
Buat repositori Amazon ECR untuk menyimpan gambar:
aws ecr create-repository --repository-name multiline-app-repo --region us-east-1Dimana:
multiline-app-repoadalah nama untuk repositori danus-east-1merupakan wilayah dalam contoh ini.Outputnya memberi Anda detail repositori baru. Perhatikan
repositoryUrinilainya karena Anda akan membutuhkannya di langkah selanjutnya. -
Tandai gambar Anda dengan
repositoryUrinilai dari output sebelumnya:docker tagmultiline-app-imagerepositoryUriContoh:
docker tag multiline-app-image xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/multiline-app-repo -
Jalankan docker image untuk memverifikasi itu berjalan dengan benar:
docker images —filter reference=repositoryUriDalam output, nama repositori berubah dari
multiline-app-repoke nilai.repositoryUri -
Dorong gambar ke Amazon ECR:
docker pushaws_account_id.dkr.ecr.region.amazonaws.com/repository nameContoh:
docker pushxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/multiline-app-repo
-
Buat definisi tugas dan jalankan tugas
-
Buat file definisi tugas dengan nama file
multiline-task-definition.json. -
Tempel konten berikut dalam
multiline-task-definition.jsonfile:{ "family": "firelens-example-multiline", "taskRoleArn": "task role ARN, "executionRoleArn": "execution role ARN", "containerDefinitions": [ { "essential": true, "image": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/fluent-bit-multiline-image:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "file", "config-file-value": "/extra.conf" } }, "memoryReservation": 50 }, { "essential": true, "image": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/multiline-app-image:latest", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "cloudwatch_logs", "region": "us-east-1", "log_group_name": "multiline-test/application", "auto_create_group": "true", "log_stream_prefix": "multiline-" } }, "memoryReservation": 100 } ], "requiresCompatibilities": ["FARGATE"], "networkMode": "awsvpc", "cpu": "256", "memory": "512" }Ganti yang berikut ini dalam definisi
multiline-task-definition.jsontugas:-
task role ARNUntuk menemukan peran tugas ARN, buka konsol IAM. Pilih Peran dan temukan peran
ecs-task-role-for-firelenstugas yang Anda buat. Pilih peran dan salin ARN yang muncul di bagian Ringkasan. -
execution role ARNUntuk menemukan peran eksekusi ARN, buka konsol IAM. Pilih Peran dan temukan
ecsTaskExecutionRoleperannya. Pilih peran dan salin ARN yang muncul di bagian Ringkasan. -
aws_account_idUntuk menemukan Anda
aws_account_id, masuk ke Konsol Manajemen AWS. Pilih nama pengguna Anda di kanan atas dan salin ID Akun Anda. -
us-east-1Ganti wilayah jika perlu.
-
-
Daftarkan file definisi tugas:
aws ecs register-task-definition --cli-input-json file://multiline-task-definition.json --region us-east-1 Buka konsol di https://console.aws.amazon.com/ecs/v2
. -
Di panel navigasi, pilih Definisi Tugas dan kemudian pilih
firelens-example-multilinekeluarga karena kami mendaftarkan definisi tugas ke keluarga ini di baris pertama definisi tugas di atas. -
Pilih versi terbaru.
-
Pilih tugas Deploy, Run.
-
Pada halaman Jalankan Tugas, Untuk Cluster, pilih cluster, dan kemudian di bawah Jaringan, untuk Subnet, pilih subnet yang tersedia untuk tugas Anda.
-
Pilih Buat.
Verifikasi bahwa pesan log multiline di Amazon CloudWatch tampak digabungkan
Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/
. -
Dari panel navigasi, perluas Log dan pilih Grup log.
-
Pilih grup
multiline-test/applicatiolog. -
Pilih log dan lihat pesan. Baris yang cocok dengan aturan dalam file parser digabungkan dan muncul sebagai pesan tunggal.
Cuplikan log berikut menunjukkan jejak tumpukan Go yang digabungkan menjadi satu peristiwa:
{ "log": "panic: my panic\n\ngoroutine 4 [running]:\npanic(0x45cb40, 0x47ad70)\n /usr/local/go/src/runtime/panic.go:542 +0x46c fp=0xc42003f7b8 sp=0xc42003f710 pc=0x422f7c\nmain.main.func1(0xc420024120)\n foo.go:6 +0x39 fp=0xc42003f7d8 sp=0xc42003f7b8 pc=0x451339\nruntime.goexit()\n /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc42003f7e0 sp=0xc42003f7d8 pc=0x44b4d1\ncreated by main.main\n foo.go:5 +0x58\n\ngoroutine 1 [chan receive]:\nruntime.gopark(0x4739b8, 0xc420024178, 0x46fcd7, 0xc, 0xc420028e17, 0x3)\n /usr/local/go/src/runtime/proc.go:280 +0x12c fp=0xc420053e30 sp=0xc420053e00 pc=0x42503c\nruntime.goparkunlock(0xc420024178, 0x46fcd7, 0xc, 0x1000f010040c217, 0x3)\n /usr/local/go/src/runtime/proc.go:286 +0x5e fp=0xc420053e70 sp=0xc420053e30 pc=0x42512e\nruntime.chanrecv(0xc420024120, 0x0, 0xc420053f01, 0x4512d8)\n /usr/local/go/src/runtime/chan.go:506 +0x304 fp=0xc420053f20 sp=0xc420053e70 pc=0x4046b4\nruntime.chanrecv1(0xc420024120, 0x0)\n /usr/local/go/src/runtime/chan.go:388 +0x2b fp=0xc420053f50 sp=0xc420053f20 pc=0x40439b\nmain.main()\n foo.go:9 +0x6f fp=0xc420053f80 sp=0xc420053f50 pc=0x4512ef\nruntime.main()\n /usr/local/go/src/runtime/proc.go:185 +0x20d fp=0xc420053fe0 sp=0xc420053f80 pc=0x424bad\nruntime.goexit()\n /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc420053fe8 sp=0xc420053fe0 pc=0x44b4d1\n\ngoroutine 2 [force gc (idle)]:\nruntime.gopark(0x4739b8, 0x4ad720, 0x47001e, 0xf, 0x14, 0x1)\n /usr/local/go/src/runtime/proc.go:280 +0x12c fp=0xc42003e768 sp=0xc42003e738 pc=0x42503c\nruntime.goparkunlock(0x4ad720, 0x47001e, 0xf, 0xc420000114, 0x1)\n /usr/local/go/src/runtime/proc.go:286 +0x5e fp=0xc42003e7a8 sp=0xc42003e768 pc=0x42512e\nruntime.forcegchelper()\n /usr/local/go/src/runtime/proc.go:238 +0xcc fp=0xc42003e7e0 sp=0xc42003e7a8 pc=0x424e5c\nruntime.goexit()\n /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc42003e7e8 sp=0xc42003e7e0 pc=0x44b4d1\ncreated by runtime.init.4\n /usr/local/go/src/runtime/proc.go:227 +0x35\n\ngoroutine 3 [GC sweep wait]:\nruntime.gopark(0x4739b8, 0x4ad7e0, 0x46fdd2, 0xd, 0x419914, 0x1)\n /usr/local/go/src/runtime/proc.go:280 +0x12c fp=0xc42003ef60 sp=0xc42003ef30 pc=0x42503c\nruntime.goparkunlock(0x4ad7e0, 0x46fdd2, 0xd, 0x14, 0x1)\n /usr/local/go/src/runtime/proc.go:286 +0x5e fp=0xc42003efa0 sp=0xc42003ef60 pc=0x42512e\nruntime.bgsweep(0xc42001e150)\n /usr/local/go/src/runtime/mgcsweep.go:52 +0xa3 fp=0xc42003efd8 sp=0xc42003efa0 pc=0x419973\nruntime.goexit()\n /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc42003efe0 sp=0xc42003efd8 pc=0x44b4d1\ncreated by runtime.gcenable\n /usr/local/go/src/runtime/mgc.go:216 +0x58", "container_id": "xxxxxx-xxxxxx", "container_name": "app", "source": "stdout", "ecs_cluster": "default", "ecs_task_arn": "arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task/default/xxxxxx", "ecs_task_definition": "firelens-example-multiline:2" }Cuplikan log berikut menunjukkan bagaimana peristiwa yang sama muncul jika Anda menjalankan wadah ECS yang tidak dikonfigurasi untuk menggabungkan pesan log multiline. Bidang log berisi satu baris.
{ "log": "panic: my panic", "container_id": "xxxxxx-xxxxxx", "container_name": "app", "source": "stdout", "ecs_cluster": "default", "ecs_task_arn": "arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task/default/xxxxxx", "ecs_task_definition": "firelens-example-multiline:3"
catatan
Jika log Anda masuk ke file log alih-alih output standar, kami sarankan untuk menentukan parameter multiline.parser dan multiline.key_content konfigurasi di plugin input Tail