View a markdown version of this page

Visualizzazione dei CloudWatch log per Lambda Event Functions - AWS Lambda

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à.

Visualizzazione dei CloudWatch log per Lambda Event Functions

Puoi visualizzare CloudWatch i log di Amazon per la tua Lambda Event Function utilizzando la console Lambda, CloudWatch la console o il (). AWS Command Line Interface AWS CLI Segui le istruzioni nelle seguenti sezioni per accedere ai log della tua Event Function.

Stream i log di Event Function con CloudWatch Logs Live Tail

Amazon CloudWatch Logs Live Tail ti aiuta a risolvere rapidamente i problemi relativi alle funzioni degli eventi visualizzando un elenco in streaming di nuovi eventi di registro direttamente nella console Lambda. Puoi visualizzare e filtrare i log acquisiti da Lambda Event Functions in tempo reale, aiutandoti a rilevare e risolvere rapidamente i problemi.

Nota

Le sessioni Live Tail comportano costi al minuto in base al tempo di utilizzo della sessione. Per ulteriori informazioni sui prezzi, consulta la pagina CloudWatch dei prezzi di Amazon.

Confronto tra Live Tail e --log-type Tail

Esistono diverse differenze tra CloudWatch Logs Live Tail e l'opzione LogType: Tail nell'API Lambda --log-type Tail (in AWS CLI):

  • --log-type Tail restituisce solo i primi 4 KB dei log di invocazione. Live Tail non condivide questo limite e può ricevere fino a 500 eventi del log al secondo.

  • --log-type Tailacquisisce e invia i log con la risposta, il che può influire sulla latenza di risposta della Event Function. Live Tail non influisce sulla latenza di risposta della funzione Event.

  • --log-type Tail supporta solo chiamate sincrone. Live Tail funziona sia per le invocazioni sincrone che asincrone.

Nota

Lambda Managed Instances non supporta l'opzione. --log-type Tail Usa CloudWatch Logs Live Tail o interroga direttamente CloudWatch Logs per visualizzare i log delle funzioni delle istanze gestite.

Permissions

Le seguenti autorizzazioni sono necessarie per avviare e interrompere CloudWatch le sessioni di Logs Live Tail:

  • logs:DescribeLogGroups

  • logs:StartLiveTail

  • logs:StopLiveTail

Avviare una sessione Live Tail nella console Lambda

  1. Apri la pagina Event Functions della console Lambda.

  2. Scegli il nome della funzione evento.

  3. Seleziona la scheda Test.

  4. Nel riquadro Test event, scegli CloudWatch Logs Live Tail.

  5. Per Select log groups, il gruppo di log della Event Function è selezionato per impostazione predefinita. È possibile selezionare fino a cinque gruppi di log alla volta.

  6. (Facoltativo) Per visualizzare solo gli eventi del log che contengono determinate parole o altre stringhe, inserisci la parola o la stringa nella casella Aggiungi modello di filtro. I filtri fanno distinzione tra maiuscole e minuscole. Puoi includere più termini e operatori di modelli in questo campo, comprese le espressioni regolari (regex). Per ulteriori informazioni sulla sintassi dei pattern, consulta Filter pattern syntax. nella Amazon CloudWatch Logs User Guide.

  7. Scegli Avvia. I log eventi corrispondenti vengono visualizzati nella finestra.

  8. Per arrestare la sessione Live Tail, scegli Arresta.

    Nota

    La sessione Live Tail si interrompe automaticamente dopo 15 minuti di inattività o quando la sessione della console Lambda scade.

Accedi ai log delle funzioni degli eventi utilizzando la console

  1. Apri la pagina Event Functions della console Lambda.

  2. Seleziona una funzione di evento.

  3. Selezionare la scheda Monitor (Monitora).

  4. Scegli Visualizza CloudWatch registri per aprire la CloudWatch console.

  5. Scorri verso il basso e scegli il flusso di log per le invocazioni delle funzioni che desideri esaminare.

    Elencare i flussi di log per una funzione Lambda.

Ogni istanza di una Lambda Event Function ha un flusso di log dedicato. Se una Event Function aumenta, ogni istanza concorrente ha il proprio flusso di log. Ogni volta che viene creato un nuovo ambiente di esecuzione in risposta a una chiamata, viene generato un nuovo flusso di log. La convenzione di denominazione per i flussi di log è:

YYYY/MM/DD[Function version][Execution environment GUID]

Un singolo ambiente di esecuzione scrive sullo stesso flusso di log durante il suo ciclo di vita. Il flusso di log contiene i messaggi provenienti da quell'ambiente di esecuzione e anche qualsiasi output del codice della tua Lambda Event Function. Ogni messaggio ha un timestamp, compresi i log personalizzati. Anche se la funzione Event non registra alcun output dal codice, vengono generate tre istruzioni di registro minime per ogni chiamata (START, END e REPORT):

CloudWatch flusso di log che mostra le righe START, END e REPORT per una chiamata alla Lambda Event Function.

Questi log mostrano:

  • RequestId— si tratta di un ID univoco generato per richiesta. Se la Lambda Event Function ritenta una richiesta, questo ID non cambia e viene visualizzato nei log per ogni tentativo successivo.

  • Start/End— questi aggiungono ai segnalibri una singola chiamata, quindi ogni riga di registro compresa tra queste appartiene alla stessa chiamata.

  • Durata: il tempo totale di invocazione per la funzione di gestione, codice escluso. INIT

  • Durata fatturata: applica la logica di arrotondamento ai fini della fatturazione.

  • Dimensione della memoria: la quantità di memoria allocata alla funzione evento.

  • Memoria massima utilizzata: la quantità massima di memoria utilizzata durante la chiamata.

  • Durata di inizializzazione: il tempo impiegato per eseguire la INIT sezione di codice, al di fuori del gestore principale.

Accedi ai log con AWS CLI

AWS CLI È uno strumento open source che puoi utilizzare per interagire con i AWS servizi utilizzando i comandi nella shell della riga di comando. Per completare le fasi riportate in questa sezione, è necessario disporre della AWS CLI versione 2.

È 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 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.

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 Windows. Gli utenti macOS potrebbero dover utilizzare base64 -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-name stream1 --limit 5
Esempio(solo) macOS e Linux

Nello stesso prompt dei comandi, gli utenti macOS e Linux potrebbero dover eseguire il comando seguente 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" }

Analisi dei log e registrazione strutturata

Con CloudWatch Logs Insights, puoi cercare e analizzare i dati di registro utilizzando una sintassi di query specializzata. Esegue interrogazioni su più gruppi di log e fornisce potenti filtri utilizzando il pattern matching tra espressioni glob e regolari.

Puoi sfruttare queste funzionalità implementando la registrazione strutturata nelle funzioni degli eventi Lambda. La registrazione strutturata organizza i log in un formato predefinito, semplificando le interrogazioni. L'utilizzo dei livelli di registro è un primo passo importante per generare log compatibili con i filtri che separano i messaggi informativi dagli avvisi o dagli errori. Ad esempio, si consideri il codice seguente: Node.js

exports.handler = async (event) => { console.log("console.log - Application is fine") console.info("console.info - This is the same as console.log") console.warn("console.warn - Application provides a warning") console.error("console.error - An error occurred") }

Il file di CloudWatch registro risultante contiene un campo separato che specifica il livello di registro:

CloudWatch voce di registro che mostra un campo a livello di registro che distingue i messaggi ERROR dai messaggi INFO.

Una query di CloudWatch Logs Insights può quindi filtrare a livello di registro. Ad esempio, per ricercare solo gli errori, è possibile utilizzare la seguente query:

fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc

Registrazione strutturata JSON

JSON è comunemente usato per fornire una struttura per i log delle applicazioni. Nell'esempio seguente, i log sono stati convertiti in JSON per generare tre valori distinti:

CloudWatch voci di registro che mostrano JSON-structured l'output con campi distinti per dimensione del file, tempo di caricamento e numero di chiamate.

La funzionalità CloudWatch Logs Insights rileva automaticamente i valori nell'output JSON e analizza i messaggi come campi, senza la necessità di glob o espressioni regolari personalizzate. Utilizzando JSON-structured i log, la seguente query rileva le chiamate in cui il file caricato era più grande di 1 MB, il tempo di caricamento era superiore a 1 secondo e la chiamata non era un avvio a freddo:

fields @message | filter @message like /INFO/ | filter uploadedBytes > 1000000 | filter uploadTimeMS > 1000 | filter invocation != 1

Questa query potrebbe produrre il seguente risultato:

CloudWatch Risultati delle query di Logs Insights filtrati in base ai campi JSON che mostrano le voci di registro corrispondenti.

I campi rilevati in JSON vengono compilati automaticamente nel menu Campi rilevati sul lato destro. I campi standard emessi dal servizio Lambda hanno il prefisso '@' e puoi eseguire query su questi campi nello stesso modo. I log Lambda includono sempre i campi @timestamp, @logStream, @message, @requestId, @duration, @billedDuration,,,,,,,,,. MemoryUsed @type @max @memorySize Se X-Ray è abilitato per una funzione di evento, i log includono anche 41.e. TraceId SegmentId @xray @xray

Quando un'origine di AWS eventi come Amazon S3, Amazon SQS o EventBridge Amazon richiama la tua Event Function, l'intero evento viene fornito alla Event Function come input di un oggetto JSON. Registrando questo evento nella prima riga della Event Function, puoi quindi eseguire query su qualsiasi campo annidato utilizzando Logs Insights. CloudWatch

Query utili di Insights

La tabella seguente mostra esempi di query Insights che possono essere utili per monitorare le funzioni degli eventi Lambda.

Description Esempio di sintassi della query

Gli ultimi 100 errori

 fields Timestamp, LogLevel, Message
 | filter LogLevel == "ERR"
 | sort @timestamp desc
 | limit 100

Le prime 100 invocazioni con il fatturato più alto

filter @type = "REPORT"
| fields @requestId, @billedDuration
| sort by @billedDuration desc
| limit 100

Percentuale di avvii a freddo sul totale delle invocazioni

filter @type = "REPORT"
| stats sum(strcontains(@message, "Init Duration"))/count(*) * 100 as
  coldStartPct, avg(@duration)
  by bin(5m)

Rapporto percentile della durata Lambda

filter @type = "REPORT"
| stats
    avg(@billedDuration) as Average,
    percentile(@billedDuration, 99) as NinetyNinth,
    percentile(@billedDuration, 95) as NinetyFifth,
    percentile(@billedDuration, 90) as Ninetieth
    by bin(30m)

Rapporto percentile sull'utilizzo della memoria Lambda

filter @type="REPORT"
| stats avg(@maxMemoryUsed/1024/1024) as mean_MemoryUsed,
    min(@maxMemoryUsed/1024/1024) as min_MemoryUsed,
    max(@maxMemoryUsed/1024/1024) as max_MemoryUsed,
    percentile(@maxMemoryUsed/1024/1024, 95) as Percentile95

Invocazioni che utilizzano il 100% della memoria assegnata

filter @type = "REPORT" and @maxMemoryUsed=@memorySize
| stats
    count_distinct(@requestId)
    by bin(30m)

Memoria media utilizzata tra le invocazioni

avgMemoryUsedPERC,
    avg(@billedDuration) as avgDurationMS
    by bin(5m)

Visualizzazione delle statistiche sulla memoria

filter @type = "REPORT"
| stats
    max(@maxMemoryUsed / 1024 / 1024) as maxMemMB,
    avg(@maxMemoryUsed / 1024 / 1024) as avgMemMB,
    min(@maxMemoryUsed / 1024 / 1024) as minMemMB,
    (avg(@maxMemoryUsed / 1024 / 1024) / max(@memorySize / 1024 / 1024)) * 100 as avgMemUsedPct,
    avg(@billedDuration) as avgDurationMS
    by bin(30m)

Invocazioni in cui Lambda è uscita

filter @message like /Process exited/
| stats count() by bin(30m)

Invocazioni scadute

filter @message like /Task timed out/
| stats count() by bin(30m)

Rapporto sulla latenza

filter @type = "REPORT"
| stats avg(@duration), max(@duration), min(@duration)
  by bin(5m)

Over-provisioned memoria

filter @type = "REPORT"
| stats max(@memorySize / 1024 / 1024) as provisonedMemMB,
        min(@maxMemoryUsed / 1024 / 1024) as smallestMemReqMB,
        avg(@maxMemoryUsed / 1024 / 1024) as avgMemUsedMB,
        max(@maxMemoryUsed / 1024 / 1024) as maxMemUsedMB,
        provisonedMemMB - maxMemUsedMB as overProvisionedMB

Visualizzazione dei log e pannelli di controllo

Per qualsiasi query di CloudWatch Logs Insights, puoi esportare i risultati in formato markdown o CSV. In alcuni casi, potrebbe essere più utile creare visualizzazioni a partire dalle query, purché esista almeno una funzione di aggregazione. Con la stats funzione, è possibile definire aggregazioni e raggruppamenti.

L'esempio precedente di logInsightsJSON filtrava in base alla dimensione e al tempo di caricamento ed escludeva le prime invocazioni. Ciò ha prodotto una tabella di dati. Per monitorare un sistema di produzione, potrebbe essere più utile visualizzare le dimensioni minime, massime e medie dei file per individuare i valori anomali. Per fare ciò, applica la funzione stats agli aggregati richiesti e raggruppa in base a un valore temporale come ogni minuto:

Ad esempio, si consideri la seguente interrogazione. Questa è la stessa query di esempio della Registrazione strutturata JSON sezione, ma con funzioni di aggregazione aggiuntive:

fields @message | filter @message like /INFO/ | filter uploadedBytes > 1000000 | filter uploadTimeMS > 1000 | filter invocation != 1 | stats min(uploadedBytes), avg(uploadedBytes), max(uploadedBytes) by bin (1m)

Abbiamo incluso questi aggregati perché potrebbe essere più utile visualizzare le dimensioni minime, massime e medie dei file per individuare i valori anomali. Puoi visualizzare i risultati nella scheda Visualizzazione:

CloudWatch La scheda di visualizzazione di Logs Insights mostra un grafico delle serie temporali delle dimensioni minime, medie e massime dei file.

Dopo aver completato la creazione della visualizzazione, puoi facoltativamente aggiungere il grafico a una dashboard. CloudWatch Per fare ciò, scegli Aggiungi al pannello di controllo sopra la visualizzazione. In questo modo la query viene aggiunta come widget ed è possibile selezionare intervalli di aggiornamento automatici, semplificando il monitoraggio continuo dei risultati:

CloudWatch dashboard con un widget di interrogazione Logs Insights aggiunto, che mostra l'opzione Aggiungi alla dashboard.