Nachverfolgen eingehender Anfragen mit der Middleware des X-Ray-SDK für Ruby - 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.

Nachverfolgen eingehender Anfragen mit der Middleware des X-Ray-SDK für Ruby

Sie können das X-Ray-SDK verwenden, um eingehende HTTP-Anforderungen zu verfolgen, die Ihre Anwendung auf einer EC2-Instance in Amazon EC2 AWS Elastic Beanstalk oder Amazon ECS bedient.

Wenn Sie Rails einsetzen, verwenden Sie die Rails-Middleware, um eingehenden HTTP-Anforderungen zu instrumentieren. Wenn Sie die Middleware zu Ihrer Anwendung hinzufügen und einen Segmentnamen konfigurieren, erstellt das X-Ray SDK for Ruby ein Segment für jede Stichprobenanforderung. Alle durch eine zusätzliche Instrumentierung erstellten Segmente werden zu Untersegmenten des Segments auf Anfrageebene, das Informationen über die HTTP-Anforderung und Antwort bereitstellt. Diese Informationen umfassen Dauer, Methode und Status der Anfrage.

Jedes Segment hat einen Namen, der Ihre Anwendung in der Service-Übersicht identifiziert. Das Segment kann statisch benannt werden, oder Sie können das SDK so konfigurieren, dass es es dynamisch auf der Grundlage des Host-Headers in der eingehenden Anforderung benannt wird. Mit der dynamischen Benennung können Sie Ablaufverfolgungen 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 Zwischendienst eine Anfrage an Ihre Anwendung weiterleitet, nimmt X-Ray die Client-IP aus dem -X-Forwarded-ForHeader in der Anfrage und nicht aus der Quell-IP im IP-Paket. Die Client-IP, die für eine weitergeleitete Anforderung aufgezeichnet wird, kann gefälscht werden, daher sollte sie nicht vertrauenswürdig sein.

Wenn eine Anforderung weitergeleitet wird, legt das SDK ein zusätzliches Feld im Segment fest, um dies anzuzeigen. Wenn das Segment das auf x_forwarded_for eingestellte Feld enthälttrue, wurde die Client-IP aus dem -X-Forwarded-ForHeader in der HTTP-Anforderung ü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 Anforderung gesendet hat.

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

  • Timing – Die Startzeit (als die Anforderung empfangen wurde) und die Endzeit (als die Antwort gesendet wurde).

  • Benutzeragent – Die user-agent aus der Anforderung.

  • Inhaltslänge – Die content-length aus der Antwort.

Verwenden der Rails-Middleware

Um die Middleware zu verwenden, aktualisieren Sie Ihre Gemfile-Datei, sodass sie das geforderte railtie enthält.

Beispiel Gemfile – Rails
gem 'aws-xray-sdk', require: ['aws-xray-sdk/facets/rails/railtie']

Um die Middleware zu verwenden, müssen Sie den Recorder auch mit einem Namen konfigurieren, der die Anwendung in der Ablaufverfolgungszuordnung darstellt.

Beispiel config/initializers/aws_xray.rb
Rails.application.config.xray = { name: 'my app' }

Code manuell instrumentieren

Wenn Sie Rails nicht verwenden, erstellen Sie Segmente manuell. Sie können für jede eingehende Anfrage ein Segment erstellen oder Segmente um gepatchte HTTP- oder AWS SDK-Clients erstellen, um dem Recorder Kontext zum Hinzufügen von Untersegmenten bereitzustellen.

# Start a segment segment = XRay.recorder.begin_segment 'my_service' # Start a subsegment subsegment = XRay.recorder.begin_subsegment 'outbound_call', namespace: 'remote' # Add metadata or annotation here if necessary my_annotations = { k1: 'v1', k2: 1024 } segment.annotations.update my_annotations # Add metadata to default namespace subsegment.metadata[:k1] = 'v1' # Set user for the segment (subsegment is not supported) segment.user = 'my_name' # End segment/subsegment XRay.recorder.end_subsegment XRay.recorder.end_segment

Konfiguration einer Segmentbenennungsstrategie

AWS X-Ray verwendet einen Servicenamen, um Ihre Anwendung zu identifizieren und sie von den anderen Anwendungen, Datenbanken, externen APIs und AWS Ressourcen zu unterscheiden, die Ihre Anwendung verwendet. Wenn das X-Ray-SDK Segmente für eingehende Anfragen generiert, zeichnet es den Servicenamen Ihrer Anwendung im Namensfeld des Segments auf.

Das X-Ray-SDK kann Segmente nach dem Hostnamen im HTTP-Anfrage-Header benennen. Dieser Header kann jedoch gefälscht werden, was zu unerwarteten Knoten in Ihrer Service-Übersicht 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 Anforderungen für mehrere Domains bedient, 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 Anforderungen zu verwenden, die einem erwarteten Muster entsprechen, und den Standardnamen auf Anforderungen anzuwenden, die dies nicht tun.

Sie können beispielsweise eine einzelne Anwendung haben, die Anforderungen an drei Subdomänen verarbeitet – www.example.comapi.example.com, und static.example.com. Sie können eine dynamische Benennungsstrategie mit dem Muster verwenden, *.example.com um Segmente für jede Subdomäne mit einem anderen Namen zu identifizieren, was zu drei Serviceknoten auf der Service-Übersicht führt. Wenn Ihre Anwendung Anforderungen mit einem Hostnamen empfängt, der nicht dem Muster entspricht, sehen Sie auf der Service-Übersicht einen vierten Knoten mit einem von Ihnen angegebenen Fallback-Namen.

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 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. Um Segmente dynamisch zu benennen, geben Sie ein Namensmuster im Config-Hash an.

Beispiel main.rb – Dynamische Benennung
config = { naming_pattern: '*mydomain*', name: 'my app', } XRay.recorder.configure(config)

Sie können "*" im Muster verwenden, um eine Übereinstimmung mit einer beliebigen Zeichenfolge zu erzielen, oder "?" für die Übereinstimmung mit einem einzelnen Zeichen.

Anmerkung

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