View a markdown version of this page

Melihat CloudWatch log untuk fungsi Lambda - AWS Lambda

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

Melihat CloudWatch log untuk fungsi Lambda

Anda dapat melihat CloudWatch log Amazon untuk fungsi Lambda menggunakan konsol Lambda, CloudWatch konsol, atau AWS Command Line Interface ()AWS CLI. Ikuti petunjuk di bagian berikut untuk mengakses log fungsi Anda.

Streaming log fungsi dengan CloudWatch Logs Live Tail

Amazon CloudWatch Logs Live Tail membantu Anda memecahkan masalah fungsi dengan cepat dengan menampilkan daftar streaming peristiwa log baru langsung di konsol Lambda. Anda dapat melihat dan memfilter log yang dicerna dari fungsi Lambda Anda secara real time, membantu Anda mendeteksi dan menyelesaikan masalah dengan cepat.

catatan

Sesi Live Tail dikenakan biaya berdasarkan waktu penggunaan sesi, per menit. Untuk informasi selengkapnya tentang harga, lihat CloudWatch Harga Amazon.

Membandingkan Live Tail dan --log-type Tail

Ada beberapa perbedaan antara CloudWatch Logs Live Tail dan opsi LogType: Tail di Lambda API (--log-type Taildi AWS CLI):

  • --log-type Tailmengembalikan hanya 4 KB pertama dari log pemanggilan. Live Tail tidak berbagi batas ini, dan dapat menerima hingga 500 peristiwa log per detik.

  • --log-type Tailmenangkap dan mengirim log dengan respons, yang dapat memengaruhi latensi respons fungsi. Live Tail tidak mempengaruhi latensi respons fungsi.

  • --log-type Tailmendukung pemanggilan sinkron saja. Live Tail berfungsi untuk pemanggilan sinkron dan asinkron.

catatan

Instans Terkelola Lambda tidak mendukung --log-type Tail opsi ini. Gunakan CloudWatch Log Live Tail atau query Log CloudWatch secara langsung untuk melihat log untuk fungsi Instans Terkelola.

Izin

Izin berikut diperlukan untuk memulai dan menghentikan sesi Log CloudWatch s Live Tail:

  • logs:DescribeLogGroups

  • logs:StartLiveTail

  • logs:StopLiveTail

Memulai sesi Live Tail di konsol Lambda

  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih nama fungsi.

  3. Pilih tab Uji.

  4. Di panel U ji acara, pilih CloudWatch Logs Live Tail.

  5. Untuk Pilih grup log, grup log fungsi dipilih secara default. Anda dapat memilih hingga lima grup log sekaligus.

  6. (Opsional) Untuk menampilkan hanya peristiwa log yang berisi kata-kata tertentu atau string lain, masukkan kata atau string di kotak Tambah pola filter. Bidang filter peka huruf besar/kecil. Anda dapat menyertakan beberapa istilah dan operator pola dalam bidang ini, termasuk ekspresi reguler (regex). Untuk informasi selengkapnya tentang sintaks pola, lihat Sintaks pola filter. di Panduan CloudWatch Pengguna Amazon Logs.

  7. Pilih Mulai. Peristiwa log yang cocok mulai muncul di jendela.

  8. Untuk menghentikan sesi Live Tail, pilih Stop.

    catatan

    Sesi Live Tail secara otomatis berhenti setelah 15 menit tidak aktif atau saat sesi konsol Lambda habis waktu.

Akses log fungsi menggunakan konsol

  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih fungsi.

  3. Pilih tab Pantau.

  4. Pilih Lihat CloudWatch log untuk membuka CloudWatch konsol.

  5. Gulir ke bawah dan pilih aliran Log untuk pemanggilan fungsi yang ingin Anda lihat.

    Daftar aliran log untuk fungsi Lambda.

Setiap instance fungsi Lambda memiliki aliran log khusus. Jika fungsi ditingkatkan, setiap instance bersamaan memiliki aliran lognya sendiri. Setiap kali lingkungan eksekusi baru dibuat sebagai respons terhadap pemanggilan, ini menghasilkan aliran log baru. Konvensi penamaan untuk aliran log adalah:

YYYY/MM/DD[Function version][Execution environment GUID]

Lingkungan eksekusi tunggal menulis ke aliran log yang sama selama masa pakainya. Aliran log berisi pesan dari lingkungan eksekusi itu dan juga keluaran apa pun dari kode fungsi Lambda Anda. Setiap pesan diberi stempel waktu, termasuk log kustom Anda. Bahkan jika fungsi Anda tidak mencatat output apa pun dari kode Anda, ada tiga pernyataan log minimal yang dihasilkan per pemanggilan (START, END dan REPORT):

CloudWatch aliran log yang menunjukkan baris START, END, dan REPORT untuk pemanggilan fungsi Lambda.

Log ini menunjukkan:

  • RequestId— ini adalah ID unik yang dihasilkan per permintaan. Jika fungsi Lambda mencoba kembali permintaan, ID ini tidak berubah dan muncul di log untuk setiap percobaan ulang berikutnya.

  • Start/End— ini menandai satu pemanggilan, jadi setiap baris log di antara ini termasuk dalam pemanggilan yang sama.

  • Durasi — total waktu pemanggilan untuk fungsi handler, tidak termasuk INIT kode.

  • Durasi Tagihan — menerapkan logika pembulatan untuk tujuan penagihan.

  • Ukuran memori — jumlah memori yang dialokasikan untuk fungsi.

  • Memori Maks yang Digunakan — jumlah maksimum memori yang digunakan selama pemanggilan.

  • Durasi Init — waktu yang dibutuhkan untuk menjalankan INIT bagian kode, di luar handler utama.

Akses log dengan AWS CLI

Ini AWS CLI adalah alat sumber terbuka yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki AWS CLI versi 2.

Anda dapat menggunakan AWS CLI untuk mengambil log untuk invokasi menggunakan opsi perintah --log-type. Respons berisi bidang LogResult yang memuat hingga 4 KB log berkode base64 dari invokasi.

contoh mengambil ID log

Contoh berikut menunjukkan cara mengambil ID log dari LogResult untuk fungsi bernama my-function.

aws lambda invoke --function-name my-function out --log-type Tail

Anda akan melihat output berikut:

{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
contoh mendekode log

Pada prompt perintah yang sama, gunakan utilitas base64 untuk mendekodekan log. Contoh berikut menunjukkan cara mengambil log berkode base64 untuk my-function.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2.

Anda akan melihat output berikut:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB

Utilitas base64 tersedia di Linux, macOS, dan Ubuntu pada Windows. Pengguna macOS mungkin harus menggunakan base64 -D.

contoh Skrip get-logs.sh

Pada prompt perintah yang sama, gunakan script berikut untuk mengunduh lima peristiwa log terakhir. Skrip menggunakan sed untuk menghapus kutipan dari file output, dan akan tidur selama 15 detik untuk memberikan waktu agar log tersedia. Output mencakup respons dari Lambda dan output dari perintah get-log-events.

Salin konten dari contoh kode berikut dan simpan dalam direktori proyek Lambda Anda sebagai get-logs.sh.

cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
contoh macOS dan Linux (khusus)

Dalam command prompt yang sama, pengguna macOS dan Linux mungkin perlu menjalankan perintah berikut untuk memastikan skrip dapat dieksekusi.

chmod -R 755 get-logs.sh
contoh mengambil lima log acara terakhir

Pada prompt perintah yang sama, gunakan skrip berikut untuk mendapatkan lima log acara terakhir.

./get-logs.sh

Anda akan melihat output berikut:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Parsing log dan logging terstruktur

Dengan CloudWatch Logs Insights, Anda dapat mencari dan menganalisis data log menggunakan sintaks kueri khusus. Ini melakukan kueri pada beberapa grup log dan menyediakan pemfilteran yang kuat menggunakan pencocokan pola glob dan ekspresi reguler.

Anda dapat memanfaatkan kemampuan ini dengan menerapkan logging terstruktur di fungsi Lambda Anda. Logging terstruktur mengatur log Anda ke dalam format yang telah ditentukan sebelumnya, sehingga lebih mudah untuk melakukan kueri. Menggunakan level log adalah langkah pertama yang penting dalam menghasilkan log ramah filter yang memisahkan pesan informasi dari peringatan atau kesalahan. Misalnya, pertimbangkan Node.js kode berikut:

exports.handler = async (event) => { console.log("console.log - Application is fine") console.info("console.info - This is the same as console.log") console.warn("console.warn - Application provides a warning") console.error("console.error - An error occurred") }

File CloudWatch log yang dihasilkan berisi bidang terpisah yang menentukan tingkat log:

CloudWatch entri log menunjukkan bidang tingkat log yang membedakan ERROR dari pesan INFO.

Kueri CloudWatch Logs Insights kemudian dapat memfilter pada tingkat log. Misalnya, untuk menanyakan kesalahan saja, Anda dapat menggunakan kueri berikut:

fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc

Logging terstruktur JSON

JSON umumnya digunakan untuk menyediakan struktur untuk log aplikasi. Dalam contoh berikut, log telah dikonversi ke JSON untuk menghasilkan tiga nilai yang berbeda:

CloudWatch entri log yang menunjukkan JSON-structured output dengan bidang berbeda untuk ukuran file, waktu unggah, dan jumlah pemanggilan.

Fitur CloudWatch Logs Insights secara otomatis menemukan nilai dalam output JSON dan mengurai pesan sebagai bidang, tanpa perlu glob kustom atau ekspresi reguler. Dengan menggunakan JSON-structured log, kueri berikut menemukan pemanggilan di mana file yang diunggah lebih besar dari 1 MB, waktu unggah lebih dari 1 detik, dan pemanggilan bukanlah awal yang dingin:

fields @message | filter @message like /INFO/ | filter uploadedBytes > 1000000 | filter uploadTimeMS > 1000 | filter invocation != 1

Kueri ini mungkin menghasilkan hasil sebagai berikut:

CloudWatch Hasil kueri Logs Wawasan difilter oleh bidang JSON yang menunjukkan entri log yang cocok.

Bidang yang ditemukan di JSON secara otomatis diisi di menu Bidang Ditemukan di sisi kanan. Bidang standar yang dipancarkan oleh layanan Lambda diawali dengan '@', dan Anda dapat menanyakan bidang ini dengan cara yang sama. Log Lambda selalu menyertakan bidang @timestamp, @logStream, @message, @requestId, @duration,, @billedDuration,MemoryUsed,. @type @max @memorySize Jika X-Ray diaktifkan untuk suatu fungsi, log juga menyertakan @xray TraceId dan @xraySegmentId.

Ketika sumber AWS peristiwa seperti Amazon S3, Amazon SQS, atau Amazon EventBridge memanggil fungsi Anda, seluruh peristiwa disediakan untuk fungsi sebagai input objek JSON. Dengan mencatat peristiwa ini di baris pertama fungsi, Anda kemudian dapat melakukan kueri pada salah satu bidang bersarang menggunakan CloudWatch Logs Insights.

Kueri Wawasan yang berguna

Tabel berikut menunjukkan contoh kueri Wawasan yang dapat berguna untuk memantau fungsi Lambda.

Deskripsi Contoh sintaks kueri

Kesalahan 100 Terakhir

 fields Timestamp, LogLevel, Message
 | filter LogLevel == "ERR"
 | sort @timestamp desc
 | limit 100

100 pemanggilan dengan tagihan tertinggi

filter @type = "REPORT"
| fields @requestId, @billedDuration
| sort by @billedDuration desc
| limit 100

Persentase start dingin dalam total pemanggilan

filter @type = "REPORT"
| stats sum(strcontains(@message, "Init Duration"))/count(*) * 100 as
  coldStartPct, avg(@duration)
  by bin(5m)

Laporan persentil durasi Lambda

filter @type = "REPORT"
| stats
    avg(@billedDuration) as Average,
    percentile(@billedDuration, 99) as NinetyNinth,
    percentile(@billedDuration, 95) as NinetyFifth,
    percentile(@billedDuration, 90) as Ninetieth
    by bin(30m)

Laporan persentil penggunaan memori Lambda

filter @type="REPORT"
| stats avg(@maxMemoryUsed/1024/1024) as mean_MemoryUsed,
    min(@maxMemoryUsed/1024/1024) as min_MemoryUsed,
    max(@maxMemoryUsed/1024/1024) as max_MemoryUsed,
    percentile(@maxMemoryUsed/1024/1024, 95) as Percentile95

Pemanggilan menggunakan 100% memori yang ditetapkan

filter @type = "REPORT" and @maxMemoryUsed=@memorySize
| stats
    count_distinct(@requestId)
    by bin(30m)

Memori rata-rata yang digunakan di seluruh pemanggilan

avgMemoryUsedPERC,
    avg(@billedDuration) as avgDurationMS
    by bin(5m)

Visualisasi statistik memori

filter @type = "REPORT"
| stats
    max(@maxMemoryUsed / 1024 / 1024) as maxMemMB,
    avg(@maxMemoryUsed / 1024 / 1024) as avgMemMB,
    min(@maxMemoryUsed / 1024 / 1024) as minMemMB,
    (avg(@maxMemoryUsed / 1024 / 1024) / max(@memorySize / 1024 / 1024)) * 100 as avgMemUsedPct,
    avg(@billedDuration) as avgDurationMS
    by bin(30m)

Pemanggilan di mana Lambda keluar

filter @message like /Process exited/
| stats count() by bin(30m)

Pemanggilan yang habis waktunya

filter @message like /Task timed out/
| stats count() by bin(30m)

Laporan latensi

filter @type = "REPORT"
| stats avg(@duration), max(@duration), min(@duration)
  by bin(5m)

Over-provisioned memori

filter @type = "REPORT"
| stats max(@memorySize / 1024 / 1024) as provisonedMemMB,
        min(@maxMemoryUsed / 1024 / 1024) as smallestMemReqMB,
        avg(@maxMemoryUsed / 1024 / 1024) as avgMemUsedMB,
        max(@maxMemoryUsed / 1024 / 1024) as maxMemUsedMB,
        provisonedMemMB - maxMemUsedMB as overProvisionedMB

Visualisasi log dan dasbor

Untuk kueri CloudWatch Logs Insights apa pun, Anda dapat mengekspor hasilnya ke format penurunan harga atau CSV. Dalam beberapa kasus, mungkin lebih berguna untuk membuat visualisasi dari kueri, asalkan ada setidaknya satu fungsi agregasi. Dengan stats fungsi ini, Anda dapat menentukan agregasi dan pengelompokan.

Contoh loginsightSJSON sebelumnya memfilter ukuran unggah dan waktu unggah dan mengecualikan pemanggilan pertama. Ini menghasilkan tabel data. Untuk memantau sistem produksi, mungkin lebih berguna untuk memvisualisasikan ukuran file minimum, maksimum, dan rata-rata untuk menemukan outlier. Untuk melakukan ini, terapkan fungsi statistik dengan agregat yang diperlukan, dan kelompokkan pada nilai waktu seperti setiap menit:

Misalnya, pertimbangkan kueri berikut. Ini adalah contoh kueri yang sama dari Logging terstruktur JSON bagian, tetapi dengan fungsi agregasi tambahan:

fields @message | filter @message like /INFO/ | filter uploadedBytes > 1000000 | filter uploadTimeMS > 1000 | filter invocation != 1 | stats min(uploadedBytes), avg(uploadedBytes), max(uploadedBytes) by bin (1m)

Kami menyertakan agregat ini karena mungkin lebih berguna untuk memvisualisasikan ukuran file minimum, maksimum, dan rata-rata untuk menemukan outlier. Anda dapat melihat hasilnya di tab Visualisasi:

CloudWatch Tab visualisasi Logs Insights menampilkan grafik deret waktu ukuran file minimum, rata-rata, dan maksimum.

Setelah Anda selesai membangun visualisasi, Anda dapat menambahkan grafik secara opsional ke CloudWatch dasbor. Untuk melakukan ini, pilih Tambahkan ke dasbor di atas visualisasi. Ini menambahkan kueri sebagai widget dan Anda dapat memilih interval penyegaran otomatis, sehingga lebih mudah untuk terus memantau hasilnya:

CloudWatch dasbor dengan widget kueri Logs Insights ditambahkan, menampilkan opsi Tambahkan ke dasbor.