Tracciamento delle richieste in ingresso con l'SDK X-Ray per Node.js - AWS X-Ray

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

Tracciamento delle richieste in ingresso con l'SDK X-Ray per Node.js

Puoi usare l'SDK X-Ray per Node.js per tracciare le richieste HTTP in ingresso che le tue applicazioni Express e Restify elaborano su un'istanza EC2 in Amazon EC2,AWS Elastic Beanstalko Amazon ECS.

L'SDK X-Ray per Node.js fornisce middleware per le applicazioni che utilizzano i framework Express e Restify. Quando aggiungi il middleware X-Ray alla tua applicazione, l'SDK X-Ray per Node.js crea un segmento per ogni richiesta campionata. Questo segmento include durata, metodo e conclusione della richiesta HTTP. Analisi ulteriori creano sottosegmenti associati a questo segmento.

Nota

PerAWS LambdaFunzioni, Lambda crea un segmento per ogni richiesta campionata. Per ulteriori informazioni, consultare AWS Lambda e AWS X-Ray.

Ogni segmento ha un nome che identifica l'applicazione nella mappa del servizio. Il segmento può essere denominato staticamente oppure è possibile configurare l'SDK per nominarlo dinamicamente in base all'intestazione host nella richiesta in entrata. La denominazione dinamica consente di raggruppare le tracce in base al nome di dominio nella richiesta e di applicare un nome predefinito se il nome non corrisponde a uno schema previsto (ad esempio, se l'intestazione host è falsificata).

Richieste inoltrate

Se un sistema di bilanciamento del carico o un altro intermediario inoltra una richiesta all'applicazione, X-Ray preleva l'IP del client dalX-Forwarded-Forintestazione nella richiesta anziché dall'IP di origine nel pacchetto IP. L'IP client registrato per una richiesta inoltrata può essere falsificato, quindi non dovrebbe essere attendibile.

Quando una richiesta viene inoltrata, l'SDK imposta un campo aggiuntivo nel segmento per indicarlo. Se il segmento contiene il campox_forwarded_forimpostato sutrue, l'IP del client è stato prelevato dalX-Forwarded-Forintestazione nella richiesta HTTP.

Il gestore dei messaggi crea un segmento per ogni richiesta in entrata con un blocco http che contiene le informazioni riportate qui di seguito:

  • HTTP method (Metodo HTTP)— GET, POST, PUT, DELETE, ecc.

  • Indirizzo client— Indirizzo IP del client che ha inviato la richiesta.

  • Codice di risposta— Codice HTTP di risposta per la richiesta completata.

  • Timing (Tempo)— Ora di inizio (quando è stata ricevuta la richiesta) e di fine (quando è stata inviata la risposta).

  • User Agent— Iluser-agentdalla richiesta.

  • Lunghezza del contenuto— Ilcontent-lengthdalla risposta.

Tracciamento delle richieste in entrata con Express

Per usare il middleware Express, inizializzare il client SDK e utilizzare il middleware restituito dalla funzione express.openSegment prima di definire gli instradamenti.

Esempio app.js - Express
var app = express(); var AWSXRay = require('aws-xray-sdk'); app.use(AWSXRay.express.openSegment('MyApp')); app.get('/', function (req, res) { res.render('index'); }); app.use(AWSXRay.express.closeSegment());

Dopo aver definito gli instradamenti, utilizzare l'output diexpress.closeSegmentcome indicato per gestire gli eventuali errori restituiti dall'SDK X-Ray per Node.js.

Tracciamento delle richieste in entrata con Restify

Per usare il middleware Restify, inizializzare il client SDK client e eseguire enable. Passare ad esso il server Restify e il nome del segmento.

Esempio app.js - Restify
var AWSXRay = require('aws-xray-sdk'); var AWSXRayRestify = require('aws-xray-sdk-restify'); var restify = require('restify'); var server = restify.createServer(); AWSXRayRestify.enable(server, 'MyApp')); server.get('/', function (req, res) { res.render('index'); });

Configurazione di una strategia di denominazione dei segmenti

AWS X-Rayusa unnome servizioper identificare l'applicazione e distinguerla dalle altre applicazioni, database, API esterne eAWSrisorse utilizzate dalla tua applicazione. Quando X-Ray SDK genera segmenti per le richieste in arrivo, registra il nome del servizio dell'applicazione nel segmentocampo nome.

L'SDK X-Ray può denominare i segmenti dopo il nome host nell'intestazione della richiesta HTTP. Tuttavia, questa intestazione può essere falsificata, il che potrebbe causare nodi imprevisti nella mappa del servizio. Per impedire all'SDK di assegnare nomi ai segmenti in modo errato a causa di richieste con intestazioni host falsificate, è necessario specificare un nome predefinito per le richieste in arrivo.

Se l'applicazione soddisfa le richieste per più domini, è possibile configurare l'SDK in modo che utilizzi una strategia di denominazione dinamica per rifletterlo nei nomi dei segmenti. Una strategia di denominazione dinamica consente all'SDK di utilizzare il nome host per le richieste che corrispondono a un modello previsto e di applicare il nome predefinito alle richieste che non lo fanno.

Ad esempio, è possibile avere una singola applicazione che fornisce richieste a tre sottodomini:www.example.com,api.example.com, estatic.example.com. È possibile utilizzare una strategia di denominazione dinamica con il modello*.example.comper identificare i segmenti per ogni sottodominio con un nome diverso, risultando in tre nodi di servizio sulla mappa del servizio. Se l'applicazione riceve richieste con un nome host che non corrisponde al modello, verrà visualizzato un quarto nodo sulla mappa del servizio con un nome di fallback specificato.

Per utilizzare lo stesso nome per tutti i segmenti della richiesta, specifica il nome della tua applicazione quando inizializzi il middleware, come illustrato nelle sezioni precedenti.

Nota

È possibile sovrascrivere il nome di servizio predefinito definito nel codice con ilAWS_XRAY_TRACING_NAME Variabile di ambiente.

Una strategia di denominazione dinamica definisce un modello al quale devono corrispondere i nomi degli host e un nome di default per l'utilizzo qualora il nome dell'host nella richiesta HTTP non corrisponda al modello. Per denominare i segmenti in modo dinamico, utilizza AWSXRay.middleware.enableDynamicNaming.

Esempio app.js - Nomi dei segmenti dinamici

Se il nome host nella richiesta corrispondente al modello *.example.com, utilizza il nome dell'host. In caso contrario, utilizzare MyApp.

var app = express(); var AWSXRay = require('aws-xray-sdk'); app.use(AWSXRay.express.openSegment('MyApp')); AWSXRay.middleware.enableDynamicNaming('*.example.com'); app.get('/', function (req, res) { res.render('index'); }); app.use(AWSXRay.express.closeSegment());