

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 arrivo con il middleware X-Ray SDK per Python
<a name="xray-sdk-python-middleware"></a>

**Nota**  
Avviso di SDK/Daemon manutenzione a raggi X: il 25 febbraio 2026, X-Ray SDKs/Daemon entrerà in modalità di manutenzione, in cui AWS limiterà le versioni di AWS X-Ray SDK e Daemon per risolvere solo problemi di sicurezza. Per ulteriori informazioni sulla tempistica del supporto, consulta. [Cronologia di X-Ray SDK e Daemon Support](xray-sdk-daemon-timeline.md) Ti consigliamo di migrare a. OpenTelemetry Per ulteriori informazioni sulla migrazione a OpenTelemetry, vedere [Migrazione dalla strumentazione a raggi X](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html) alla strumentazione. OpenTelemetry 

Quando aggiungi il middleware all'applicazione e configuri il nome di un segmento, X-Ray SDK for Python 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.

L'X-Ray SDK per Python supporta il seguente middleware per strumentare le richieste HTTP in arrivo: 
+ Django
+ Flask
+ Bottle

**Nota**  
Per quanto riguarda AWS Lambda le funzioni, Lambda crea un segmento per ogni richiesta campionata. Per ulteriori informazioni, consulta [AWS Lambda e AWS X-Ray](xray-services-lambda.md).

Vedi un [Worker](scorekeep-lambda.md#scorekeep-lambda-worker) esempio di funzione Python strumentata in Lambda.

Per gli script o le applicazioni Python su altri framework, puoi [creare i segmenti manualmente](#xray-sdk-python-middleware-manual).

Ogni segmento ha un nome che identifica l'applicazione nella mappa dei servizi. Il segmento può essere denominato staticamente oppure è possibile configurare l'SDK per denominarlo dinamicamente in base all'intestazione dell'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 dell'host è falsificata).

**Richieste inoltrate**  
Se un sistema di bilanciamento del carico o un altro intermediario inoltra una richiesta all'applicazione, X-Ray prende l'IP del client dall'`X-Forwarded-For`intestazione della richiesta anziché dall'IP di origine nel pacchetto IP. L'IP del client registrato per una richiesta inoltrata può essere falsificato, quindi non dovrebbe essere considerato attendibile.

Quando viene inoltrata una richiesta, l'SDK imposta un campo aggiuntivo nel segmento per indicarlo. Se il segmento contiene il campo `x_forwarded_for` impostato su`true`, l'IP del client è stato preso dall'`X-Forwarded-For`intestazione della richiesta HTTP.

Il middleware crea un segmento per ogni richiesta in entrata con un blocco `http` che contiene le informazioni riportate qui di seguito:
+ **Metodo HTTP**: GET, POST, PUT, DELETE, ecc.
+ **Indirizzo client**: l'indirizzo IP del client che ha inviato la richiesta.
+ **Codice di risposta**: il codice di risposta HTTP per la richiesta completata.
+ **Tempistica**: l'ora di inizio (quando è stata ricevuta la richiesta) e l'ora di fine (quando è stata inviata la risposta).
+ **Agente utente**: il `user-agent` codice della richiesta.
+ **Lunghezza del contenuto**: il `content-length` risultato della risposta.

**Topics**
+ [Aggiunta del middleware all'applicazione (Django)](#xray-sdk-python-adding-middleware-django)
+ [Aggiunta del middleware all'applicazione (flask)](#xray-sdk-python-adding-middleware-flask)
+ [Aggiunta del middleware all'applicazione (Bottle)](#xray-sdk-python-adding-middleware-bottle)
+ [Analisi manuale del codice Python](#xray-sdk-python-middleware-manual)
+ [Configurazione di una strategia di denominazione dei segmenti](#xray-sdk-python-middleware-naming)

## Aggiunta del middleware all'applicazione (Django)
<a name="xray-sdk-python-adding-middleware-django"></a>

Aggiungi il middleware all'elenco `MIDDLEWARE` nel tuo file `settings.py`. Il middleware X-Ray dovrebbe essere presente nella prima riga del tuo file `settings.py` per assicurarti che le richieste che non ricadano sotto il controllo di altri middleware quando vengono registrate.

**Example settings.py - X-Ray SDK per middleware Python**  

```
MIDDLEWARE = [
    'aws_xray_sdk.ext.django.middleware.XRayMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware'
]
```

Aggiungi l'app X-Ray SDK Django all'`INSTALLED_APPS`elenco del tuo file. `settings.py` Ciò consentirà di configurare il registratore X-Ray durante l'avvio dell'app.

**Example settings.py - X-Ray SDK per l'app Python Django**  

```
INSTALLED_APPS = [
    'aws_xray_sdk.ext.django',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
```

Configurazione di un nome di segmento nel tuo [file `settings.py`](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django).

**Example settings.py — Nome del segmento**  

```
XRAY_RECORDER = {
    'AWS_XRAY_TRACING_NAME': 'My application',
    'PLUGINS': ('EC2Plugin',),
}
```

Questo dice al registratore X-Ray di tracciare le richieste servite dall'applicazione Django con la frequenza di campionamento predefinita. Puoi [configurare il file delle impostazioni del registratore Django](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django) affinché applichi le regole di campionatura personalizzate o modificare altre impostazioni.

**Nota**  
Poiché `plugins` vengono passate come tupla, assicuratevi di includere un finale quando specificate un singolo plugin. `,` Ad esempio, `plugins = ('EC2Plugin',)` 

## Aggiunta del middleware all'applicazione (flask)
<a name="xray-sdk-python-adding-middleware-flask"></a>

Per analizzare la tua applicazione, prima di tutto configura un nome di segmento in `xray_recorder`. Quindi, utilizza la funzione `XRayMiddleware` per applicare una patch al codice dell'applicazione Flask.

**Example app.py**  

```
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.ext.flask.middleware import XRayMiddleware

app = Flask(__name__)

xray_recorder.configure(service='My application')
XRayMiddleware(app, xray_recorder)
```

Questo indica al registratore X-Ray di tracciare le richieste servite dall'applicazione Flask con la frequenza di campionamento predefinita. Puoi [configurare il registratore all'interno del codice](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code) affinché applichi le regole di campionatura personalizzate o modificare altre impostazioni.

## Aggiunta del middleware all'applicazione (Bottle)
<a name="xray-sdk-python-adding-middleware-bottle"></a>

Per analizzare l'applicazione Bottle, prima di tutto configura un nome di segmento in `xray_recorder`. Quindi, utilizza la funzione `XRayMiddleware` per applicare una patch al codice dell'applicazione Bottle.

**Example app.py**  

```
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.ext.bottle.middleware import XRayMiddleware
 
app = Bottle()
 
xray_recorder.configure(service='fallback_name', dynamic_naming='My application')
app.install(XRayMiddleware(xray_recorder))
```

Questo indica al registratore X-Ray di tracciare le richieste servite dall'applicazione Bottle con la frequenza di campionamento predefinita. Puoi [configurare il registratore all'interno del codice](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code) affinché applichi le regole di campionatura personalizzate o modificare altre impostazioni.

## Analisi manuale del codice Python
<a name="xray-sdk-python-middleware-manual"></a>

Se non utilizzi Django o Flask, puoi creare i segmenti manualmente. È possibile creare un segmento per ogni richiesta in arrivo o creare segmenti attorno ai client HTTP o AWS SDK con patch per fornire al registratore il contesto in cui aggiungere sottosegmenti.

**Example main.py — Strumentazione manuale**  

```
from aws_xray_sdk.core import xray_recorder

# Start a segment
segment = xray_recorder.begin_segment('segment_name')
# Start a subsegment
subsegment = xray_recorder.begin_subsegment('subsegment_name')

# Add metadata and annotations
segment.put_metadata('key', dict, 'namespace')
subsegment.put_annotation('key', 'value')

# Close the subsegment and segment
xray_recorder.end_subsegment()
xray_recorder.end_segment()
```

## Configurazione di una strategia di denominazione dei segmenti
<a name="xray-sdk-python-middleware-naming"></a>

AWS X-Ray utilizza un *nome di servizio* per identificare l'applicazione e distinguerla dalle altre applicazioni, database, AWS risorse esterne APIs e utilizzate dall'applicazione. [Quando X-Ray SDK genera segmenti per le richieste in entrata, registra il nome del servizio dell'applicazione nel campo del nome del segmento.](xray-api-segmentdocuments.md#api-segmentdocuments-fields)

L'X-Ray SDK 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 dei servizi. Per evitare che l'SDK nomini i segmenti in modo errato a causa di richieste con intestazioni host contraffatte, è necessario specificare un nome predefinito per le richieste in entrata.

Se la tua applicazione soddisfa le richieste per più domini, puoi configurare l'SDK in modo che utilizzi una strategia di denominazione dinamica che rifletta questo aspetto nei nomi dei segmenti. Una strategia di denominazione dinamica consente all'SDK di utilizzare il nome host per le richieste che corrispondono a uno schema previsto e di applicare il nome predefinito alle richieste che non lo fanno.

Ad esempio, potresti avere una singola applicazione che serve le richieste a tre sottodomini:, e. `www.example.com` `api.example.com` `static.example.com` È possibile utilizzare una strategia di denominazione dinamica con lo schema `*.example.com` per identificare i segmenti per ogni sottodominio con un nome diverso, ottenendo tre nodi di servizio sulla mappa dei servizi. Se l'applicazione riceve richieste con un nome host che non corrisponde allo schema, sulla mappa dei servizi verrà visualizzato un quarto nodo con un nome di fallback specificato dall'utente.

Per utilizzare lo stesso nome per tutti i segmenti della richiesta, specifica il nome della tua applicazione quando configuri il registratore, come illustrato [nelle sezioni precedenti](#xray-sdk-python-adding-middleware-django).

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 in modo dinamico i segmenti in Django, aggiungere l'impostazione `DYNAMIC_NAMING` al tuo file [settings.py](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django).

**Example settings.py — Denominazione dinamica**  

```
XRAY_RECORDER = {
    'AUTO_INSTRUMENT': True,
    'AWS_XRAY_TRACING_NAME': 'My application',
    'DYNAMIC_NAMING': '*.example.com',
    'PLUGINS': ('ElasticBeanstalkPlugin', 'EC2Plugin')
}
```

Puoi utilizzare '\$1' nel modello per una corrispondenza con qualsiasi stringa o '?' per una corrispondenza con qualsiasi carattere singolo. Per Flask, [configura il registratore nel codice](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code).

**Example main.py — Nome del segmento**  

```
from aws_xray_sdk.core import xray_recorder
xray_recorder.configure(service='My application')
xray_recorder.configure(dynamic_naming='*.example.com')
```

**Nota**  
È possibile sovrascrivere il nome di servizio predefinito definito nel codice con la [variabile di `AWS_XRAY_TRACING_NAME` ambiente](xray-sdk-python-configuration.md#xray-sdk-python-configuration-envvars).