Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
penting
API Telemetri Lambda menggantikan API Lambda Logs. Meskipun API Log tetap berfungsi penuh, kami sarankan hanya menggunakan API Telemetri di masa mendatang. Anda dapat berlangganan ekstensi Anda ke aliran telemetri menggunakan API Telemetri atau API Log. Setelah berlangganan menggunakan salah satu dari ini APIs, setiap upaya untuk berlangganan menggunakan API lain 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 API Lambda Runtime Logs untuk berlangganan aliran log langsung dari lingkungan eksekusi Lambda. Lambda mengalirkan log ke ekstensi, dan ekstensi kemudian dapat memproses, memfilter, dan mengirim log ke tujuan yang diinginkan.

API Log memungkinkan ekstensi untuk berlangganan ke 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 mengirim permintaan langganan ke API Log.
Untuk berlangganan guna menerima log, Anda memerlukan pengidentifikasi ekstensi (Lambda-Extension-Identifier
). Pertama, daftarkan ekstensi untuk menerima pengidentifikasi ekstensi. Kemudian berlangganan API Log selama inisialisasi. Setelah fase inisialisasi selesai, Lambda tidak memproses permintaan langganan.
catatan
Berlangganan Log API adalah 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 titik akhir HTTP lokal (
http://sandbox.localdomain:${PORT}/${PATH}
) sebagai array catatan dalam format JSON. Parameter$PATH
bersifat opsional. Perhatikan bahwa hanya HTTP yang didukung, bukan HTTPS. Anda dapat memilih untuk menerima log melalui PUT atau POST. -
TCP – Lambda mengirimkan log ke port TCP dalam format JSON berbatas baris baru (NDJSON)
.
Kami menyarankan Anda untuk menggunakan HTTP alih-alih TCP. Dengan TCP, platform Lambda tidak dapat mengakui bahwa log dikirimkan ke lapisan aplikasi. Oleh karena itu, Anda mungkin kehilangan log jika ekstensi Anda mengalami crash. HTTP tidak berbagi batasan ini.
Kami juga menyarankan Anda untuk mengatur pendengar HTTP lokal atau port TCP sebelum berlangganan untuk menerima log. Selama penyetelan, perhatikan hal berikut ini:
-
Lambda hanya mengirimkan log ke tujuan yang berada di lingkungan eksekusi.
-
Lambda mengulang upaya untuk mengirim log (dengan pemunduran) jika tidak ada pendengar, atau jika permintaan POST atau PUT mengakibatkan kesalahan. 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 mem-buffer batch. Default: 1.000. Minimum: 25. Maksimum: 30.000.
maxBytes – Ukuran maksimum (dalam byte) 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 akan menerima respons keberhasilan HTTP 200.
HTTP/1.1 200 OK
"OK"
Kode sampel untuk API Log
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 API Log, lihat AWS Lambda Ekstensi
Referensi API Log
Anda dapat mengambil titik akhir API Log dari variabel lingkungan AWS_LAMBDA_RUNTIME_API
. Untuk mengirim permintaan API, gunakan prefiks 2020-08-15/
sebelum jalur API. Sebagai contoh:
http://${AWS_LAMBDA_RUNTIME_API}/2020-08-15/logs
Spesifikasi OpenAPI untuk Logs API versi 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 akan mengirim permintaan API Berlangganan.
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
Spesifikasi OpenAPI untuk respons langganan versi 2020-08-15 tersedia untuk protokol HTTP dan TCP:
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 akan menerima respons keberhasilan 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
API Log memungkinkan ekstensi untuk berlangganan ke 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-20T12:31:32.123Z", "type": "function", "record": "ERROR encountered. 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
.
Atau, Anda dapat berlangganan ke versi 2021-03-18skema API Log, yang mencakup pesan log platform.runtimeDone
.
Contoh pesan log platform
Contoh berikut menunjukkan log awal platform dan akhir platform. Log ini menunjukkan waktu mulai invokasi dan waktu berakhir invokasi untuk pemanggilan yang ditentukan oleh 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 permintaan API /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"
}
}
Pesan log Platform.initReport 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 pesan log Platform.initReport untuk jenis inisialisasi. snap-start
{
"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 invokasi yang ditentukan oleh 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 pelacakan 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 GovCloud dan 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 membuat log ekstensi platform ketika ekstensi mendaftar dengan API ekstensi. 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 API log. 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
}
}
Pesan log Platform.RestoRestart menunjukkan waktu Restore
fase dimulai (snap-start
hanya jenis inisialisasi). Contoh:
{
"time":"2022-07-17T18:43:44.782Z",
"type":"platform.restoreStart",
"record":{}
}
Pesan log Platform.RestoreReport menunjukkan berapa lama Restore
fase berlangsung dan berapa milidetik Anda ditagih selama fase ini (hanya jenis inisialisasi). snap-start
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.
Spesifikasi OpenAPI untuk tipe peristiwa Log dalam versi skema 2021-03-18 tersedia di sini: schema-2021-03-18.zip
Lambda menghasilkan pesan log platform.runtimeDone
ketika runtime mengirimkan permintaan API runtime Next
atau Error
. Log platform.runtimeDone
memberi tahu konsumen API Log bahwa fungsi invokasi selesai. Ekstensi dapat menggunakan informasi ini untuk memutuskan kapan harus mengirim semua telemetri yang dikumpulkan selama invokasi tersebut.
Contoh
Lambda mengirimkan pesan platform.runtimeDone
setelah runtime mengirimkan permintaan NEXT ketika fungsi invokasi 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 API restore/next
runtime. 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"
}
}