View a markdown version of this page

Codice di strumentazione in Node.js AWS Lambda - 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à.

Codice di strumentazione in Node.js AWS Lambda

Lambda si integra con AWS X-Ray per aiutarti a tracciare, eseguire il debug e ottimizzare le applicazioni Lambda. Puoi utilizzarlo X-Ray per tracciare una richiesta mentre attraversa le risorse dell'applicazione, che possono includere funzioni Lambda e altri servizi. AWS

Per inviare dati di tracciamento a X-Ray, puoi utilizzare una delle due librerie SDK:

Ciascuno degli SDK offre modi per inviare i dati di telemetria al servizio. X-Ray Puoi quindi utilizzarlo X-Ray per visualizzare, filtrare e ottenere informazioni dettagliate sulle metriche delle prestazioni dell'applicazione per identificare problemi e opportunità di ottimizzazione.

Importante

The X-Ray e Powertools for AWS Lambda SDK fanno parte di una soluzione di strumentazione strettamente integrata offerta da. AWS I livelli Lambda ADOT fanno parte di uno standard di settore per la strumentazione di tracciamento che in generale raccoglie più dati, ma potrebbero non essere adatti a tutti i casi d'uso. È possibile implementare il tracciamento end-to-end utilizzando entrambe le soluzioni. X-Ray Per saperne di più sulla scelta tra di esse, consulta Scelta tra AWS Distro for Open Telemetry e SDK. X-Ray

Usare ADOT per strumentare le tue funzioni Node.js

ADOT fornisce livelli Lambda completamente gestiti che mettono insieme tutto il necessario per raccogliere i dati di telemetria utilizzando l'SDK OTel. Usando questo livello, è possibile strumentare le funzioni Lambda senza dover modificare alcun codice funzione. È inoltre possibile configurare il livello per eseguire l'inizializzazione personalizzata di OTel. Per ulteriori informazioni, consulta la sezione relativa alla configurazione personalizzata per ADOT Collector su Lambda nella documentazione di ADOT.

Per i Node.js runtime, puoi aggiungere il layer Lambda AWS gestito per ADOT Javascript per strumentare automaticamente le tue funzioni. Per istruzioni dettagliate su come aggiungere questo layer, consulta AWS Distro for OpenTelemetry Lambda Support for JavaScript nella documentazione ADOT.

Usare l' X-Ray SDK per strumentare le tue funzioni Node.js

Per registrare i dettagli sulle chiamate effettuate dalla funzione Lambda ad altre risorse nell'applicazione, è anche possibile utilizzare il SDK AWS X-Ray per Node.js. Per ottenere l'SDK, aggiungere il pacchetto aws-xray-sdk-core alle dipendenze dell'applicazione.

Esempio blank- .json nodejs/package
{ "name": "blank-nodejs", "version": "1.0.0", "private": true, "devDependencies": { "jest": "29.7.0" }, "dependencies": { "@aws-sdk/client-lambda": "3.345.0", "aws-xray-sdk-core": "3.5.3" }, "scripts": { "test": "jest" } }

Per configurare i client AWS SDK nella AWS SDK per JavaScript v3, racchiudi l'istanza del client con il metodo. captureAWSv3Client

Esempio vuoto- /index.js nodejs/function — Tracciamento di un AWS Client SDK
const AWSXRay = require('aws-xray-sdk-core'); const { LambdaClient, GetAccountSettingsCommand } = require('@aws-sdk/client-lambda'); // Create client outside of handler to reuse const lambda = AWSXRay.captureAWSv3Client(new LambdaClient()); // Handler exports.handler = async function(event, context) { event.Records.forEach(record => { ...

Il runtime Lambda imposta alcune variabili di ambiente per configurare l' X-Ray SDK. Ad esempio, Lambda imposta AWS_XRAY_CONTEXT_MISSING su per evitare LOG_ERROR di generare errori di runtime dall'SDK. X-Ray Per impostare una strategia mancante di contesto personalizzato, sovrascrivi la variabile di ambiente nella configurazione della funzione in modo da non avere alcun valore, quindi puoi impostare la strategia mancante di contesto a livello di programmazione.

Esempio Esempio di codice di inizializzazione
const AWSXRay = require('aws-xray-sdk-core'); // Configure the context missing strategy to do nothing AWSXRay.setContextMissingStrategy(() => {});

Per ulteriori informazioni, consulta Utilizzo delle variabili di ambiente Lambda.

Dopo aver aggiunto le dipendenze corrette e apportato le modifiche al codice necessarie, attiva il tracciamento nella configurazione della funzione tramite la console Lambda o l'API.

Attivazione del tracciamento con la console Lambda

Per attivare il tracciamento attivo sulla funzione Lambda con la console, attenersi alla seguente procedura:

Per attivare il tracciamento attivo
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. Scegliere Configuration (Configurazione) e quindi Monitoring and operations tools (Strumenti di monitoraggio e operazioni).

  4. In Strumenti di monitoraggio aggiuntivi scegli Modifica.

  5. In CloudWatch Application Signals and AWS X-Ray, scegli Abilita per le tracce del servizio Lambda.

  6. Scegli Save (Salva).

Attivazione del tracciamento con l'API Lambda

Configura il tracciamento sulla tua funzione Lambda con AWS CLI or AWS SDK, utilizza le seguenti operazioni API:

Il seguente AWS CLI comando di esempio abilita la traccia attiva su una funzione denominata my-function.

aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

La modalità di tracciamento fa parte della configurazione specifica della versione quando si pubblica una versione della funzione. Non è possibile modificare la modalità di tracciamento in una versione pubblicata.

Attivazione del tracciamento con CloudFormation

Per attivare la traccia su una AWS::Lambda::Function risorsa in un CloudFormation modello, utilizzate la proprietà. TracingConfig

Esempio function-inline.yml — Configurazione del tracciamento
Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

Per una AWS::Serverless::Function risorsa AWS Serverless Application Model (AWS SAM), usa la Tracing proprietà.

Esempio template.yml — Configurazione di tracciamento
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...

Interpretazione e tracciamento X-Ray

La funzione ha bisogno dell'autorizzazione per caricare i dati di traccia su X-Ray. Quando si attiva il tracciamento nella console Lambda, Lambda aggiunge le autorizzazioni necessarie al ruolo di esecuzione della funzione. Altrimenti, aggiungi la AWSXRayDaemonWriteAccess policy al ruolo di esecuzione.

Dopo aver configurato il tracciamento attivo, è possibile osservare richieste specifiche tramite l'applicazione. Il grafico del X-Ray servizio mostra le informazioni sull'applicazione e su tutti i suoi componenti. Il seguente esempio mostra un'applicazione con due funzioni. La funzione principale elabora gli eventi e talvolta restituisce errori. La seconda funzione in alto elabora gli errori che appaiono nel gruppo di log della prima e utilizza l' AWS SDK per chiamare X-Ray, Amazon Simple Storage Service (Amazon S3) e Amazon CloudWatch Logs.

Un diagramma che mostra due applicazioni separate e le rispettive mappe dei servizi in X-Ray

X-Ray non traccia tutte le richieste all'applicazione. X-Ray applica un algoritmo di campionamento per garantire che il tracciamento sia efficiente, fornendo comunque un campione rappresentativo di tutte le richieste. La frequenza di campionamento è di una richiesta al secondo e del 5% delle altre richieste. Non puoi configurare la frequenza di X-Ray campionamento per le tue funzioni.

In X-Ray, una traccia registra le informazioni su una richiesta elaborata da uno o più servizi. Lambda registra 2 segmenti per traccia, che creano due nodi sul grafico del servizio. L'immagine seguente evidenzia questi due nodi:

Una mappa dei X-Ray servizi con una singola funzione.

Il primo nodo a sinistra rappresenta il servizio Lambda che riceve la richiesta di chiamata. Il secondo nodo rappresenta la specifica funzione Lambda. L'esempio seguente mostra una traccia con questi 2 segmenti. Entrambi sono nominati my-function, ma uno ha l'origine AWS::Lambda e l'altro ha l'origine AWS::Lambda::Function. Se il segmento AWS::Lambda mostra un errore, il servizio Lambda ha avuto un problema. Se il AWS::Lambda::Function segmento mostra un errore, la funzione ha avuto un problema.

Una X-Ray traccia che mostra la latenza in ogni sottosegmento di una specifica chiamata Lambda.

Questo esempio espande il segmento AWS::Lambda::Function per visualizzare i relativi tre sottosegmenti.

Nota

AWS sta attualmente implementando modifiche al servizio Lambda. A causa di queste modifiche, potresti notare piccole differenze tra la struttura e il contenuto dei messaggi di log di sistema e dei segmenti di traccia emessi da diverse funzioni Lambda nel tuo Account AWS.

La traccia di esempio mostrata qui illustra il segmento di funzione vecchio stile. Le differenze tra i segmenti vecchio e nuovo stile sono descritte nei paragrafi seguenti.

Queste modifiche verranno implementate nelle prossime settimane e tutte le funzioni, Regioni AWS ad eccezione della Cina e delle GovCloud regioni, passeranno all'utilizzo dei messaggi di registro e dei segmenti di traccia nel nuovo formato.

Il segmento di funzioni vecchio stile contiene i seguenti sottosegmenti:

  • Inizializzazione – Rappresenta il tempo trascorso a caricare la funzione e ad eseguire il codice di inizializzazione. Questo sottosegmento viene visualizzato solo per il primo evento che viene elaborato da ogni istanza della funzione.

  • Chiamata: rappresenta il tempo impiegato per eseguire il codice del gestore.

  • Overhead: rappresenta il tempo impiegato dal runtime Lambda per prepararsi a gestire l'evento successivo.

Il segmento di funzione di nuovo stile non contiene un sottosegmento Invocation. I sottosegmenti dei clienti sono invece collegati direttamente al segmento di funzioni. Per ulteriori informazioni sulla struttura dei segmenti di funzioni vecchio e nuovo stile, consulta Comprensione delle tracce X-Ray.

È inoltre possibile strumentare i client HTTP, registrare query SQL e creare segmenti secondari personalizzati con annotazioni e metadati. Per ulteriori informazioni, consulta SDK AWS X-Ray per Node.js nella Guida per gli sviluppatori di AWS X-Ray .

Prezzi

Puoi utilizzare il X-Ray tracciamento gratuitamente ogni mese fino a un determinato limite come parte del piano gratuito. AWS Oltre tale soglia, vengono X-Ray addebitati i costi per l'archiviazione e il recupero delle tracce. Per ulteriori informazioni, consultare Prezzi di AWS X-Ray.

Archiviazione delle dipendenze di runtime in un livello (SDK) X-Ray

Se si utilizza l' X-Ray SDK per configurare il codice funzione dei client AWS SDK, il pacchetto di distribuzione può diventare piuttosto ingombrante. Per evitare di caricare le dipendenze di runtime ogni volta che aggiorni il codice funzione, impacchetta l' X-Ray SDK in un layer Lambda. Gestione delle dipendenze Lambda con i livelli

L'esempio seguente mostra una risorsa AWS::Serverless::LayerVersion che memorizza SDK AWS X-Ray per Node.js.

Esempio template.yml — Livello delle dipendenze
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active Layers: - !Ref libs ... libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. ContentUri: lib/. CompatibleRuntimes: - nodejs24.x

Con questa configurazione, si aggiorna il livello della libreria solo se si modificano le dipendenze di runtime. Poiché il pacchetto di implementazione della funzione contiene solo il codice, questo può contribuire a ridurre i tempi di caricamento.

La creazione di un livello per le dipendenze richiede modifiche alla compilazione per generare l'archivio dei livelli prima della distribuzione. Per un esempio funzionante, vedere l'applicazione di esempio blank-nodejs .