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.
Verfolgung eingehender Anfragen mit dem X-Ray-SDK SDK for Ruby Ruby-Middleware
Sie können mit dem X-Ray-SDK eingehende HTTP-Anforderungen verfolgen, die Ihre Anwendung auf einer EC2-Instance in Amazon EC2 verarbeitet.AWS Elastic Beanstalkoder Amazon ECS.
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 festlegen, erstellt das X-Ray-SDK SDK for Ruby ein Segment für jede gesampelte Anfrage. 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-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-For
Header 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.
Wenn eine Anforderung weitergeleitet wird, legt das SDK ein zusätzliches Feld im Segment fest, um dies anzugeben. Wenn das Segment das Feld enthältx_forwarded_for
eingestellt auftrue
wurde die Client-IP von derX-Forwarded-For
Header in der HTTP-Anforderung.
Die Middleware erzeugt für jede eingehende Anfrage ein Segment mit einem http
-Block mit folgenden Informationen:
-
HTTP method (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 (zu der die Anforderung empfangen wurde) und die Endzeit (zu der die Antwort gesendet wurde).
-
Benutzer-Agent— Die
user-agent
aus der Anfrage. -
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
Beispiel Gemfile – Rails
gem 'aws-xray-sdk', require: ['aws-xray-sdk/facets/rails/railtie']
Um die Middleware zu verwenden, müssen Sie auch den Recorder mit einem Namen konfigurieren, der die Anwendung in der Service-Map 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 ein Segment für jede eingehende Anforderung erstellen. Oder erstellen Sie können auch Segmente um gepatchte HTTP oderAWSSDK-Clients, um Kontext für den Recorder bereitzustellen, um Teilsegmente hinzuzufügen.
# 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-Rayverwendet einService-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 aufFeld „name“aus.
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 Anfragen an drei Subdomains bereitstellt —www.example.com
,api.example.com
, undstatic.example.com
aus. 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 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 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.