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à.
Registra e monitora le funzioni Lambda di Node.js
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 Utilizzo dei CloudWatch log di log con Lambda.
Questa pagina descrive come produrre un output di registro dal codice della funzione Lambda e accedere ai log utilizzando AWS Command Line Interface la console Lambda o la console. CloudWatch
Sections
- Creazione di una funzione che restituisce i registri
- Utilizzo dei controlli di registrazione avanzati di Lambda con Node.js
- Visualizzazione dei log nella console Lambda
- Visualizzazione dei log nella console CloudWatch
- Visualizzazione dei log utilizzando () AWS Command Line InterfaceAWS CLI
- Eliminazione dei log
Creazione di una funzione che restituisce i registri
Per generare i log dal codice della funzione, è possibile utilizzare i metodi dell'oggetto consolestdout
o stderr
. L'esempio seguente registra i valori delle variabili di ambiente e l'oggetto evento.
Nota
Ti consigliamo di utilizzare tecniche come la convalida dell'input e la codifica dell'output durante la registrazione degli input. Se registri direttamente i dati di input, un utente malintenzionato potrebbe essere in grado di utilizzare il codice per rendere difficile l'individuazione delle manomissioni, falsificare le voci di registro o aggirare i monitor dei log. Per ulteriori informazioni, vedere Improper Output Neutralization
Esempio File index.js – Registrazione dei log
exports.handler = async function(event, context) { console.log("ENVIRONMENT VARIABLES\n" + JSON.stringify(process.env, null, 2)) console.info("EVENT\n" + JSON.stringify(event, null, 2)) console.warn("Event not processed.") return context.logStreamName }
Esempio Formato dei log
START RequestId: c793869b-ee49-115b-a5b6-4fd21e8dedac Version: $LATEST 2019-06-07T19:11:20.562Z c793869b-ee49-115b-a5b6-4fd21e8dedac INFO ENVIRONMENT VARIABLES { "AWS_LAMBDA_FUNCTION_VERSION": "$LATEST", "AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/my-function", "AWS_LAMBDA_LOG_STREAM_NAME": "2019/06/07/[$LATEST]e6f4a0c4241adcd70c262d34c0bbc85c", "AWS_EXECUTION_ENV": "AWS_Lambda_nodejs12.x", "AWS_LAMBDA_FUNCTION_NAME": "my-function", "PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin", "NODE_PATH": "/opt/nodejs/node10/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules", ... } 2019-06-07T19:11:20.563Z c793869b-ee49-115b-a5b6-4fd21e8dedac INFO EVENT { "key": "value" } 2019-06-07T19:11:20.564Z c793869b-ee49-115b-a5b6-4fd21e8dedac WARN Event not processed. END RequestId: c793869b-ee49-115b-a5b6-4fd21e8dedac REPORT RequestId: c793869b-ee49-115b-a5b6-4fd21e8dedac Duration: 128.83 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 74 MB Init Duration: 166.62 ms XRAY TraceId: 1-5d9d007f-0a8c7fd02xmpl480aed55ef0 SegmentId: 3d752xmpl1bbe37e Sampled: true
Il runtime di Node.js registra le voci START
, END
e REPORT
per ogni chiamata. A ogni voce registrata dalla funzione aggiunge un timestamp, l'ID della richiesta e il livello di log. La riga del report fornisce i seguenti dettagli.
REPORTcampi di dati lineari
-
RequestId— L'ID univoco della richiesta per la chiamata.
-
Durata – La quantità di tempo che il metodo del gestore della funzione impiega durante l'elaborazione dell'evento.
-
Durata fatturata – La quantità di tempo fatturata per la chiamata.
-
Dimensioni memoria – La quantità di memoria allocata per la funzione.
-
Quantità max utilizzata – La quantità di memoria utilizzata dalla funzione. Quando le chiamate condividono un ambiente di esecuzione, Lambda riporta la memoria massima utilizzata in tutte le chiamate. Questo comportamento potrebbe comportare un valore riportato superiore al previsto.
-
Durata Init – Per la prima richiesta servita, la quantità di tempo impiegato dal runtime per caricare la funzione ed eseguire il codice al di fuori del metodo del gestore.
-
XRAY TraceId— Per le richieste tracciate, l'ID di AWS X-Ray traccia.
-
SegmentId— Per le richieste tracciate, l'ID del segmento X-Ray.
-
Campionato – Per le richieste tracciate, il risultato del campionamento.
Puoi visualizzare i log nella console Lambda, nella CloudWatch console Logs o dalla riga di comando.
Utilizzo dei controlli di registrazione avanzati di Lambda con Node.js
Per avere un maggiore controllo sul modo in cui i log delle tue funzioni vengono acquisiti, elaborati e utilizzati, puoi configurare le seguenti opzioni di registrazione per i runtime Node.js supportati:
-
Formato di registro: scegli tra testo semplice e JSON formato strutturato per i log della tua funzione
-
Livello di log: per i log in JSON formato, scegli il livello di dettaglio dei log che Lambda invia ad Amazon CloudWatch, ad esempio, o ERROR DEBUG INFO
-
Gruppo di log: scegli il gruppo di CloudWatch log a cui la funzione invia i log
Per ulteriori informazioni su queste opzioni di registrazione e istruzioni su come configurare la funzione per utilizzarle, consulta la pagina Configurazione dei controlli di registrazione avanzati per le funzioni Lambda.
Per utilizzare le opzioni del formato di log e del livello di log con le funzioni Lambda in Node.js, consulta le istruzioni nelle sezioni seguenti.
Utilizzo di JSON log strutturati con Node.js
Se si seleziona JSON il formato di registro della funzione, Lambda invierà l'output dei log utilizzando i metodi della console diconsole.trace
,,, console.debug
console.log
console.info
console.error
, e console.warn
to CloudWatch come strutturato. JSON Ogni oggetto di JSON registro contiene almeno quattro coppie di valori chiave con le seguenti chiavi:
-
"timestamp"
: l'ora in cui è stato generato il messaggio di log -
"level"
: il livello di log assegnato al messaggio -
"message"
: il contenuto del messaggio di log -
"requestId"
: l'ID di richiesta univoco dell'invocazione alla funzione
A seconda del metodo di registrazione utilizzato dalla funzione, questo JSON oggetto può contenere anche coppie di chiavi aggiuntive. Ad esempio, se la funzione utilizza console
metodi per registrare gli oggetti di errore utilizzando più argomenti, l'JSONoggetto conterrà coppie di valori chiave aggiuntive con le chiavi errorMessage
estackTrace
. errorType
Se il codice utilizza già un'altra libreria di registrazione, come Powertools for AWS Lambda, per produrre log JSON strutturati, non è necessario apportare alcuna modifica. Lambda non codifica due volte i log già JSON codificati, quindi i log delle applicazioni della funzione continueranno a essere acquisiti come prima.
Per ulteriori informazioni sull'utilizzo del pacchetto Powertools for AWS Lambda logging per creare log JSON strutturati nel runtime Node.js, consulta. Registra e monitora le funzioni TypeScript Lambda
Esempi JSON di output di log formattati
Gli esempi seguenti mostrano come i vari output di log generati utilizzando i console
metodi con argomenti singoli e multipli vengono acquisiti in CloudWatch Logs quando si imposta il formato di registro della funzione su. JSON
Il primo esempio utilizza il metodo console.error
per generare una stringa semplice.
Esempio Codice di registrazione di Node.js
export const handler = async (event) => { console.error("This is a warning message"); ... }
Esempio JSONrecord di registro
{ "timestamp":"2023-11-01T00:21:51.358Z", "level":"ERROR", "message":"This is a warning message", "requestId":"93f25699-2cbf-4976-8f94-336a0aa98c6f" }
Con i metodi della console
, puoi anche generare messaggi di log strutturati più complessi utilizzando argomenti singoli o multipli. Nel prossimo esempio, viene utilizzato console.log
per generare due coppie chiave-valore con un singolo argomento. Nota che il "message"
campo nell'JSONoggetto Lambda invia a CloudWatch Logs non è stringato.
Esempio Codice di registrazione di Node.js
export const handler = async (event) => { console.log({data: 12.3, flag: false}); ... }
Esempio JSONrecord di registro
{ "timestamp": "2023-12-08T23:21:04.664Z", "level": "INFO", "requestId": "405a4537-9226-4216-ac59-64381ec8654a", "message": { "data": 12.3, "flag": false } }
Nel prossimo esempio, viene utilizzato ancora una volta il metodo console.log
per creare un output di log. Nella fattispecie, il metodo richiede due argomenti, una mappa contenente due coppie chiave-valore e una stringa identificativa. Tieni presente che in questo caso, poiché hai fornito due argomenti, Lambda rende il campo "message"
in formato stringa.
Esempio Codice di registrazione di Node.js
export const handler = async (event) => { console.log('Some object - ', {data: 12.3, flag: false}); ... }
Esempio JSONrecord di registro
{ "timestamp": "2023-12-08T23:21:04.664Z", "level": "INFO", "requestId": "405a4537-9226-4216-ac59-64381ec8654a", "message": "Some object - { data: 12.3, flag: false }" }
Lambda assegna gli output generati utilizzando console.log
il livello di log. INFO
L'ultimo esempio mostra come gli oggetti di errore possono essere inviati ai CloudWatch registri utilizzando i metodi. console
Tieni presente che quando esegui il log di oggetti di errore utilizzando più argomenti, Lambda aggiunge i campi errorMessage
, errorType
e stackTrace
all'output del log.
Esempio Codice di registrazione di Node.js
export const handler = async (event) => { let e1 = new ReferenceError("some reference error"); let e2 = new SyntaxError("some syntax error"); console.log(e1); console.log("errors logged - ", e1, e2); };
Esempio JSONrecord di registro
{ "timestamp": "2023-12-08T23:21:04.632Z", "level": "INFO", "requestId": "405a4537-9226-4216-ac59-64381ec8654a", "message": { "errorType": "ReferenceError", "errorMessage": "some reference error", "stackTrace": [ "ReferenceError: some reference error", " at Runtime.handler (file:///var/task/index.mjs:3:12)", " at Runtime.handleOnceNonStreaming (file:///var/runtime/index.mjs:1173:29)" ] } } { "timestamp": "2023-12-08T23:21:04.646Z", "level": "INFO", "requestId": "405a4537-9226-4216-ac59-64381ec8654a", "message": "errors logged - ReferenceError: some reference error\n at Runtime.handler (file:///var/task/index.mjs:3:12)\n at Runtime.handleOnceNonStreaming (file:///var/runtime/index.mjs:1173:29) SyntaxError: some syntax error\n at Runtime.handler (file:///var/task/index.mjs:4:12)\n at Runtime.handleOnceNonStreaming (file:///var/runtime/index.mjs:1173:29)", "errorType": "ReferenceError", "errorMessage": "some reference error", "stackTrace": [ "ReferenceError: some reference error", " at Runtime.handler (file:///var/task/index.mjs:3:12)", " at Runtime.handleOnceNonStreaming (file:///var/runtime/index.mjs:1173:29)" ] }
Quando si registrano i log di più tipi di errore, i campi aggiuntivi errorMessage
, errorType
e stackTrace
vengono estratti dal primo tipo di errore fornito al metodo della console
.
Utilizzo di librerie client in formato metrico (EMF) incorporate con log strutturati JSON
AWS fornisce librerie client open source per Node.js che è possibile utilizzare per creare log in formato metrico incorporato (). EMF Se disponi di funzioni esistenti che utilizzano queste librerie e modifichi il formato di registro della funzione inJSON, CloudWatch potresti non riconoscere più le metriche emesse dal tuo codice.
Se attualmente il codice emette EMF i log direttamente utilizzando console.log
o utilizzando Powertools for AWS Lambda (TypeScript), inoltre non CloudWatch sarà in grado di analizzarli se modifichi il formato di registro della funzione in. JSON
Importante
Per garantire che i EMF log delle funzioni continuino a essere analizzati correttamente CloudWatch, aggiorna le librerie EMFconsole.log
, modifica il codice in modo che restituisca tali metriche direttamente stdout
come mostrato nel seguente esempio di codice.
Esempio codice che emette parametri incorporati a stdout
process.stdout.write(JSON.stringify( { "_aws": { "Timestamp": Date.now(), "CloudWatchMetrics": [{ "Namespace": "lambda-function-metrics", "Dimensions": [["functionVersion"]], "Metrics": [{ "Name": "time", "Unit": "Milliseconds", "StorageResolution": 60 }] }] }, "functionVersion": "$LATEST", "time": 100, "requestId": context.awsRequestId } ) + "\n")
Utilizzo del filtraggio a livello di log con Node.js
Per AWS Lambda filtrare i log delle applicazioni in base al relativo livello di registro, la funzione deve utilizzare log formattati. JSON Puoi farlo in due modi:
-
Crea output di registro utilizzando i metodi standard della console e configura la tua funzione per utilizzare la formattazione dei log. JSON AWS Lambda quindi filtra gli output di log utilizzando la coppia chiave-valore «level» nell'JSONoggetto descritto in. Utilizzo di JSON log strutturati con Node.js Per informazioni su come configurare il formato di log della funzione, consulta la pagina Configurazione dei controlli di registrazione avanzati per le funzioni Lambda.
-
Utilizzate un'altra libreria o metodo di registrazione per creare log JSON strutturati nel codice che includono una coppia chiave-valore «level» che definisce il livello dell'output del log. Ad esempio, puoi usare Powertools per generare output AWS Lambda di log JSON strutturati dal tuo codice. Per ulteriori informazioni sull'utilizzo di Powertools con il runtime Node.js, consulta la pagina Registra e monitora le funzioni TypeScript Lambda.
Affinché Lambda filtri i log della tua funzione, devi includere anche una coppia di valori
"timestamp"
chiave nell'output del log. JSON L'ora deve essere specificata in un formato timestamp RFC3339valido. Se non fornisci un timestamp valido, Lambda assegnerà al log il livello INFO e aggiungerà un timestamp per te.
Quando configuri la funzione per utilizzare il filtraggio a livello di log, selezioni il livello di log che desideri inviare a Logs tra le seguenti opzioni: AWS Lambda CloudWatch
Livello di log | Utilizzo standard |
---|---|
TRACE(maggior parte dei dettagli) | Le informazioni più dettagliate utilizzate per tracciare il percorso di esecuzione del codice |
DEBUG | Informazioni dettagliate per il debug del sistema |
INFO | Messaggi che registrano il normale funzionamento della funzione |
WARN | Messaggi relativi a potenziali errori che possono portare a comportamenti imprevisti se non risolti |
ERROR | Messaggi relativi a problemi che impediscono al codice di funzionare come previsto |
FATAL(minimo dettaglio) | Messaggi relativi a errori gravi che causano l'interruzione del funzionamento dell'applicazione |
Lambda invia i log del livello selezionato e inferiore a. CloudWatch Ad esempio, se configuri un livello di registro diWARN, Lambda invierà i log corrispondenti ai livelli WARNERROR, e. FATAL
Visualizzazione dei log nella console Lambda
È possibile utilizzare la console Lambda per visualizzare l'output del log dopo aver richiamato una funzione Lambda.
Se il codice può essere testato dall'editor del codice incorporato, troverai i log nei risultati dell’esecuzione. Quando utilizzi la funzionalità di test della console per richiamare una funzione, troverai l’output del log nella sezione Dettagli.
Visualizzazione dei log nella console CloudWatch
Puoi utilizzare la CloudWatch console Amazon per visualizzare i log di tutte le chiamate di funzioni Lambda.
Per visualizzare i log sulla console CloudWatch
-
Apri la pagina Registra gruppi
sulla CloudWatch console. -
Scegli il gruppo di log per la tua funzione (/aws/lambda/
your-function-name
). -
Creare un flusso di log.
Ogni flusso di log corrisponde a un'istanza della funzione. Nuovi flussi di log vengono visualizzati quando aggiorni la funzione Lambda e quando vengono create istanze aggiuntive per gestire più chiamate simultanee. Per trovare i log per una chiamata specifica, ti consigliamo di strumentare la tua funzione con. AWS X-Ray X-Ray registra i dettagli sulla richiesta e il flusso di log nella traccia.
Visualizzazione dei log utilizzando () AWS Command Line InterfaceAWS CLI
AWS CLI È uno strumento open source che consente di interagire con i AWS servizi utilizzando i comandi nella shell della riga di comando. Per completare le fasi riportate in questa sezione, è necessario:
È possibile utilizzare AWS CLI per recuperare i log per una chiamata utilizzando l'opzione di comando --log-type
. La risposta include un campo LogResult
che contiene fino a 4 KB di log con codifica base64 del richiamo.
Esempio recuperare un ID di log
Nell'esempio seguente viene illustrato come recuperare un ID di log dal LogResult
campo per una funzione denominata my-function
.
aws lambda invoke --function-name my-function out --log-type Tail
Verrà visualizzato l'output seguente:
{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
Esempio decodificare i log
Nello stesso prompt dei comandi, utilizzare l'base64
utilità per decodificare i log. Nell'esempio seguente viene illustrato come recuperare i log codificati in base64 per 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
L'cli-binary-formatopzione è obbligatoria se si utilizza la AWS CLI versione 2. Per rendere questa impostazione come predefinita, esegui aws configure set cli-binary-format raw-in-base64-out
. Per ulteriori informazioni, consulta la pagina AWS CLI supported global command line options nella Guida per l'utente di AWS Command Line Interface versione 2.
Verrà visualizzato l'output seguente:
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
L'utilità base64
è disponibile su Linux, macOS e Ubuntu su Windowsbase64 -D
.
Esempio Script get-logs.sh
Nello stesso prompt dei comandi, utilizzare lo script seguente per scaricare gli ultimi cinque eventi di log. Lo script utilizza sed
per rimuovere le virgolette dal file di output e rimane in sospensione per 15 secondi in attesa che i log diventino disponibili. L'output include la risposta di Lambda e l'output del comando get-log-events
.
Copiare il contenuto del seguente esempio di codice e salvare nella directory del progetto Lambda come get-logs.sh
.
L'cli-binary-formatopzione è obbligatoria se utilizzi la AWS CLI versione 2. Per rendere questa impostazione come predefinita, esegui aws configure set cli-binary-format raw-in-base64-out
. Per ulteriori informazioni, consulta la pagina AWS CLI supported global command line options nella Guida per l'utente di AWS Command Line Interface versione 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
Esempio (solo) macOS e Linux
Nello stesso prompt dei comandi, gli utenti macOS e Linux potrebbero dover eseguire il seguente comando per assicurarsi che lo script sia eseguibile.
chmod -R 755 get-logs.sh
Esempio recuperare gli ultimi cinque eventi di log
Nello stesso prompt dei comandi, eseguire lo script seguente per ottenere gli ultimi cinque eventi di log.
./get-logs.sh
Verrà visualizzato l'output seguente:
{ "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" }
Eliminazione dei log
I gruppi di log non vengono eliminati automaticamente quando si elimina una funzione. Per evitare di archiviare i log a tempo indeterminato, eliminare il gruppo di log o configurare un periodo di conservazione trascorso il quale i log vengono eliminati automaticamente.