Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Log dan pantau fungsi Rust Lambda
AWS Lambda secara otomatis memantau fungsi Lambda atas nama Anda dan mengirim 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 invokasi ke pengaliran log, dan menyampaikan log serta output lain dari kode fungsi Anda.
Untuk informasi selengkapnya, lihat Mengirim log fungsi Lambda ke CloudWatch Log. Untuk informasi tentang mengkonfigurasi format log, lihatMengkonfigurasi JSON dan format log teks biasa. Halaman ini menjelaskan cara menghasilkan output log dari kode fungsi Lambda Anda.
Membuat fungsi yang menulis log
Untuk menampilkan log dari kode fungsi Anda, Anda dapat menggunakan fungsi logging apa pun yang menulis ke stdout ataustderr, seperti mak println! ro. Contoh berikut digunakan println! untuk mencetak pesan saat pengendali fungsi dimulai dan sebelum selesai.
use lambda_runtime::{service_fn, LambdaEvent, Error}; use serde_json::{json, Value}; async fn handler(event: LambdaEvent<Value>) -> Result<Value, Error> { println!("Rust function invoked"); let payload = event.payload; let first_name = payload["firstName"].as_str().unwrap_or("world"); println!("Rust function responds to {}", &first_name); Ok(json!({ "message": format!("Hello, {first_name}!") })) } #[tokio::main] async fn main() -> Result<(), Error> { lambda_runtime::run(service_fn(handler)).await }
Menerapkan logging lanjutan dengan peti Tracing
Tracing subscriber sebelum mengimplementasikan pengendali fungsi. Kemudian, Anda dapat menggunakan macro pelacakan seperti debuginfo,, danerror, untuk menentukan tingkat logging yang Anda inginkan untuk setiap skenario.
contoh— Menggunakan peti Tracing
Perhatikan hal-hal berikut:
-
tracing_subscriber::fmt().json(): Ketika opsi ini disertakan, log diformat dalam JSON. Untuk menggunakan opsi ini, Anda harus menyertakanjsonfitur dalam ketertracing-subscribergantungan (misalnya,tracing-subscriber = { version = "0.3.11", features = ["json"] }). -
#[tracing::instrument(skip(event), fields(req_id = %event.context.request_id))]: Anotasi ini menghasilkan rentang setiap kali handler dipanggil. Rentang menambahkan ID permintaan ke setiap baris log. -
{ %first_name }: Konstruksi ini menambahkanfirst_namebidang ke baris log tempat digunakan. Nilai untuk bidang ini sesuai dengan variabel dengan nama yang sama.
use lambda_runtime::{service_fn, Error, LambdaEvent}; use serde_json::{json, Value}; #[tracing::instrument(skip(event), fields(req_id = %event.context.request_id))] async fn handler(event: LambdaEvent<Value>) -> Result<Value, Error> { tracing::info!("Rust function invoked"); let payload = event.payload; let first_name = payload["firstName"].as_str().unwrap_or("world"); tracing::info!({ %first_name }, "Rust function responds to event"); Ok(json!({ "message": format!("Hello, {first_name}!") })) } #[tokio::main] async fn main() -> Result<(), Error> { tracing_subscriber::fmt().json() .with_max_level(tracing::Level::INFO) // this needs to be set to remove duplicated information in the log. .with_current_span(false) // this needs to be set to false, otherwise ANSI color codes will // show up in a confusing manner in CloudWatch logs. .with_ansi(false) // disabling time is handy because CloudWatch will add the ingestion time. .without_time() // remove the name of the function from every log entry .with_target(false) .init(); lambda_runtime::run(service_fn(handler)).await }
Ketika fungsi Rust ini dipanggil, ia mencetak dua baris log yang mirip dengan berikut ini:
{"level":"INFO","fields":{"message":"Rust function invoked"},"spans":[{"req_id":"45daaaa7-1a72-470c-9a62-e79860044bb5","name":"handler"}]} {"level":"INFO","fields":{"message":"Rust function responds to event","first_name":"David"},"spans":[{"req_id":"45daaaa7-1a72-470c-9a62-e79860044bb5","name":"handler"}]}