

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Rastreo de las solicitudes entrantes con el SDK de X-Ray para middleware de Python
<a name="xray-sdk-python-middleware"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, donde AWS se limitarán las versiones de X-Ray SDK y Daemon para abordar únicamente los problemas de seguridad. Para obtener más información sobre la cronología del soporte, consulte [Cronología de X-Ray SDK y Daemon Support](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Cuando añade el middleware a su aplicación y configura un nombre de segmento, el SDK de X-Ray para Python crea un segmento para cada solicitud muestreada. Este segmento incluye el momento, el método y la disposición de la solicitud HTTP. La instrumentación adicional crea subsegmentos en este segmento.

El SDK de X-Ray para Python admite el siguiente middleware para instrumentar solicitudes HTTP entrantes: 
+ Django
+ Flask
+ Bottle

**nota**  
Para AWS Lambda las funciones, Lambda crea un segmento para cada solicitud muestreada. Para obtener más información, consulte [AWS Lambda y AWS X-Ray](xray-services-lambda.md).

Consulte [Entorno de trabajo](scorekeep-lambda.md#scorekeep-lambda-worker) para ver un ejemplo de una función de Python instrumentada en Lambda.

Para scripts o aplicaciones Python en otros marcos de trabajo, puede [crear los segmentos manualmente](#xray-sdk-python-middleware-manual).

Cada segmento tiene un nombre que identifica la aplicación en el mapa de servicio. El nombre del segmento se puede asignar de forma estática o se puede configurar el SDK para que le asigne un nombre dinámico en función del encabezado del host de la solicitud entrante. La nomenclatura dinámica permite agrupar los rastros en función del nombre de dominio de la solicitud y aplicar un nombre predeterminado si el nombre no coincide con el patrón esperado (por ejemplo, si el encabezado del host está falsificado).

**Solicitudes reenviadas**  
Si un equilibrador de carga u otro intermediario reenvía una solicitud a la aplicación, X-Ray toma la IP de cliente del encabezado `X-Forwarded-For` de la solicitud en lugar de tomar la IP de origen del paquete IP. La IP de cliente que se graba para una solicitud reenviada puede estar falsificada, por lo que no se debe confiar en ella.

Cuando se reenvía una solicitud, el SDK crea un campo adicional en el segmento para indicar que se realizó esta acción. Si el segmento contiene el campo `x_forwarded_for` configurado en `true`, el IP del cliente se obtiene a partir del encabezado `X-Forwarded-For` en la solicitud HTTP.

El middleware crea un segmento para cada solicitud entrante con un bloque `http` que contiene la siguiente información:
+ **Método HTTP**: GET, POST, PUT, DELETE, etc.
+ **Dirección del cliente**: la dirección IP del cliente que envió la solicitud.
+ **Código de respuesta**: el código de respuesta HTTP para la solicitud finalizada.
+ **Intervalo**: la hora de inicio (cuando se recibió la solicitud) y la hora de finalización (cuando se envió la respuesta).
+ **Agente del usuario**: el `user-agent` de la solicitud.
+ **Longitud del contenido**: la `content-length` de la respuesta.

**Topics**
+ [Agregar el middleware a su aplicación (Django)](#xray-sdk-python-adding-middleware-django)
+ [Agregar el middleware a su aplicación (flask)](#xray-sdk-python-adding-middleware-flask)
+ [Agregar el middleware a su aplicación (Bottle)](#xray-sdk-python-adding-middleware-bottle)
+ [Instrumentación manual del código de Python](#xray-sdk-python-middleware-manual)
+ [Configuración de una estrategia de nomenclatura de segmentos](#xray-sdk-python-middleware-naming)

## Agregar el middleware a su aplicación (Django)
<a name="xray-sdk-python-adding-middleware-django"></a>

Añada el middleware a la lista `MIDDLEWARE` en su archivo `settings.py`. El middleware de X-Ray debe ser la primera línea de su archivo `settings.py` para garantizar que se registren las solicitudes que fallan en otros middleware.

**Example settings.py: SDK de X-Ray para middleware de 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'
]
```

Añada la aplicación Django del SDK de X-Ray a la lista `INSTALLED_APPS` de su archivo `settings.py`. Eso permitirá configurar la grabadora de X-Ray durante el inicio de la aplicación.

**Example settings.py: aplicación Django del SDK de X-Ray para Python**  

```
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',
]
```

Configure un nombre de segmento en su [`settings.py` archivo](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django).

**Example settings.py: nombre de segmento**  

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

Esto indica a la grabadora de X-Ray que rastree solicitudes servidas por la aplicación Django con el porcentaje de muestreo predeterminado. Puede [configurar la grabadora con el archivo de configuración de Django](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django) para aplicar reglas de muestreo personalizadas o cambiar otros ajustes.

**nota**  
Dado que se transfieren `plugins` como tupla, asegúrese de incluir una `,` después al especificar un único complemento. Por ejemplo, `plugins = ('EC2Plugin',)` 

## Agregar el middleware a su aplicación (flask)
<a name="xray-sdk-python-adding-middleware-flask"></a>

Para instrumentar su aplicación Flask, en primer lugar configure un nombre de segmento en el `xray_recorder`. A continuación, utilice la función `XRayMiddleware` para aplicar un parche a su aplicación Flask en código.

**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)
```

Esto indica a la grabadora de X-Ray que rastree solicitudes servidas por la aplicación Flask con el porcentaje de muestreo predeterminado. Puede [configurar la grabadora en código](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code) para aplicar reglas de muestreo personalizadas o cambiar otros ajustes.

## Agregar el middleware a su aplicación (Bottle)
<a name="xray-sdk-python-adding-middleware-bottle"></a>

Para instrumentar su aplicación Bottle, en primer lugar configure un nombre de segmento en el `xray_recorder`. A continuación, utilice la función `XRayMiddleware` para aplicar un parche a su aplicación Bottle en código.

**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))
```

Esto indica a la grabadora de X-Ray que rastree solicitudes servidas por la aplicación Bottle con el porcentaje de muestreo predeterminado. Puede [configurar la grabadora en código](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code) para aplicar reglas de muestreo personalizadas o cambiar otros ajustes.

## Instrumentación manual del código de Python
<a name="xray-sdk-python-middleware-manual"></a>

Si no utiliza Django o Flask, puede crear segmentos manualmente. Puede crear un segmento para cada solicitud entrante o crear segmentos en torno a clientes HTTP o AWS SDK parcheados para proporcionar un contexto que permita a la grabadora añadir subsegmentos.

**Example main.py: instrumentación manual**  

```
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()
```

## Configuración de una estrategia de nomenclatura de segmentos
<a name="xray-sdk-python-middleware-naming"></a>

AWS X-Ray utiliza un *nombre de servicio* para identificar la aplicación y distinguirla del resto de aplicaciones, bases de datos, recursos externos APIs y otros AWS recursos que utiliza la aplicación. Cuando el SDK de X-Ray genera segmentos para las solicitudes entrantes, registra el nombre del servicio de la aplicación en el [campo de nombre](xray-api-segmentdocuments.md#api-segmentdocuments-fields) del segmento.

El SDK de X-Ray puede nombrar los segmentos utilizando el nombre de host en el encabezado de la solicitud HTTP. Sin embargo, este encabezado se puede falsificar, lo que podría provocar nodos inesperados en el mapa de servicio. Para evitar que el SDK nombre los segmentos de forma incorrecta debido a que las solicitudes tienen encabezados de host falsificados, debe especificar un nombre predeterminado para las solicitudes entrantes.

Si la aplicación atiende solicitudes de varios dominios, puede configurar el SDK para que utilice una estrategia de nomenclatura dinámica que refleje esto en los nombres de los segmentos. Una estrategia de nomenclatura dinámica permite al SDK usar el nombre de host para las solicitudes que coinciden con un patrón esperado y aplicar el nombre predeterminado a las solicitudes que no coincidan.

Por ejemplo, es posible que tenga una sola aplicación que atienda solicitudes a tres subdominios: `www.example.com`, `api.example.com` y `static.example.com`. Puede usar una estrategia de nomenclatura dinámica con el patrón `*.example.com` para identificar los segmentos de cada subdominio con un nombre diferente, lo que da como resultado tres nodos de servicio en el mapa de servicio. Si su aplicación recibe solicitudes con un nombre de host que no coincide con el patrón, verá un cuarto nodo en el mapa de servicio con el nombre alternativo que especifique.

Si desea utilizar el mismo nombre para todos los segmentos de solicitud, especifique el nombre de la aplicación cuando configure la grabadora, como se muestra en las [secciones anteriores](#xray-sdk-python-adding-middleware-django).

Una estrategia de nomenclatura dinámica define un patrón con el que deben coincidir los nombres de host y un nombre predeterminado que se utiliza si el nombre de host de la solicitud HTTP no coincide con el patrón. Para nombrar segmentos de forma dinámica en Django, añada la configuración `DYNAMIC_NAMING` a su archivo [settings.py](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django).

**Example settings.py: nomenclatura dinámica**  

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

Puede utilizar "\$1" en el patrón para buscar coincidencia con cualquier cadena o "?" para buscar coincidencias con cualquier carácter único. Para Flask, [configure la grabadora en código](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code).

**Example main.py: nombre de segmento**  

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

**nota**  
Puede anular el nombre de servicio predeterminado que ha definido en el código mediante la `AWS_XRAY_TRACING_NAME`variable de entorno[Variables de entorno](xray-sdk-python-configuration.md#xray-sdk-python-configuration-envvars).