Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Log dan pantau fungsi C# Lambda
AWS Lambda secara otomatis memonitor fungsi Lambda dan mengirim entri log ke Amazon. CloudWatch Fungsi Lambda Anda dilengkapi dengan grup CloudWatch log Log dan aliran log untuk setiap instance fungsi Anda. Lingkungan runtime Lambda mengirimkan detail tentang setiap pemanggilan dan output lainnya dari kode fungsi Anda ke aliran log. Untuk informasi selengkapnya tentang CloudWatch Log, lihatMenggunakan CloudWatch log Log dengan Lambda.
Bagian-bagian
Membuat fungsi yang mengembalikan log
Untuk menghasilkan log dari kode fungsi, Anda dapat menggunakan metode di kelas Konsolstdout
atau stderr
.
Itu. NETruntime mencatat REPORT
barisSTART
,END
, dan untuk setiap pemanggilan. Baris laporan memberikan perincian berikut.
REPORTbidang data baris
-
RequestId— ID permintaan unik untuk pemanggilan.
-
Durasi – Jumlah waktu yang digunakan oleh metode handler fungsi Anda gunakan untuk memproses peristiwa.
-
Durasi yang Ditagih – Jumlah waktu yang ditagihkan untuk invokasi.
-
Ukuran Memori – Jumlah memori yang dialokasikan untuk fungsi.
-
Memori Maks yang Digunakan – Jumlah memori yang digunakan oleh fungsi. Saat pemanggilan berbagi lingkungan eksekusi, Lambda melaporkan memori maksimum yang digunakan di semua pemanggilan. Perilaku ini dapat menghasilkan nilai yang dilaporkan lebih tinggi dari yang diharapkan.
-
Durasi Init – Untuk permintaan pertama yang dilayani, lama waktu yang diperlukan runtime untuk memuat fungsi dan menjalankan kode di luar metode handler.
-
XRAY TraceId— Untuk permintaan yang dilacak, ID AWS X-Ray jejak.
-
SegmentId— Untuk permintaan yang dilacak, ID segmen X-Ray.
-
Diambil Sampel – Untuk permintaan yang dilacak, hasil pengambilan sampel.
Menggunakan alat logging dan pustaka
Powertools untuk AWS Lambda (. NET
Tangkap bidang kunci dari konteks Lambda, cold start, dan struktur logging output sebagai JSON
Log peristiwa pemanggilan Lambda saat diinstruksikan (dinonaktifkan secara default)
Cetak semua log hanya untuk persentase pemanggilan melalui pengambilan sampel log (dinonaktifkan secara default)
Tambahkan kunci tambahan ke log terstruktur kapan saja
Gunakan pemformat log kustom (Bring Your Own Formatter) untuk mengeluarkan log dalam struktur yang kompatibel dengan Logging organisasi Anda RFC
Menggunakan Powertools untuk AWS Lambda (. NET) dan AWS SAM untuk logging terstruktur
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh aplikasi Hello World C# dengan Powertools terintegrasi untuk (. AWS Lambda NEThello world
pesan.
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
. NET6 atau. NET8
-
AWS SAM CLIversi 1.75 atau yang lebih baru. Jika Anda memiliki versi yang lebih lama AWS SAM CLI, lihat Memutakhirkan file. AWS SAM CLI
Menyebarkan aplikasi sampel AWS SAM
-
Inisialisasi aplikasi menggunakan TypeScript template Hello World.
sam init --app-template hello-world-powertools-dotnet --name sam-app --package-type Zip --runtime dotnet6 --no-tracing
-
Bangun aplikasi.
cd sam-app && sam build
-
Terapkan aplikasi.
sam deploy --guided
-
Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekan
Enter
.catatan
Karena HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja? , pastikan untuk masuk
y
. -
Dapatkan aplikasi yang digunakan: URL
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Memanggil titik API akhir:
curl -X GET
<URL_FROM_PREVIOUS_STEP>
Jika berhasil, Anda akan melihat tanggapan ini:
{"message":"hello world"}
-
Untuk mendapatkan log untuk fungsi tersebut, jalankan log sam. Untuk informasi selengkapnya, lihat Bekerja dengan log di Panduan AWS Serverless Application Model Pengembang.
sam logs --stack-name sam-app
Output log terlihat seperti ini:
2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:27.988000 INIT_START Runtime Version: dotnet:6.v13 Runtime Version ARN: arn:aws:lambda:ap-southeast-2::runtime:699f346a05dae24c58c45790bc4089f252bf17dae3997e79b17d939a288aa1ec 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:28.229000 START RequestId: bed25b38-d012-42e7-ba28-f272535fb80e Version: $LATEST 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:29.259000 2023-02-20T14:15:29.201Z bed25b38-d012-42e7-ba28-f272535fb80e info {"_aws":{"Timestamp":1676902528962,"CloudWatchMetrics":[{"Namespace":"sam-app-logging","Metrics":[{"Name":"ColdStart","Unit":"Count"}],"Dimensions":[["FunctionName"],["Service"]]}]},"FunctionName":"sam-app-HelloWorldFunction-haKIoVeose2p","Service":"PowertoolsHelloWorld","ColdStart":1} 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.479000 2023-02-20T14:15:30.479Z bed25b38-d012-42e7-ba28-f272535fb80e info {"ColdStart":true,"XrayTraceId":"1-63f3807f-5dbcb9910c96f50742707542","CorrelationId":"d3d4de7f-4ccc-411a-a549-4d67b2fdc015","FunctionName":"sam-app-HelloWorldFunction-haKIoVeose2p","FunctionVersion":"$LATEST","FunctionMemorySize":256,"FunctionArn":"arn:aws:lambda:ap-southeast-2:123456789012:function:sam-app-HelloWorldFunction-haKIoVeose2p","FunctionRequestId":"bed25b38-d012-42e7-ba28-f272535fb80e","Timestamp":"2023-02-20T14:15:30.4602970Z","Level":"Information","Service":"PowertoolsHelloWorld","Name":"AWS.Lambda.Powertools.Logging.Logger","Message":"Hello world API - HTTP 200"} 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.599000 2023-02-20T14:15:30.599Z bed25b38-d012-42e7-ba28-f272535fb80e info {"_aws":{"Timestamp":1676902528922,"CloudWatchMetrics":[{"Namespace":"sam-app-logging","Metrics":[{"Name":"ApiRequestCount","Unit":"Count"}],"Dimensions":[["Service"]]}]},"Service":"PowertoolsHelloWorld","ApiRequestCount":1} 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.680000 END RequestId: bed25b38-d012-42e7-ba28-f272535fb80e 2023/02/20/[$LATEST]4eaf8445ba7a4a93b999cb17fbfbecd8 2023-02-20T14:15:30.680000 REPORT RequestId: bed25b38-d012-42e7-ba28-f272535fb80e Duration: 2450.99 ms Billed Duration: 2451 ms Memory Size: 256 MB Max Memory Used: 74 MB Init Duration: 240.05 ms XRAY TraceId: 1-63f3807f-5dbcb9910c96f50742707542 SegmentId: 16b362cd5f52cba0
-
Ini adalah API titik akhir publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
sam delete
Mengelola retensi log
Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log tanpa batas waktu, hapus grup log, atau konfigurasikan periode retensi setelah itu secara CloudWatch otomatis menghapus log. Untuk mengatur penyimpanan log, tambahkan yang berikut ini ke AWS SAM templat Anda:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7
Melihat log di konsol Lambda
Anda dapat menggunakan konsol Lambda untuk melihat output log setelah Anda memanggil fungsi Lambda.
Jika kode Anda dapat diuji dari editor Kode tertanam, Anda akan menemukan log dalam hasil eksekusi. Saat Anda menggunakan fitur pengujian konsol untuk menjalankan fungsi, Anda akan menemukan Keluaran Log di bagian Detail.
Melihat log di CloudWatch konsol
Anda dapat menggunakan CloudWatch konsol Amazon untuk melihat log untuk semua pemanggilan fungsi Lambda.
Untuk melihat log di CloudWatch konsol
-
Buka halaman Grup log
di CloudWatch konsol. -
Pilih kelompok log untuk fungsi Anda (/aws/lambda/
your-function-name
). -
Pilih pengaliran log.
Setiap aliran log sesuai dengan instans fungsi Anda. Pengaliran log muncul saat Anda memperbarui fungsi Lambda dan saat instans tambahan dibuat untuk menangani beberapa invokasi bersamaan. Untuk menemukan log untuk pemanggilan tertentu, kami sarankan untuk menginstrumentasi fungsi Anda dengan. AWS X-Ray X-Ray mencatat detail tentang permintaan dan pengaliran log di jejak.
Melihat log menggunakan AWS Command Line Interface (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" }
Menghapus log
Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log secara tidak terbatas, hapus kelompok log, atau lakukan konfigurasi periode penyimpanan, yang setelahnya log akan dihapus secara otomatis.