Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Registrare e monitorare le funzioni Lambda con Rust
Nota
Il client di runtime Rust
AWS Lambda monitora automaticamente le funzioni Lambda per tuo conto e invia i log ad Amazon. CloudWatch La funzione Lambda include un gruppo di log CloudWatch Logs e un flusso di log per ogni istanza della funzione. L'ambiente del runtime Lambda invia i dettagli su ogni richiamo al flusso di log e inoltra i log e l'output del codice della funzione. Per ulteriori informazioni, consulta Invio dei log delle funzioni Lambda a Logs CloudWatch . In questa pagina viene descritto come generare l'output del log dal codice della funzione Lambda.
Creazione di una funzione che scrive i log
Per generare i log dal codice della funzione, è possibile utilizzare qualsiasi funzione di registrazione che scriva in stdout
o stderr
, come la macro println!
. L'esempio seguente utilizza println!
per stampare un messaggio all'avvio del gestore della funzione e prima che finisca.
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 }
Registrazione avanzata con la cassa Tracing
Tracingsubscriber
prima di implementare il gestore della funzione. Dopodiché, è possibile utilizzare macro di tracciamento come debug
, info
e error
per specificare il livello di registrazione desiderato per ogni scenario.
Esempio - Utilizzo della cassa Tracing
Tieni presente quanto segue:
-
tracing_subscriber::fmt().json()
: quando questa opzione è inclusa, i log vengono formattati in JSON. Per utilizzare questa opzione, è necessario includere la funzionalitàjson
nella dipendenzatracing-subscriber
(ad esempio,tracing-subscriber = { version = "0.3.11", features = ["json"] }
). -
#[tracing::instrument(skip(event), fields(req_id = %event.context.request_id))]
: questa annotazione genera un intervallo ogni volta che viene richiamato il gestore. L'intervallo aggiunge l'ID della richiesta su ciascuna riga di log. -
{ %first_name }
: questo costrutto aggiunge il campofirst_name
alla riga di log in cui viene utilizzato. Il valore di questo campo corrisponde alla variabile con lo stesso nome.
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 }
Quando viene richiamata questa funzione Rust, stampa due righe di log simili alle seguenti:
{"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"}]}