

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Nachverfolgung eingehender Anfragen mit dem X-Ray SDK für Python-Middleware
<a name="xray-sdk-python-middleware"></a>

**Anmerkung**  
 SDK/Daemon X-Ray-Wartungshinweis — Am 25. Februar 2026 wechselt das AWS X-Ray SDKs/Daemon in den Wartungsmodus, in dem die Versionen von X-Ray SDK und Daemon auf Sicherheitsprobleme beschränkt AWS werden. Weitere Informationen zum Zeitplan für den Support finden Sie unter. [Zeitplan für die Support von X-Ray SDK und Daemon](xray-sdk-daemon-timeline.md) Wir empfehlen die Migration zu OpenTelemetry. Weitere Informationen zur Migration zu OpenTelemetry finden Sie unter [Migration von X-Ray-Instrumentierung zu OpenTelemetry Instrumentierung](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Wenn Sie die Middleware zu Ihrer Anwendung hinzufügen und einen Segmentnamen konfigurieren, erstellt das X-Ray SDK für Python für jede gesampelte Anfrage ein Segment. Dieses Segment umfasst Dauer, Methode und Status der HTTP-Anforderung. Die zusätzliche Instrumentierung schafft Untersegmente zu diesem Segment.

Das X-Ray SDK für Python unterstützt die folgende Middleware zur Instrumentierung eingehender HTTP-Anfragen: 
+ Django
+ Flask
+ Bottle

**Anmerkung**  
Für AWS Lambda Funktionen erstellt Lambda für jede abgetastete Anfrage ein Segment. Weitere Informationen finden Sie unter [AWS Lambda und AWS X-Ray](xray-services-lambda.md).

Ein Beispiel [Worker](scorekeep-lambda.md#scorekeep-lambda-worker) für eine in Lambda instrumentierte Python-Funktion finden Sie unter.

Für Skripts oder Python-Anwendungen auf anderen Frameworks können Sie [Segmente manuell erstellen](#xray-sdk-python-middleware-manual).

Jedes Segment hat einen Namen, der Ihre Anwendung in der Service Map identifiziert. Das Segment kann statisch benannt werden, oder Sie können das SDK so konfigurieren, dass es dynamisch auf der Grundlage des Host-Headers in der eingehenden Anfrage benannt wird. Mit der dynamischen Benennung können Sie Traces auf der Grundlage des Domainnamens in der Anfrage gruppieren und einen Standardnamen anwenden, wenn der Name nicht einem erwarteten Muster entspricht (z. B. wenn der Host-Header gefälscht ist).

**Weitergeleitete Anfragen**  
Wenn ein Load Balancer oder ein anderer Vermittler eine Anfrage an Ihre Anwendung weiterleitet, nimmt X-Ray die Client-IP aus dem `X-Forwarded-For` Header in der Anfrage und nicht aus der Quell-IP im IP-Paket. Die Client-IP, die für eine weitergeleitete Anfrage aufgezeichnet wird, kann gefälscht sein und sollte daher nicht als vertrauenswürdig eingestuft werden.

Wenn eine Anfrage weitergeleitet wird, legt das SDK ein zusätzliches Feld im Segment fest, um dies anzuzeigen. Wenn das Segment das Feld enthält, das auf `x_forwarded_for` gesetzt ist`true`, wurde die Client-IP aus dem `X-Forwarded-For` Header in der HTTP-Anfrage übernommen.

Die Middleware erzeugt für jede eingehende Anfrage ein Segment mit einem `http`-Block mit folgenden Informationen:
+ **HTTP-Methode** — GET, POST, PUT, DELETE usw.
+ **Client-Adresse** — Die IP-Adresse des Clients, der die Anfrage gesendet hat.
+ **Antwortcode** — Der HTTP-Antwortcode für die abgeschlossene Anfrage.
+ **Timing** — Die Startzeit (als die Anfrage empfangen wurde) und die Endzeit (als die Antwort gesendet wurde).
+ **Benutzeragent** — Der `user-agent` aus der Anfrage.
+ **Länge des Inhalts** — Die Länge `content-length` der Antwort.

**Topics**
+ [Hinzufügen der Middleware zu Ihrer Anwendung (Django)](#xray-sdk-python-adding-middleware-django)
+ [Hinzufügen der Middleware zu Ihrer Anwendung (Flask)](#xray-sdk-python-adding-middleware-flask)
+ [Hinzufügen der Middleware zu Ihrer Anwendung (Bottle)](#xray-sdk-python-adding-middleware-bottle)
+ [Manuelle Instrumentierung von Python-Code](#xray-sdk-python-middleware-manual)
+ [Konfiguration einer Segmentbenennungsstrategie](#xray-sdk-python-middleware-naming)

## Hinzufügen der Middleware zu Ihrer Anwendung (Django)
<a name="xray-sdk-python-adding-middleware-django"></a>

Fügen Sie die Middleware zur `MIDDLEWARE`-Liste in Ihrer `settings.py`-Datei hinzu. Die X-Ray-Middleware sollte die erste Zeile in Ihrer `settings.py`-Datei darstellen, um sicherzugehen, dass Anfragen, die in anderen Middlewares fehlschlagen, aufgezeichnet werden.

**Example settings.py — X-Ray-SDK für Python-Middleware**  

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

Fügen Sie die X-Ray SDK Django-App zur `INSTALLED_APPS` Liste in Ihrer `settings.py` Datei hinzu. Dadurch kann der Röntgenrekorder während des Starts Ihrer App konfiguriert werden.

**Example settings.py — X-Ray-SDK für die Python-Django-App**  

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

Konfigurieren Sie einen Segmentnamen in Ihrer [`settings.py`-Datei](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django).

**Example settings.py — Segmentname**  

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

Dadurch wird der X-Recorder angewiesen, Anfragen, die von Ihrer Django-Anwendung bedient werden, mit der Standard-Abtastrate zu verfolgen. Sie können [den Recorder in Ihrer Django-Einstellungsdatei konfigurieren](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django), um benutzerdefinierte Samplingregeln anzuwenden oder andere Einstellungen zu ändern.

**Anmerkung**  
Da `plugins` sie als Tupel übergeben werden, achten Sie darauf, dass Sie `,` bei der Angabe eines einzelnen Plugins ein abschließendes Zeichen angeben. Beispiel: `plugins = ('EC2Plugin',)` 

## Hinzufügen der Middleware zu Ihrer Anwendung (Flask)
<a name="xray-sdk-python-adding-middleware-flask"></a>

Um Ihre Flask-Anwendung zu instrumentieren, konfigurieren Sie zunächst einen Segmentnamen im `xray_recorder`. Verwenden Sie dann die `XRayMiddleware`-Funktion zum Patchen Ihrer Flask-Anwendung im Code.

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

Dadurch wird der Röntgenrekorder angewiesen, Anfragen, die von Ihrer Flask-Anwendung bedient werden, mit der Standard-Abtastrate zu verfolgen. Sie können [den Recorder im Code konfigurieren](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code), um benutzerdefinierte Samplingregeln anzuwenden oder andere Einstellungen zu ändern.

## Hinzufügen der Middleware zu Ihrer Anwendung (Bottle)
<a name="xray-sdk-python-adding-middleware-bottle"></a>

Um Ihre Bottle-Anwendung zu instrumentieren, konfigurieren Sie zunächst einen Segmentnamen im `xray_recorder`. Verwenden Sie dann die `XRayMiddleware`-Funktion zum Patchen Ihrer Bottle-Anwendung im Code.

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

Dadurch wird der Röntgenrekorder angewiesen, Anfragen, die von Ihrer Bottle-Anwendung gesendet wurden, mit der Standard-Abtastrate zu verfolgen. Sie können [den Recorder im Code konfigurieren](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code), um benutzerdefinierte Samplingregeln anzuwenden oder andere Einstellungen zu ändern.

## Manuelle Instrumentierung von Python-Code
<a name="xray-sdk-python-middleware-manual"></a>

Wenn Sie weder Django noch Flask verwenden, können Sie Segmente manuell erstellen. Sie können für jede eingehende Anfrage ein Segment erstellen oder Segmente rund um gepatchte HTTP- oder AWS SDK-Clients erstellen, um dem Rekorder Kontext für das Hinzufügen von Untersegmenten zu bieten.

**Example main.py — Manuelle Instrumentierung**  

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

## Konfiguration einer Segmentbenennungsstrategie
<a name="xray-sdk-python-middleware-naming"></a>

AWS X-Ray verwendet einen *Dienstnamen*, um Ihre Anwendung zu identifizieren und sie von den anderen Anwendungen, Datenbanken, externen AWS Ressourcen und Ressourcen zu unterscheiden APIs, die Ihre Anwendung verwendet. Wenn das X-Ray SDK Segmente für eingehende Anfragen generiert, zeichnet es den Dienstnamen Ihrer Anwendung im [Namensfeld des Segments auf](xray-api-segmentdocuments.md#api-segmentdocuments-fields).

Das X-Ray SDK kann Segmente nach dem Hostnamen im HTTP-Anforderungsheader benennen. Dieser Header kann jedoch gefälscht sein, was zu unerwarteten Knoten in Ihrer Service Map führen kann. Um zu verhindern, dass das SDK Segmente aufgrund von Anfragen mit gefälschten Host-Headern falsch benennt, müssen Sie einen Standardnamen für eingehende Anfragen angeben.

Wenn Ihre Anwendung Anfragen für mehrere Domänen bearbeitet, können Sie das SDK so konfigurieren, dass es eine dynamische Benennungsstrategie verwendet, um dies in Segmentnamen widerzuspiegeln. Eine dynamische Benennungsstrategie ermöglicht es dem SDK, den Hostnamen für Anfragen zu verwenden, die einem erwarteten Muster entsprechen, und den Standardnamen auf Anfragen anzuwenden, bei denen dies nicht der Fall ist.

Beispielsweise können Sie über eine einzige Anwendung verfügen, die Anfragen an drei Subdomänen — `www.example.com``api.example.com`, und — bedient. `static.example.com` Sie können eine dynamische Benennungsstrategie mit dem Muster verwenden`*.example.com`, um Segmente für jede Subdomain mit einem anderen Namen zu identifizieren, was zu drei Dienstknoten auf der Service-Map führt. Wenn Ihre Anwendung Anfragen mit einem Hostnamen empfängt, der nicht dem Muster entspricht, wird auf der Service Map ein vierter Knoten mit einem von Ihnen angegebenen Fallback-Namen angezeigt.

Wenn Sie denselben Namen für alle Anfragesegmente verwenden möchten, geben Sie bei der Konfiguration des Recorders den Namen Ihrer Anwendung, wie in den [vorherigen Abschnitten](#xray-sdk-python-adding-middleware-django) gezeigt, ein.

Eine dynamische Benennungsstrategie definiert ein Muster, dem Hostnamen entsprechen sollten, sowie einen Standardnamen, der verwendet wird, wenn der Hostname in der HTTP-Anforderung nicht mit diesem Muster übereinstimmt. Zur dynamischen Segmentbenennung fügen Sie die `DYNAMIC_NAMING`-Einstellung zu Ihrer [settings.py](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-django)-Datei hinzu.

**Example settings.py — Dynamische Benennung**  

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

Sie können "\$1" im Muster verwenden, um eine Übereinstimmung mit einer beliebigen Zeichenfolge zu erzielen, oder "?" für die Übereinstimmung mit einem einzelnen Zeichen. Für Flask [konfigurieren Sie den Recorder im Code](xray-sdk-python-configuration.md#xray-sdk-python-middleware-configuration-code).

**Example main.py — Segmentname**  

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

**Anmerkung**  
Sie können den mit der `AWS_XRAY_TRACING_NAME`-[Umgebungsvariablen](xray-sdk-python-configuration.md#xray-sdk-python-configuration-envvars) in Code definierten standardmäßigen Dienstnamen überschreiben.