Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Log Lambda API
penting
Telemetri Lambda menggantikan Lambda API Log. API Meskipun Log API tetap berfungsi penuh, kami sarankan hanya menggunakan Telemetri API ke depan. Anda dapat berlangganan ekstensi Anda ke aliran telemetri menggunakan Telemetri API atau Log. API Setelah berlangganan menggunakan salah satu dari iniAPIs, setiap upaya untuk berlangganan menggunakan yang lain API mengembalikan kesalahan.
Lambda secara otomatis menangkap log runtime dan mengalirkannya ke Amazon. CloudWatch Aliran log ini berisi log yang dibuat oleh kode fungsi dan ekstensi Anda, dan juga log yang dibuat oleh Lambda sebagai bagian dari invokasi fungsi.
Ekstensi Lambda dapat menggunakan Lambda Runtime Logs API untuk berlangganan streaming log langsung dari dalam lingkungan eksekusi Lambda. Lambda mengalirkan log ke ekstensi, dan ekstensi kemudian dapat memproses, memfilter, dan mengirim log ke tujuan yang diinginkan.
Log API memungkinkan ekstensi untuk berlangganan tiga aliran log yang berbeda:
Log fungsi yang dibuat oleh fungsi Lambda dan ditulis ke
stdout
ataustderr
.Log ekstensi yang dibuat kode ekstensi.
Log platform Lambda, yang mencatat peristiwa dan kesalahan yang terkait dengan invokasi dan ekstensi.
catatan
Lambda mengirimkan semua log ke CloudWatch, bahkan ketika ekstensi berlangganan ke satu atau beberapa aliran log.
Topik
Berlangganan untuk menerima log
Ekstensi Lambda dapat berlangganan untuk menerima log dengan mengirimkan permintaan berlangganan ke Log. API
Untuk berlangganan guna menerima log, Anda memerlukan pengidentifikasi ekstensi (Lambda-Extension-Identifier
). Pertama, daftarkan ekstensi untuk menerima pengidentifikasi ekstensi. Kemudian berlangganan Log API selama inisialisasi. Setelah fase inisialisasi selesai, Lambda tidak memproses permintaan langganan.
catatan
APILangganan log idempoten. Permintaan berlangganan duplikat tidak menghasilkan langganan duplikat.
Penggunaan memori
Penggunaan memori meningkat secara linear seiring bertambahnya jumlah pelanggan. Langganan menghabiskan sumber daya memori karena setiap langganan membuka buffer memori baru untuk menyimpan log. Untuk membantu mengoptimalkan penggunaan memori, Anda dapat menyesuaikan konfigurasi buffering. Penggunaan memori buffer dihitung untuk konsumsi memori keseluruhan dalam lingkungan eksekusi.
Protokol tujuan
Anda dapat memilih salah satu protokol berikut untuk menerima log:
-
HTTP(disarankan) - Lambda mengirimkan log ke HTTP titik akhir lokal (
http://sandbox.localdomain:${PORT}/${PATH}
) sebagai larik catatan dalam format. JSON Parameter$PATH
bersifat opsional. Perhatikan bahwa hanya HTTP didukung, tidakHTTPS. Anda dapat memilih untuk menerima log melalui PUT atauPOST. -
TCP— Lambda mengirimkan log ke TCP port dalam format Newline JSON delimited
(). NDJSON
Kami merekomendasikan menggunakan HTTP daripadaTCP. DenganTCP, platform Lambda tidak dapat mengakui kapan mengirimkan log ke lapisan aplikasi. Oleh karena itu, Anda mungkin kehilangan log jika ekstensi Anda mengalami crash. HTTPtidak berbagi batasan ini.
Kami juga menyarankan untuk menyiapkan HTTP listener lokal atau TCP port sebelum berlangganan untuk menerima log. Selama penyetelan, perhatikan hal berikut ini:
-
Lambda hanya mengirimkan log ke tujuan yang berada di lingkungan eksekusi.
-
Lambda mencoba kembali upaya untuk mengirim log (dengan backoff) jika tidak ada pendengar, atau jika permintaan atau menghasilkan kesalahanPOST. PUT Jika pelanggan log mengalami crahs, pelanggam terus menerima log setelah Lambda memulai ulang lingkungan eksekusi.
-
Lambda mencadangkan port 9001. Tidak ada pembatasan atau rekomendasi nomor port lainnya.
Konfigurasi buffering
Lambda dapat mem-buffer log dan mengirimkannya kepada pelanggan. Anda dapat mengonfigurasi perilaku ini dalam permintaan langganan dengan menentukan bidang opsional berikut. Perhatikan bahwa Lambda menggunakan nilai default untuk setiap bidang yang tidak Anda tentukan.
timeoutMs— Waktu maksimum (dalam milidetik) untuk buffer batch. Default: 1.000. Minimum: 25. Maksimum: 30.000.
maxBytes— Ukuran maksimum (dalam byte) dari log untuk buffer dalam memori. Default: 262.144. Minimum: 262.144. Maksimum: 1.048.576.
maxItems— Jumlah maksimum peristiwa untuk buffer dalam memori. Default: 10.000. Minimum: 1.000. Maksimum: 10.000.
Selama konfigurasi buffering, perhatikan poin-poin berikut:
Lambda membilas log jika salah satu aliran input tertutup, misalnya, jika waktu pengoperasian macet.
Setiap pelanggan dapat menentukan konfigurasi buffering yang berbeda dalam permintaan langganan.
Pertimbangkan ukuran buffer yang Anda butuhkan untuk membaca data. Perkirakan penerimaan muatan sebesar
2*maxBytes+metadata
, denganmaxBytes
dikonfigurasi dalam permintaan berlangganan. Misalnya, Lambda menambahkan byte metadata berikut ke setiap catatan:{ "time": "2020-08-20T12:31:32.123Z", "type": "function", "record": "Hello World" }
Jika pelanggan tidak dapat memproses log masuk dengan cukup cepat, Lambda mungkin akan menanggalkan log untuk menjaga pemanfaatan memori tetap terikat. Untuk menunjukkan jumlah catatan yang dihapus, Lambda mengirimkan log
platform.logsDropped
. Untuk informasi selengkapnya, lihat Lambda: Tidak semua log fungsi saya muncul.
Contoh berlangganan
Contoh berikut menunjukkan permintaan untuk berlangganan ke platform dan log fungsi.
PUT http://${AWS_LAMBDA_RUNTIME_API}/2020-08-15/logs HTTP/1.1 { "schemaVersion": "2020-08-15", "types": [ "platform", "function" ], "buffering": { "maxItems": 1000, "maxBytes": 262144, "timeoutMs": 100 }, "destination": { "protocol": "HTTP", "URI": "http://sandbox.localdomain:8080/lambda_logs" } }
Jika permintaan berhasil, pelanggan menerima respons sukses HTTP 200.
HTTP/1.1 200 OK "OK"
Contoh kode untuk Log API
Untuk kode contoh yang menunjukkan cara mengirim log ke tujuan kustom, lihat Menggunakan AWS Lambda ekstensi untuk mengirim log ke tujuan khusus
Untuk contoh kode Python dan Go yang menunjukkan cara mengembangkan ekstensi Lambda dasar dan berlangganan LogAPI, lihat AWS Lambda Ekstensi
APIReferensi log
Anda dapat mengambil API titik akhir Log dari variabel AWS_LAMBDA_RUNTIME_API
lingkungan. Untuk mengirim API permintaan, gunakan awalan 2020-08-15/
sebelum API jalur. Sebagai contoh:
http://${AWS_LAMBDA_RUNTIME_API}/2020-08-15/logs
APISpesifikasi Terbuka untuk API versi Log 2020-08-15 tersedia di sini: .zip logs-api-request
Langganan
Untuk berlangganan satu atau beberapa aliran log yang tersedia di lingkungan eksekusi Lambda, ekstensi mengirimkan permintaan BerlanggananAPI.
Jalur – /logs
Metode - PUT
Parameter tubuh
destination
– Lihat Protokol tujuan. Wajib: ya. Jenis: string.
buffering
– Lihat Konfigurasi buffering. Wajib: tidak. Jenis: string.
types
– Array jenis log yang akan diterima. Wajib: ya. Jenis: array string. Nilai valid: "platform", "function", "extension".
schemaVersion
– Wajib: tidak. Nilai default: "2020-08-15". Atur ke "2021-03-18" untuk ekstensi untuk menerima pesan platform.runtimeDone.
Parameter respons
APISpesifikasi Terbuka untuk respons langganan versi 2020-08-15 tersedia untuk HTTP dan TCP protokol:
Kode respons
-
200 – Permintaan berhasil diselesaikan
-
202 – Permintaan diterima. Respons terhadap permintaan berlangganan selama pengujian lokal.
-
4XX – Permintaan Buruk
-
500 – Kesalahan Layanan
Jika permintaan berhasil, pelanggan menerima respons sukses HTTP 200.
HTTP/1.1 200 OK "OK"
Jika permintaan gagal, pelanggan akan menerima respons kesalahan. Sebagai contoh:
HTTP/1.1 400 OK { "errorType": "Logs.ValidationError", "errorMessage": URI port is not provided; types should not be empty" }
Log pesan
Log API memungkinkan ekstensi untuk berlangganan tiga aliran log yang berbeda:
Fungsi –Log dibuat oleh fungsi Lambda dan menulis ke
stdout
ataustderr
.Ekstenso – Log yang dibuat kode ekstensi.
Platform –Log yang dibuat platform runtime, yang mencatat peristiwa dan kesalahan yang terkait dengan invokasi dan ekstensi.
Log fungsi
Fungsi Lambda dan ekstensi internal yang menghasilkan log fungsi dan menuliskannya ke stdout
atau stderr
.
Contoh berikut menunjukkan format pesan log fungsi. {“time”: “2020-08-20T 12:31:32.123 Z”, “type”: “function”, “record”: "ditemui. ERROR Stack trace:\n\my-function (line 10)\n" }
Log ekstensi:
Ekstensi dapat menghasilkan log ekstensi. Format log sama seperti untuk log fungsi.
Log platform
Lambda menghasilkan pesan log untuk peristiwa platform seperti platform.start
, platform.end
, dan platform.fault
.
Secara opsional, Anda dapat berlangganan API skema Log versi 2021-03-18, yang menyertakan pesan log. platform.runtimeDone
Contoh pesan log platform
Contoh berikut menunjukkan log awal platform dan akhir platform. Log ini menunjukkan waktu mulai pemanggilan dan waktu akhir pemanggilan untuk pemanggilan yang ditentukan. requestId
{ "time": "2020-08-20T12:31:32.123Z", "type": "platform.start", "record": {"requestId": "6f7f0961f83442118a7af6fe80b88d56"} } { "time": "2020-08-20T12:31:32.123Z", "type": "platform.end", "record": {"requestId": "6f7f0961f83442118a7af6fe80b88d56"} }
Platform. initRuntimeDonepesan log menunjukkan status Runtime init
sub-fase, yang merupakan bagian dari fase lifecyle Init. Runtime init
Kapan berhasil, runtime mengirimkan API permintaan /next
runtime (untuk tipe on-demand
dan provisioned-concurrency
inisialisasi) atau restore/next
(untuk tipe snap-start
inisialisasi). Contoh berikut menunjukkan platform yang sukses. initRuntimeDonepesan log untuk jenis snap-start
inisialisasi.
{ "time":"2022-07-17T18:41:57.083Z", "type":"platform.initRuntimeDone", "record":{ "initializationType":"snap-start", "status":"success" } }
Platform. initReportpesan log menunjukkan berapa lama Init
fase berlangsung dan berapa milidetik Anda ditagih selama fase ini. Ketika jenis inisialisasiprovisioned-concurrency
, Lambda mengirimkan pesan ini selama pemanggilan. Saat jenis inisialisasisnap-start
, Lambda mengirimkan pesan ini setelah memulihkan snapshot. Contoh berikut menunjukkan platform. initReportpesan log untuk jenis snap-start
inisialisasi.
{ "time":"2022-07-17T18:41:57.083Z", "type":"platform.initReport", "record":{ "initializationType":"snap-start", "metrics":{ "durationMs":731.79, "billedDurationMs":732 } } }
Log laporan platform menyertakan metrik tentang pemanggilan yang ditentukan. requestId Bidang initDurationMs
termasuk dalam log hanya jika invokasi termasuk mulai awal. Jika pelacakan AWS X-Ray aktif, log mencakup metadata X-Ray. Contoh berikut menunjukkan log laporan platform untuk invokasi yang mencakup mulai awal.
{ "time": "2020-08-20T12:31:32.123Z", "type": "platform.report", "record": {"requestId": "6f7f0961f83442118a7af6fe80b88d56", "metrics": {"durationMs": 101.51, "billedDurationMs": 300, "memorySizeMB": 512, "maxMemoryUsedMB": 33, "initDurationMs": 116.67 } } }
Log kesalahan platform menangkap waktu pengoperasian atau kesalahan lingkungan eksekusi. Contoh berikut ini menunjukkan pesan log kesalahan platform.
{ "time": "2020-08-20T12:31:32.123Z", "type": "platform.fault", "record": "RequestId: d783b35e-a91d-4251-af17-035953428a2c Process exited before completing request" }
catatan
AWS saat ini menerapkan perubahan pada layanan Lambda. Karena perubahan ini, Anda mungkin melihat perbedaan kecil antara struktur dan konten pesan log sistem dan segmen jejak yang dipancarkan oleh fungsi Lambda yang berbeda di Anda. Akun AWS
Salah satu output log yang terpengaruh oleh perubahan ini adalah "record"
bidang log kesalahan platform. Contoh berikut menunjukkan "record"
bidang ilustrasi dalam format lama dan baru. Gaya baru log kesalahan berisi pesan yang lebih ringkas
Perubahan ini akan diterapkan selama beberapa minggu mendatang, dan semua fungsi di semua Wilayah AWS kecuali China dan GovCloud wilayah akan bertransisi untuk menggunakan pesan log format baru dan segmen pelacakan.
contoh catatan log kesalahan platform (gaya lama)
"record":"RequestId: ...\tError: Runtime exited with error: exit status 255\nRuntime.ExitError"
contoh catatan log kesalahan platform (gaya baru)
"record":"RequestId: ... Status: error\tErrorType: Runtime.ExitError"
Lambda menghasilkan log ekstensi platform saat ekstensi mendaftar dengan ekstensi. API Contoh berikut ini menunjukkan pesan ekstensi platform.
{ "time": "2020-08-20T12:31:32.123Z", "type": "platform.extension", "record": {"name": "Foo.bar", "state": "Ready", "events": ["INVOKE", "SHUTDOWN"] } }
Lambda menghasilkan log langganan log platform saat ekstensi berlangganan log. API Contoh berikut menunjukkan pesan langganan Log.
{ "time": "2020-08-20T12:31:32.123Z", "type": "platform.logsSubscription", "record": {"name": "Foo.bar", "state": "Subscribed", "types": ["function", "platform"], } }
Lambda menghasilkan log yang dihapus log platform ketika ekstensi tidak dapat memproses jumlah log yang diterimanya. Contoh berikut menunjukkan pesan log platform.logsDropped
.
{ "time": "2020-08-20T12:31:32.123Z", "type": "platform.logsDropped", "record": {"reason": "Consumer seems to have fallen behind as it has not acknowledged receipt of logs.", "droppedRecords": 123, "droppedBytes" 12345 } }
Platform. restoreStartpesan log menunjukkan waktu Restore
fase dimulai (hanya jenis snap-start
inisialisasi). Contoh:
{ "time":"2022-07-17T18:43:44.782Z", "type":"platform.restoreStart", "record":{} }
Platform. restoreReportpesan log menunjukkan berapa lama Restore
fase berlangsung dan berapa milidetik Anda ditagih selama fase ini (hanya jenis snap-start
inisialisasi). Contoh:
{ "time":"2022-07-17T18:43:45.936Z", "type":"platform.restoreReport", "record":{ "metrics":{ "durationMs":70.87, "billedDurationMs":13 } } }
Pesan runtimeDone
platform
Jika Anda mengatur versi skema ke "2021-03-18" dalam permintaan berlangganan, Lambda mengirimkan pesan platform.runtimeDone
setelah fungsi invokasi selesai baik berhasil maupun dengan kesalahan. Ekstensi dapat menggunakan pesan ini untuk menghentikan semua kumpulan telemetri untuk fungsi invokasi ini.
Lambda menghasilkan pesan platform.runtimeDone
log saat runtime mengirim permintaan Next
atau Error
runtime. API platform.runtimeDone
Log menginformasikan konsumen tentang Log API bahwa pemanggilan fungsi selesai. Ekstensi dapat menggunakan informasi ini untuk memutuskan kapan harus mengirim semua telemetri yang dikumpulkan selama invokasi tersebut.
Contoh
Lambda mengirimkan platform.runtimeDone
pesan setelah runtime mengirimkan NEXT permintaan saat pemanggilan fungsi selesai. Contoh berikut menunjukkan pesan untuk masing-masing nilai status: sukses, kegagalan, dan waktu habis.
contoh Contoh pesan sukses
{ "time": "2021-02-04T20:00:05.123Z", "type": "platform.runtimeDone", "record": { "requestId":"6f7f0961f83442118a7af6fe80b88", "status": "success" } }
contoh Contoh pesan kegagalan
{ "time": "2021-02-04T20:00:05.123Z", "type": "platform.runtimeDone", "record": { "requestId":"6f7f0961f83442118a7af6fe80b88", "status": "failure" } }
contoh Contoh pesan waktu habis
{ "time": "2021-02-04T20:00:05.123Z", "type": "platform.runtimeDone", "record": { "requestId":"6f7f0961f83442118a7af6fe80b88", "status": "timeout" } }
contoh Contoh platform. restoreRuntimeDone pesan (hanya jenis snap-start
inisialisasi)
Platform. restoreRuntimeDonepesan log menunjukkan apakah Restore
fase berhasil atau tidak. Lambda mengirimkan pesan ini saat runtime mengirimkan permintaan runtime. restore/next
API Ada tiga kemungkinan status: sukses, gagal, dan batas waktu. Contoh berikut menunjukkan platform yang sukses. restoreRuntimeDonepesan log.
{ "time":"2022-07-17T18:43:45.936Z", "type":"platform.restoreRuntimeDone", "record":{ "status":"success" } }