Instrumentieren von eingehenden HTTP-Anforderungen mit dem X-Ray SDK for .NET - AWS X-Ray

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.

Instrumentieren von eingehenden HTTP-Anforderungen mit dem X-Ray SDK for .NET

Sie können mit dem X-Ray SDK eingehende HTTP-Anforderungen verfolgen, die Ihre Anwendung auf einer EC2-Instance in Amazon EC2 bedient, verfolgen.AWS Elastic Beanstalkoder Amazon ECS.

Verwenden Sie einen Meldungs-Handler, um eingehende HTTP-Anforderungen zu instrumentieren. Wenn Sie den X-Ray Meldungshandler Ihrer Anwendung hinzufügen, erstellt das X-Ray SDK for .NET ein Segment für jede stichprobenartige Anforderung. Dieses Segment umfasst Dauer, Methode und Status der HTTP-Anforderung. Die zusätzliche Instrumentierung schafft Untersegmente zu diesem Segment.

Anmerkung

FürAWS LambdaFunktionen erstellt Lambda ein Segment für jede stichprobenartige Anforderung. Weitere Informationen finden Sie unter AWS Lambda und AWS X-Ray.

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 basierend auf dem Host-Header in der eingehenden Anforderung dynamisch benennt. Mit der dynamischen Benennung können Sie Traces basierend auf dem Domänennamen in der Anforderung gruppieren und einen Standardnamen anwenden, wenn der Name nicht mit einem erwarteten Muster übereinstimmt (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, übernimmt X-Ray die Client-IP von derX-Forwarded-ForHeader in der Anforderung statt von der Quell-IP im IP-Paket. Die Client-IP, die für eine weitergeleitete Anfrage aufgezeichnet wird, kann gefälscht werden und sollte daher nicht vertrauenswürdig sein.

Der Meldungshandler erzeugt für jede eingehende Anforderung ein Segment mit einem http-Block, der die folgenden Informationen enthält:

  • HTTP method (HTTP-Methode)- HOLEN, POSTEN, PUTEN, LÖSCHEN usw.

  • Client-Adresse— Die IP-Adresse des Clients, der die Anforderung gesendet hat.

  • Antwortcode— Der HTTP-Antwortcode für die abgeschlossene Anforderung.

  • Timing— Die Startzeit (zu der die Anforderung empfangen wurde) und die Endzeit (zu der die Antwort gesendet wurde).

  • Benutzer-Agent— Dieuser-agentaus der Anfrage.

  • Länge des Inhalts— Diecontent-lengthaus der Antwort.

Instrumentierung eingehender Anforderungen (.NET)

Um die von Ihrer Anwendung verarbeiteten Anforderungen zu instrumentieren, rufen Sie in der Methode RegisterXRay Ihrer Init-Datei die Methode global.asax auf.

Beispiel global.asax – Meldungshandler
using System.Web.Http; using Amazon.XRay.Recorder.Handlers.AspNet; namespace SampleEBWebApplication { public class MvcApplication : System.Web.HttpApplication { public override void Init() { base.Init(); AWSXRayASPNET.RegisterXRay(this, "MyApp"); } } }

Instrumentierung eingehender Anforderungen (.NET Core)

Um die von Ihrer Anwendung bearbeiteten Anforderungen zu instrumentieren, rufen SieUseXRay-Methode vor jeder anderen Middleware imConfigureMethode Ihrer Startup-Klasse als idealerweise sollte X-Ray Middleware die erste Middleware sein, die die Anforderung und die letzte Middleware verarbeitet, um die Antwort in der Pipeline zu verarbeiten.

Anmerkung

Wenn Sie für .NET Core 2.0 einenUseExceptionHandlerMethode in der Anwendung, stellen Sie sicher, dass Sie aufrufenUseXRaynachUseExceptionHandlerMethode, um sicherzustellen, dass Ausnahmen aufgezeichnet werden.

Beispiel Startup.cs
.NET Core 2.1 and above
using Microsoft.AspNetCore.Builder; public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseXRay("MyApp"); // additional middleware ... }
.NET Core 2.0
using Microsoft.AspNetCore.Builder; public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseExceptionHandler("/Error"); app.UseXRay("MyApp"); // additional middleware ... }

Die UseXRay-Methode kann außerdem ein Konfigurationsobjekt als zweites Argument entgegennehmen.

app.UseXRay("MyApp", configuration);

Konfiguration einer Segmentbenennungsstrategie

AWS X-Rayverwendet eineService-Nameum Ihre Anwendung zu identifizieren und von den anderen Anwendungen, Datenbanken, externen APIs zu unterscheiden undAWSRessourcen, die Ihre Anwendung verwendet. Wenn das X-Ray SDK Segmente für eingehende Anfragen generiert, zeichnet es den Dienstnamen Ihrer Anwendung im Segment aufNamen-Feldaus.

Das X-Ray SDK kann Segmente nach dem Hostnamen im HTTP-Anforderungsheader benennen. Dieser Header kann jedoch gefälscht werden, was zu unerwarteten Knoten in Ihrer Service-Map führen kann. Um zu verhindern, dass das SDK Segmente aufgrund von Anforderungen 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 bereitstellt, können Sie das SDK so konfigurieren, dass es eine dynamische Benennungsstrategie verwendet, die dies in Segmentnamen widerspiegelt. 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, die dies nicht tun.

Beispiel: Sie haben eine einzige Anwendung, die Anforderungen an drei Sub-Domains sendet —www.example.com,api.example.com, undstatic.example.comaus. Sie können eine dynamische Benennungsstrategie mit dem Muster verwenden*.example.comum Segmente für jede Subdomain mit einem anderen Namen zu identifizieren, was zu drei Serviceknoten auf der Service-Map führt. Wenn Ihre Anwendung Anfragen mit einem Hostnamen erhält, der nicht mit dem Muster übereinstimmt, wird auf der Service-Map ein vierter Knoten mit einem von Ihnen angegebenen Fallback-Namen angezeigt.

Wenn Sie denselben Namen für alle Segmente verwenden möchten, geben Sie bei der Initialisierung des Message-Handlers den Namen Ihrer Anwendung, wie im vorherigen Abschnitt gezeigt, ein. Dies hat den gleichen Effekt wie das Anlegen einer FixedSegmentNamingStrategy und das Übergeben an die RegisterXRay-Methode.

AWSXRayASPNET.RegisterXRay(this, new FixedSegmentNamingStrategy("MyApp"));
Anmerkung

Sie können den mit der AWS_XRAY_TRACING_NAME-Umgebungsvariablen in Code definierten standardmäßigen Dienstnamen überschreiben.

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 erstellen Sie eine DynamicSegmentNamingStrategy und übergeben diese an die RegisterXRay-Methode.

AWSXRayASPNET.RegisterXRay(this, new DynamicSegmentNamingStrategy("MyApp", "*.example.com"));