Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan CloudWatch log Amazon dengan AWS Lambda
AWS Lambda secara otomatis memonitor fungsi Lambda atas nama Anda untuk membantu Anda memecahkan masalah kegagalan dalam fungsi Anda. Selama peran eksekusi fungsi Anda memiliki izin yang diperlukan, Lambda menangkap log untuk semua permintaan yang ditangani oleh fungsi Anda dan mengirimkannya ke Amazon Logs. CloudWatch
Anda dapat menyisipkan pernyataan log masuk ke kode Anda untuk membantu memvalidasi bahwa kode Anda berfungsi seperti yang diharapkan. Lambda secara otomatis terintegrasi dengan CloudWatch Log dan mengirimkan semua log dari kode Anda ke grup CloudWatch log yang terkait dengan fungsi Lambda.
Secara default, Lambda mengirimkan log ke grup log bernama. /aws/lambda/<function name>
Jika Anda ingin fungsi Anda mengirim log ke grup lain, Anda dapat mengonfigurasinya menggunakan konsol Lambda, AWS Command Line Interface (AWS CLI) atau API Lambda. Lihat Mengkonfigurasi grup CloudWatch log untuk mempelajari selengkapnya.
Anda dapat melihat log untuk fungsi Lambda menggunakan konsol Lambda, konsol, AWS Command Line Interface (AWS CLI), atau API. CloudWatch CloudWatch
catatan
Mungkin diperlukan 5 hingga 10 menit agar log muncul setelah pemanggilan fungsi.
Bagian
Prasyarat
Peran eksekusi Anda memerlukan izin untuk mengunggah log ke CloudWatch Log. Anda dapat menambahkan izin CloudWatch Log menggunakan kebijakan AWSLambdaBasicExecutionRole
AWS terkelola yang disediakan oleh Lambda. Untuk menambahkan kebijakan ini ke peran Anda, jalankan perintah berikut:
aws iam attach-role-policy --role-name your-role
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Untuk informasi selengkapnya, lihat Bekerja dengan kebijakan AWS terkelola dalam peran eksekusi.
Harga
Tidak ada biaya tambahan untuk menggunakan log Lambda; namun, biaya CloudWatch Log standar berlaku. Untuk informasi lebih lanjut, lihat CloudWatch harga.
Mengonfigurasi kontrol logging lanjutan untuk fungsi Lambda Anda
Untuk memberi Anda kontrol lebih besar atas bagaimana log fungsi Anda ditangkap, diproses, dan dikonsumsi, Lambda menawarkan opsi konfigurasi logging berikut:
-
Format log - pilih antara teks biasa dan format JSON terstruktur untuk log fungsi Anda
-
Tingkat log - untuk log terstruktur JSON, pilih tingkat detail log yang dikirim CloudWatch Lambda, seperti ERROR, DEBUG, atau INFO
-
Grup log - pilih grup CloudWatch log fungsi Anda mengirim log ke
Mengkonfigurasi JSON dan format log teks biasa
Menangkap output log Anda sebagai pasangan nilai kunci JSON membuatnya lebih mudah untuk mencari dan memfilter saat men-debug fungsi Anda. Dengan log berformat JSON, Anda juga dapat menambahkan tag dan informasi kontekstual ke log Anda. Ini dapat membantu Anda melakukan analisis otomatis volume besar data log. Kecuali alur kerja pengembangan Anda bergantung pada alat yang ada yang menggunakan log Lambda dalam teks biasa, kami sarankan Anda memilih JSON untuk format log Anda.
Untuk semua runtime terkelola Lambda, Anda dapat memilih apakah log sistem fungsi Anda dikirim ke CloudWatch Log dalam teks biasa yang tidak terstruktur atau format JSON. Log sistem adalah log yang dihasilkan Lambda dan kadang-kadang dikenal sebagai log peristiwa platform.
Untuk runtime yang didukung, saat Anda menggunakan salah satu metode logging bawaan yang didukung, Lambda juga dapat menampilkan log aplikasi fungsi Anda (log yang dihasilkan kode fungsi Anda) dalam format JSON terstruktur. Saat Anda mengonfigurasi format log fungsi Anda untuk runtime ini, konfigurasi yang Anda pilih berlaku untuk log sistem dan aplikasi.
Untuk runtime yang didukung, jika fungsi Anda menggunakan pustaka atau metode logging yang didukung, Anda tidak perlu membuat perubahan apa pun pada kode yang ada untuk Lambda untuk menangkap log di JSON terstruktur.
catatan
Menggunakan pemformatan log JSON menambahkan metadata tambahan dan mengkodekan pesan log sebagai objek JSON yang berisi serangkaian pasangan nilai kunci. Karena itu, ukuran pesan log fungsi Anda dapat meningkat.
Runtime dan metode logging yang didukung
Lambda saat ini mendukung opsi untuk menampilkan log aplikasi terstruktur JSON untuk runtime berikut.
Waktu Aktif | Versi yang didukung |
---|---|
Java | Semua runtime Java kecuali Java 8 di Amazon Linux 1 |
Node.js | Node.js 16 dan yang lebih baru |
Python | Python 3.7 dan yang lebih baru |
Agar Lambda dapat mengirim log aplikasi fungsi Anda ke CloudWatch dalam format JSON terstruktur, fungsi Anda harus menggunakan alat logging bawaan berikut untuk mengeluarkan log:
-
Java -
LambdaLogger
logger atau log4j2. -
Node.js - Metode konsol
console.trace
,console.debug
,console.log
,console.info
,console.error
, danconsole.warn
-
Python - pustaka Python standar
logging
Untuk informasi selengkapnya tentang menggunakan kontrol logging lanjutan dengan runtime yang didukung, lihatAWS Lambda fungsi logging di Java,AWS Lambda fungsi login di Node.js, danAWS Lambda fungsi logging di Python.
Untuk runtime Lambda terkelola lainnya, Lambda saat ini hanya mendukung pengambilan log sistem dalam format JSON terstruktur. Namun, Anda masih dapat menangkap log aplikasi dalam format JSON terstruktur dalam runtime apa pun dengan menggunakan alat logging seperti Powertools untuk keluaran keluaran log AWS Lambda yang diformat JSON.
Format log default
Saat ini, format log default untuk semua runtime Lambda adalah teks biasa.
Jika Anda sudah menggunakan pustaka logging seperti Powertools AWS Lambda untuk menghasilkan log fungsi Anda dalam format terstruktur JSON, Anda tidak perlu mengubah kode Anda jika Anda memilih pemformatan log JSON. Lambda tidak menyandikan dua kali log apa pun yang sudah dikodekan JSON, sehingga log aplikasi fungsi Anda akan terus ditangkap seperti sebelumnya.
Format JSON untuk log sistem
Saat Anda mengonfigurasi format log fungsi Anda sebagai JSON, setiap item log sistem (peristiwa platform) ditangkap sebagai objek JSON yang berisi pasangan nilai kunci dengan kunci berikut:
-
"time"
- waktu pesan log dihasilkan -
"type"
- jenis acara yang dicatat -
"record"
- isi dari output log
Format "record"
nilai bervariasi sesuai dengan jenis peristiwa yang dicatat. Untuk mengetahui informasi selengkapnya, lihat Jenis objek API Event telemetri. Untuk informasi selengkapnya tentang tingkat log yang ditetapkan ke peristiwa log sistem, lihatPemetaan peristiwa tingkat log sistem.
Sebagai perbandingan, dua contoh berikut menunjukkan output log yang sama dalam format teks biasa dan JSON terstruktur. Perhatikan bahwa dalam kebanyakan kasus, peristiwa log sistem berisi lebih banyak informasi saat output dalam format JSON daripada saat output dalam teks biasa.
contoh teks biasa:
2023-03-13 18:56:24.046000 fbe8c1 INIT_START Runtime Version: python:3.9.v18 Runtime Version ARN: arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0
contoh JSON terstruktur:
{
"time": "2023-03-13T18:56:24.046Z",
"type": "platform.initStart",
"record": {
"initializationType": "on-demand",
"phase": "init",
"runtimeVersion": "python:3.9.v18",
"runtimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0"
}
}
catatan
API Telemetri LambdaSelalu memancarkan acara platform seperti START
dan REPORT
dalam format JSON. Mengonfigurasi format log sistem yang dikirim Lambda tidak memengaruhi perilaku API CloudWatch Telemetri Lambda.
Format JSON untuk log aplikasi
Saat Anda mengonfigurasi format log fungsi Anda sebagai JSON, keluaran log aplikasi yang ditulis menggunakan pustaka dan metode logging yang didukung ditangkap sebagai objek JSON yang berisi pasangan nilai kunci dengan kunci berikut.
-
"timestamp"
- waktu pesan log dihasilkan -
"level"
- tingkat log yang ditetapkan untuk pesan -
"message"
- isi pesan log -
"requestId"
(Python dan Node.js) atau"AWSrequestId"
(Java) - ID permintaan unik untuk pemanggilan fungsi
Bergantung pada runtime dan metode logging yang digunakan fungsi Anda, objek JSON ini mungkin juga berisi pasangan kunci tambahan. Misalnya, di Node.js, jika fungsi Anda menggunakan console
metode untuk mencatat objek kesalahan menggunakan beberapa argumen, objek JSON akan berisi pasangan nilai kunci tambahan dengan kuncierrorMessage
,errorType
, danstackTrace
. Untuk mempelajari lebih lanjut tentang log berformat JSON di runtime Lambda yang berbeda, lihat, dan. AWS Lambda fungsi logging di Python AWS Lambda fungsi login di Node.js AWS Lambda fungsi logging di Java
catatan
Kunci yang digunakan Lambda untuk nilai stempel waktu berbeda untuk log sistem dan log aplikasi. Untuk log sistem, Lambda menggunakan kunci "time"
untuk menjaga konsistensi dengan API Telemetri. Untuk log aplikasi, Lambda mengikuti konvensi runtime dan penggunaan yang didukung. "timestamp"
Sebagai perbandingan, dua contoh berikut menunjukkan output log yang sama dalam format teks biasa dan JSON terstruktur.
contoh teks biasa:
2023-10-27T19:17:45.586Z 79b4f56e-95b1-4643-9700-2807f4e68189 INFO some log message
contoh JSON terstruktur:
{
"timestamp":"2023-10-27T19:17:45.586Z",
"level":"INFO",
"message":"some log message",
"requestId":"79b4f56e-95b1-4643-9700-2807f4e68189"
}
Mengatur format log fungsi Anda
Untuk mengonfigurasi format log untuk fungsi Anda, Anda dapat menggunakan konsol Lambda atau AWS Command Line Interface ()AWS CLI. Anda juga dapat mengonfigurasi format log fungsi menggunakan perintah CreateFunctiondan UpdateFunctionKonfigurasi Lambda API, sumber daya AWS Serverless Application Model (AWS SAM), dan AWS::Serverless::Functionsumber daya. AWS CloudFormation AWS::Lambda::Function
Mengubah format log fungsi Anda tidak memengaruhi log yang ada yang disimpan di CloudWatch Log. Hanya log baru yang akan menggunakan format yang diperbarui.
Jika Anda mengubah format log fungsi Anda ke JSON dan tidak menyetel level log, maka Lambda secara otomatis menyetel level log aplikasi dan level log sistem fungsi Anda ke INFO. Ini berarti bahwa Lambda hanya mengirimkan output log dari INFO tingkat dan lebih rendah ke Log. CloudWatch Untuk mempelajari selengkapnya tentang pemfilteran tingkat log aplikasi dan sistem, lihat Pemfilteran tingkat log
catatan
Untuk runtime Python, ketika format log fungsi Anda disetel ke teks biasa, pengaturan tingkat log default adalah WARN. Ini berarti bahwa Lambda hanya mengirimkan output log dari level WARN dan lebih rendah ke Log. CloudWatch Mengubah format log fungsi Anda ke JSON mengubah perilaku default ini. Untuk mempelajari lebih lanjut tentang login dengan Python, lihat. AWS Lambda fungsi logging di Python
Untuk fungsi Node.js yang memancarkan log format metrik tertanam (EMF), mengubah format log fungsi Anda CloudWatch menjadi JSON dapat mengakibatkan tidak dapat mengenali metrik Anda.
penting
Jika fungsi Anda menggunakan Powertools for AWS Lambda (TypeScript) atau pustaka klien EMF sumber terbuka untuk memancarkan log EMF, perbarui pustaka Powertools
Untuk mengkonfigurasi format log fungsi (konsol)
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi
-
Pada halaman konfigurasi fungsi, pilih Alat pemantauan dan operasi.
-
Di panel konfigurasi Logging, pilih Edit.
-
Di bawah Konten log, untuk format Log pilih Teks atau JSON.
-
Pilih Simpan.
Untuk mengubah format log dari fungsi yang ada (AWS CLI)
-
Untuk mengubah format log dari fungsi yang ada, gunakan
update-function-configuration
perintah. AturLogFormat
opsiLoggingConfig
ke salah satuJSON
atauText
.aws lambda update-function-configuration \ --function-name myFunction --logging-config LogFormat=JSON
Untuk mengatur format log saat Anda membuat fungsi (AWS CLI)
-
Untuk mengkonfigurasi format log saat Anda membuat fungsi baru, gunakan
--logging-config
opsi dalamcreate-function
perintah. SetelLogFormat
ke salah satuJSON
atauText
. Contoh perintah berikut membuat fungsi menggunakan runtime Node.js 18 yang mengeluarkan log di JSON terstruktur.Jika Anda tidak menentukan format log saat membuat fungsi, Lambda akan menggunakan format log default untuk versi runtime yang Anda pilih. Untuk informasi tentang format logging default, lihatFormat log default.
aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --logging-config LogFormat=JSON
Pemfilteran tingkat log
Lambda dapat memfilter log fungsi Anda sehingga hanya log dengan tingkat detail tertentu atau lebih rendah yang dikirim ke CloudWatch Log. Anda dapat mengonfigurasi pemfilteran tingkat log secara terpisah untuk log sistem fungsi Anda (log yang dihasilkan Lambda) dan log aplikasi (log yang dihasilkan oleh kode fungsi Anda).
UntukRuntime dan metode logging yang didukung, Anda tidak perlu membuat perubahan apa pun pada kode fungsi Anda agar Lambda memfilter log aplikasi fungsi Anda.
Untuk semua runtime dan metode logging lainnya, kode fungsi Anda harus menampilkan peristiwa log ke stdout
atau stderr
sebagai objek berformat JSON yang berisi pasangan nilai kunci dengan kunci. "level"
Misalnya, Lambda menafsirkan output berikut stdout
sebagai log tingkat DEBUG.
print('{"level": "debug", "msg": "my debug log", "timestamp": "2023-11-02T16:51:31.587199Z"}')
Jika bidang "level"
nilai tidak valid atau hilang, Lambda akan menetapkan keluaran log INFO tingkat. Agar Lambda dapat menggunakan bidang stempel waktu, Anda harus menentukan waktu dalam format stempel waktu RFC
Saat memberi nama kunci stempel waktu, ikuti konvensi runtime yang Anda gunakan. Lambda mendukung konvensi penamaan yang paling umum digunakan oleh runtime terkelola. Misalnya, dalam fungsi yang menggunakan runtime.NET, Lambda mengenali kuncinya. "Timestamp"
catatan
Untuk menggunakan penyaringan tingkat log, fungsi Anda harus dikonfigurasi untuk menggunakan format log JSON. Format log default untuk semua runtime terkelola Lambda saat ini adalah teks biasa. Untuk mempelajari cara mengonfigurasi format log fungsi Anda ke JSON, lihatMengatur format log fungsi Anda.
Untuk log aplikasi (log yang dihasilkan oleh kode fungsi Anda), Anda dapat memilih antara tingkat log berikut.
Tingkat log | Penggunaan standar |
---|---|
TRACE (paling detail) | Informasi paling halus yang digunakan untuk melacak jalur eksekusi kode Anda |
AWAKUTU | Informasi terperinci untuk debugging sistem |
INFO | Pesan yang merekam operasi normal fungsi Anda |
PERINGATAN | Pesan tentang potensi kesalahan yang dapat menyebabkan perilaku tak terduga jika tidak ditangani |
ERROR | Pesan tentang masalah yang mencegah kode berfungsi seperti yang diharapkan |
FATAL (paling detail) | Pesan tentang kesalahan serius yang menyebabkan aplikasi berhenti berfungsi |
Ketika Anda memilih tingkat log, Lambda mengirimkan log pada tingkat itu dan lebih rendah ke CloudWatch Log. Misalnya, jika Anda menyetel level log aplikasi fungsi ke WARN, Lambda tidak mengirim output log di level INFO dan DEBUG. Level log aplikasi default untuk penyaringan log adalah INFO.
Saat Lambda memfilter log aplikasi fungsi Anda, pesan log tanpa level akan diberikan INFO tingkat log.
Untuk log sistem (log yang dihasilkan oleh layanan Lambda), Anda dapat memilih antara tingkat log berikut.
Tingkat log | Penggunaan |
---|---|
DEBUG (paling detail) | Informasi terperinci untuk debugging sistem |
INFO | Pesan yang merekam operasi normal fungsi Anda |
PERINGATAN (paling sedikit detail) | Pesan tentang potensi kesalahan yang dapat menyebabkan perilaku tak terduga jika tidak ditangani |
Ketika Anda memilih tingkat log, Lambda mengirimkan log pada tingkat itu dan lebih rendah. Misalnya, jika Anda menyetel level log sistem fungsi ke INFO, Lambda tidak mengirim output log pada tingkat DEBUG.
Secara default, Lambda menetapkan tingkat log sistem ke INFO. Dengan pengaturan ini, Lambda secara otomatis mengirim "start"
dan "report"
mencatat pesan ke. CloudWatch Untuk menerima log sistem yang kurang lebih terperinci, ubah level log menjadi DEBUG atau WARN. Untuk melihat daftar level log tempat Lambda memetakan peristiwa log sistem yang berbeda, lihat. Pemetaan peristiwa tingkat log sistem
Mengkonfigurasi penyaringan tingkat log
Untuk mengonfigurasi pemfilteran tingkat log aplikasi dan sistem untuk fungsi Anda, Anda dapat menggunakan konsol Lambda atau (). AWS Command Line Interface AWS CLI Anda juga dapat mengonfigurasi tingkat log fungsi menggunakan perintah CreateFunctiondan UpdateFunctionKonfigurasi Lambda API, sumber daya AWS Serverless Application Model (AWS SAM), dan AWS::Serverless::Functionsumber daya. AWS CloudFormation AWS::Lambda::Function
Perhatikan bahwa jika Anda menetapkan tingkat log fungsi Anda dalam kode Anda, pengaturan ini lebih diutamakan daripada pengaturan tingkat log lainnya yang Anda konfigurasikan. Misalnya, jika Anda menggunakan logging
setLevel()
metode Python untuk menyetel level logging fungsi Anda ke INFO, pengaturan ini lebih diutamakan daripada pengaturan WARN yang Anda konfigurasikan menggunakan konsol Lambda.
Untuk mengkonfigurasi aplikasi atau tingkat log sistem fungsi yang ada (konsol)
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi.
-
Pada halaman konfigurasi fungsi, pilih Alat pemantauan dan operasi.
-
Di panel konfigurasi Logging, pilih Edit.
-
Di bawah Konten log, untuk format Log pastikan JSON dipilih.
-
Dengan menggunakan tombol radio, pilih level log Aplikasi yang Anda inginkan dan tingkat log sistem untuk fungsi Anda.
-
Pilih Simpan.
Untuk mengkonfigurasi aplikasi fungsi yang ada atau tingkat log sistem (AWS CLI)
-
Untuk mengubah tingkat log aplikasi atau sistem dari fungsi yang ada, gunakan
update-function-configuration
perintah. Setel--system-log-level
ke salah satuDEBUG
,INFO
, atauWARN
. Setel--application-log-level
ke salah satuDEBUG
,INFO
,WARN
,ERROR
, atauFATAL
.aws lambda update-function-configuration \ --function-name myFunction --system-log-level WARN \ --application-log-level ERROR
Untuk mengonfigurasi pemfilteran tingkat log saat Anda membuat fungsi
-
Untuk mengonfigurasi pemfilteran tingkat log saat Anda membuat fungsi baru, gunakan
--application-log-level
opsi--system-log-level
dan dalam perintah create-function. Setel--system-log-level
ke salah satuDEBUG
,INFO
, atauWARN
. Setel--application-log-level
ke salah satuDEBUG
,INFO
,WARN
,WARN
, atauFATAL
.aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --system-log-level WARN \ --application-log-level ERROR
Pemetaan peristiwa tingkat log sistem
Untuk peristiwa log tingkat sistem yang dihasilkan oleh Lambda, tabel berikut mendefinisikan tingkat log yang ditetapkan untuk setiap peristiwa. Untuk mempelajari lebih lanjut tentang peristiwa yang tercantum dalam tabel, lihat Referensi skema API Telemetri Lambda Event
Nama peristiwa | Ketentuan | Tingkat log yang ditetapkan |
---|---|---|
InitStart | RuntimeVersion diatur | INFO |
InitStart | RuntimeVersion tidak disetel | AWAKUTU |
init RuntimeDone | status=sukses | AWAKUTU |
init RuntimeDone | status! = sukses | PERINGATAN |
InitReport | initializationType=SnapStart | INFO |
InitReport | InitializationType! = snapstart | AWAKUTU |
InitReport | status! = sukses | PERINGATAN |
RestoRestoRestart | RuntimeVersion diatur | INFO |
RestoRestoRestart | RuntimeVersion tidak disetel | AWAKUTU |
mengembalikan RuntimeDone | status=sukses | AWAKUTU |
mengembalikan RuntimeDone | status! = sukses | PERINGATAN |
RestoreReport | status=sukses | INFO |
RestoreReport | status! = sukses | PERINGATAN |
start | - | INFO |
RuntimeDone | status=sukses | AWAKUTU |
RuntimeDone | status! = sukses | PERINGATAN |
laporan | status=sukses | INFO |
laporan | status! = sukses | PERINGATAN |
luas | state=sukses | INFO |
luas | negara! = sukses | PERINGATAN |
LogSubscription | - | INFO |
TeleMetryLangganan | - | INFO |
LogsDropped | - | PERINGATAN |
catatan
API Telemetri LambdaSelalu memancarkan set lengkap acara platform. Mengonfigurasi level log sistem yang dikirim Lambda tidak memengaruhi perilaku API CloudWatch Telemetri Lambda.
Pemfilteran tingkat log aplikasi dengan runtime khusus
Saat Anda mengonfigurasi pemfilteran tingkat log aplikasi untuk fungsi Anda, di belakang layar Lambda menyetel level log aplikasi di runtime menggunakan variabel lingkungan. AWS_LAMBDA_LOG_LEVEL
Lambda juga menetapkan format log fungsi Anda menggunakan variabel AWS_LAMBDA_LOG_FORMAT
lingkungan. Anda dapat menggunakan variabel ini untuk mengintegrasikan kontrol logging lanjutan Lambda ke dalam runtime kustom.
Agar dapat mengonfigurasi setelan logging untuk suatu fungsi menggunakan runtime khusus dengan konsol Lambda AWS CLI, dan API Lambda, konfigurasikan runtime kustom Anda untuk memeriksa nilai variabel lingkungan ini. Anda kemudian dapat mengonfigurasi logger runtime Anda sesuai dengan format log dan level log yang Anda pilih.
Mengkonfigurasi grup CloudWatch log
Secara default, CloudWatch secara otomatis membuat grup log bernama /aws/lambda/<function name>
untuk fungsi Anda saat pertama kali dipanggil. Untuk mengonfigurasi fungsi Anda untuk mengirim log ke grup log yang ada, atau untuk membuat grup log baru untuk fungsi Anda, Anda dapat menggunakan konsol Lambda atau. AWS CLI Anda juga dapat mengonfigurasi grup log kustom menggunakan perintah CreateFunctiondan UpdateFunctionConfiguration Lambda API dan sumber daya AWS Serverless Application Model (AWS SAM) AWS: :Serverless: :Function.
Anda dapat mengonfigurasi beberapa fungsi Lambda untuk mengirim log ke grup log yang sama CloudWatch . Misalnya, Anda dapat menggunakan grup log tunggal untuk menyimpan log untuk semua fungsi Lambda yang membentuk aplikasi tertentu. Saat Anda menggunakan grup log kustom untuk fungsi Lambda, aliran log yang dibuat Lambda menyertakan nama fungsi dan versi fungsi. Ini memastikan bahwa pemetaan antara pesan log dan fungsi dipertahankan, bahkan jika Anda menggunakan grup log yang sama untuk beberapa fungsi.
Format penamaan aliran log untuk grup log kustom mengikuti konvensi ini:
YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]
Perhatikan bahwa saat mengonfigurasi grup log kustom, nama yang Anda pilih untuk grup log harus mengikuti aturan penamaan CloudWatch Log. Selain itu, nama grup log kustom tidak boleh dimulai dengan stringaws/
. Jika Anda membuat grup log kustom dimulai denganaws/
, Lambda tidak akan dapat membuat grup log. Akibatnya, log fungsi Anda tidak akan dikirim ke CloudWatch.
Untuk mengubah grup log fungsi (konsol)
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi.
-
Pada halaman konfigurasi fungsi, pilih Alat pemantauan dan operasi.
-
Di panel konfigurasi Logging, pilih Edit.
-
Di panel grup Logging, untuk grup CloudWatch log, pilih Kustom.
-
Di bawah Grup log kustom, masukkan nama grup CloudWatch log yang Anda inginkan untuk mengirim log ke fungsi Anda. Jika Anda memasukkan nama grup log yang ada, maka fungsi Anda akan menggunakan grup itu. Jika tidak ada grup log dengan nama yang Anda masukkan, maka Lambda akan membuat grup log baru untuk fungsi Anda dengan nama itu.
Untuk mengubah grup log fungsi (AWS CLI)
-
Untuk mengubah grup log dari fungsi yang ada, gunakan
update-function-configuration
perintah. Jika Anda menentukan nama grup log yang ada, maka fungsi Anda akan menggunakan grup itu. Jika tidak ada grup log dengan nama yang Anda tentukan, maka Lambda akan membuat grup log baru untuk fungsi Anda dengan nama itu.aws lambda update-function-configuration \ --function-name myFunction --log-group myLogGroup
Untuk menentukan grup log kustom saat Anda membuat fungsi (AWS CLI)
-
Untuk menentukan grup log kustom saat Anda membuat fungsi Lambda baru menggunakan AWS CLI, gunakan opsi.
--log-group
Jika Anda menentukan nama grup log yang ada, maka fungsi Anda akan menggunakan grup itu. Jika tidak ada grup log dengan nama yang Anda tentukan, maka Lambda akan membuat grup log baru untuk fungsi Anda dengan nama itu.Contoh perintah berikut menciptakan fungsi Lambda Node.js yang mengirimkan log ke grup log bernama.
myLogGroup
aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --log-group myLogGroup
Izin peran eksekusi
Agar fungsi Anda mengirim CloudWatch log ke Log, itu harus memiliki logs:PutLogEvents
izin. Saat Anda mengonfigurasi grup log fungsi menggunakan konsol Lambda, jika fungsi Anda tidak memiliki izin ini, Lambda menambahkannya ke peran eksekusi fungsi secara default. Ketika Lambda menambahkan izin ini, ia memberikan izin fungsi untuk mengirim log ke grup log Log apa pun CloudWatch .
Untuk mencegah Lambda memperbarui peran eksekusi fungsi secara otomatis dan mengeditnya secara manual, perluas Izin dan hapus centang Tambahkan izin yang diperlukan.
Saat Anda mengonfigurasi grup log fungsi Anda menggunakan AWS CLI, Lambda tidak akan secara otomatis menambahkan izin. logs:PutLogEvents
Tambahkan izin ke peran eksekusi fungsi Anda jika belum memilikinya. Izin ini termasuk dalam kebijakan yang AWSLambdaBasicExecutionRole
Mengakses log dengan konsol Lambda
Untuk melihat log menggunakan konsol Lambda
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi.
-
Pilih Monitor.
-
Pilih Lihat log masuk CloudWatch.
Mengakses log dengan AWS CLI
AWS CLI Ini adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
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 Windowsbase64 -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-namestream1
--limit 5
contoh macOS dan Linux (khusus)
Pada prompt perintah yang sama, pengguna macOS dan Linux mungkin perlu menjalankan perintah berikut untuk memastikan skrip dapat dijalankan.
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" }
Pencatatan fungsi runtime
Untuk melakukan debug dan memvalidasi bahwa kode Anda berfungsi sesuai harapan, Anda dapat mengeluarkan log dengan fungsionalitas pencatatan standar untuk bahasa pemrograman Anda. Runtime Lambda mengunggah output log fungsi Anda ke Log. CloudWatch Untuk petunjuk khusus bahasa, lihat topik berikut:
Apa selanjutnya?
-
Pelajari lebih lanjut tentang grup log dan mengaksesnya melalui CloudWatch konsol di Sistem pemantauan, aplikasi, dan file log kustom di Panduan CloudWatch Pengguna Amazon.