AWS X-Ray-Segmentdokumente - 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.

AWS X-Ray-Segmentdokumente

Ein Ablaufverfolgungssegment ist eine JSON-Darstellung einer Anfrage, die Ihrer Anwendung dient. Ein Ablaufverfolgungssegment zeichnet Informationen über die ursprüngliche Anforderung, die Arbeit Ihrer Anwendung vor Ort auf undUntersegmentemit Informationen über nachgelagerte Aufrufe, die Ihre Anwendung machtAWSRessourcen, HTTP-APIs und SQL-Datenbanken.

EIN-Segmentdokumentübermittelt Informationen über ein Segment an X-Ray. Ein Segmentdokument kann bis zu 64 kB sein und ein ganzes Segment mit Untersegmenten, einem Segmentenfragment, das angibt, dass eine Anforderung in Bearbeitung ist, oder einem einzelnen Untersegment, das getrennt gesendet wird, enthalten. Sie können Dokumente X-Ray derPutTraceSegmentsAPI.

X-Ray kompiliert und verarbeitet Segmentdokumente, um abfragbare zu generierenAblaufverfolgungenundvollständige Ablaufverfolgungenauf die Sie zugreifen können, indem Sie dasGetTraceSummariesundBatchGetTracesAPIs und beschreiben. Zusätzlich zu den an X-Ray gesendeten Segmenten und Untersegmenten nutzt der Service die Informationen in Subsegmenten, um zu generierenabgeleitete Segmenteund fügt sie der vollständigen Ablaufverfolgung hinzu. Abgeleitete Segmente spiegeln nachgelagerte Services und Ressourcen in der Service-Übersicht wider.

X-Ray bietet einJSON-Schemafür Segmentdokumente. Sie können das Schema hier herunterladen: xray-segmentdocument-schema-v1.0.0aus. Die im Schema angegebenen Felder und Objekte werden in den folgenden Abschnitten genauer beschrieben.

Eine Untergruppe der Segmentfelder ist zur Nutzung mit Filterausdrücken von X-Ray indiziert. Zum Beispiel: Wenn Sie denuser-Feld auf ein Segment mit einer eindeutigen Kennzeichnung zugreifen können, können Sie nach Segmenten suchen, die in Zusammenhang mit bestimmten Nutzern in der X-Ray-Konsole stehen.GetTraceSummariesAPI. Weitere Informationen finden Sie unter Verwenden von Filterausdrücken für die Suche nach Ablaufverfolgungen in der Konsole.

Wenn Sie Ihre Anwendung mit dem X-Ray -SDK nutzen, generiert das SDK für Sie Segmentdokumente. Anstatt die Segmentdokumente direkt an X-Ray zu senden, übermittelt das SDK sie über einen lokalen UDP-Anschluss direkt an denX-Ray Daemonaus. Weitere Informationen finden Sie unter Senden von Segmentdokumenten an den X-Ray-Daemon.

Segmentfelder

Ein Segment zeichnet Ablaufverfolgungsinformationen über eine Anforderung auf, die Ihrer Anwendung dient. Ein Segment zeichnet mindestens den Namen, die ID, die Anfangszeit, die Ablaufverfolgungs-ID und die Endzeit der Anforderung auf.

Beispiel Minimales vollständiges Segment

{ "name" : "example.com", "id" : "70de5b6f19ff9a0a", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979", "end_time" : 1.478293361449E9 }

Die folgenden Felder sind für Segmente erforderlich oder in einigen Fällen notwendig.

Anmerkung

Der Wert muss aus Zeichenfolgen (bis zu 250 Zeichen) bestehen, soweit nicht anders angegeben.

Erforderliche Segmentfelder

  • name— Der logische Name des Service, der die Anforderungen verarbeitet hat, bis zu200 Zeichenaus. Beispielsweise der Name der Anwendung oder Domäne. Namen dürfen Unicode-Buchstaben, -Ziffern und -Leerzeichen enthalten sowie die folgenden Symbole: _, ., :, /, %, &, #, =, +, \, -, @

  • id— Eine 64-Bit-Kennung für das Segment, die sich von anderen Segmenten in derselben Ablaufverfolgung eindeutig unterscheidet16 hexadezimale Zeichenaus.

  • trace_id— Eine eindeutige Kennung, die alle von einer einzigen Client-Anforderung stammenden Segmente und Untersegmente verbindet.

    Format der Ablaufverfolgungs-ID

    Eine trace_id besteht aus drei durch Bindestriche getrennte Zahlen. Zum Beispiel 1-58406520-a006649127e371903a2de979. Dies umfasst:

    • Die Versionsnummer 1.

    • Die Zeit der ursprünglichen Anforderung als Zeit seit Unix-Epoche und in 8 Hexadezimalziffern ausgedrückt.

      Beispiel: 10:00 Uhr 1. Dezember 2016 PST entspricht einer Epoch-Zeit von 1480615200 Sekunden oder in hexadezimalen Ziffern ausgedrückt 58406520.

    • Eine 96-Bit-Kennzeichnung für die Ablaufverfolgung, global eindeutig, in 24 Hexadezimalziffern.

    Sicherheit der Ablaufverfolgungs-ID

    Ablaufverfolgungs-IDs sind in Antwortheadern sichtbar. Generieren Sie Ablaufverfolgungs-IDs mit einem sicheren Random-Algorithmus, um sicherzustellen, dass Angreifer zukünftige Ablaufverfolgungs-IDs nicht berechnen und keine Anforderungen mit diesen IDs an Ihre Anwendung senden können.

  • start_timeNummerdas ist die Zeit, in Gleitkommasekunden seit Epoche, wann das Segment erstellt wurde. Beispiel: 1480615200.010 oder 1.480615200010E9. Verwenden Sie so viele Dezimalstellen, wie Sie benötigen. Mikrosekundenauflösung ist empfohlen, wenn verfügbar.

  • end_timeNummerdas ist der Zeitpunkt, wann das Segment geschlossen wurde. Beispiel: 1480615200.090 oder 1.480615200090E9. Geben Sie entweder end_time oder in_progress an.

  • in_progressboolesch, setzen Sie auftrueanstatt eineend_timeum aufzuzeichnen, dass ein Segment begonnen, aber nicht abgeschlossen wurde. Wenn Ihre Anwendung eine Anforderung empfängt, die lange dauern wird, senden Sie ein in Bearbeitung befindliches Segment, um den Empfang zu bestätigen. Wenn die Antwort gesendet wird, senden Sie das vollständige Segment zum Überschreiben des in Bearbeitung befindlichen Segments. Senden Sie pro Anforderung nur ein vollständiges Segment und ein oder kein angefangenes Segment.

Service-Namen

Die eines Segmentsnamesollte mit dem Domainnamen oder logischen Namen des Dienstes übereinstimmen, der das Segment generiert. Dies wird jedoch nicht durchgesetzt. Jede Anwendung, die eine Berechtigung für hatPutTraceSegmentskann Segmente mit beliebigem Namen senden.

Die folgenden Felder sind für Segmente optional.

Optionale Segmentfelder

  • service— Ein Objekt mit Informationen zu Ihrer Anwendung.

    • version— Eine Zeichenfolge, die die Version Ihrer Anwendung, welche die Anforderung unterstützt hat, identifiziert.

  • user— Eine Zeichenfolge, die den Benutzer, der die Anforderung gesendet hat, identifiziert.

  • origin— Der Typ vonAWSauf der Ihre Anwendung ausgeführt wird.

    Unterstützte Werte

    • AWS::EC2::Instance— Eine Amazon-EC2-Instance.

    • AWS::ECS::Container— Ein Amazon-ECS-Container.

    • AWS::ElasticBeanstalk::Environment— Eine Elastic Beanstalk-Umgebung.

    Wenn mehrere Werte für Ihre Anwendung gelten, verwenden Sie den spezifischsten. In einer Multicontainer-Docker-Elastic Beanstalk-Umgebung wird Ihre Anwendung beispielsweise auf einem Amazon ECS-Container ausgeführt, der wiederum auf einer Amazon EC2 EC2-Instance ausgeführt wird. In diesem Fall müssen Sie den Ursprung auf AWS::ElasticBeanstalk::Environment festlegen, da die Umgebung das übergeordnete Element der beiden anderen Ressourcen ist.

  • parent_id— Eine Untersegments-ID, die Sie festlegen, wenn die Anforderung von einer instrumentierten Anwendung stammt. Das X-Ray SDK fügt die übergeordnete Untersegments-ID derAblaufverfolgungs-Headerfür Downstream-HTTP-Aufrufe. Bei verschachtelten Untersegmenten kann ein Untersegment ein Segment oder ein Untersegment als übergeordnetes Element haben.

  • httphttp-Objekte mit Informationen über die ursprüngliche HTTP-Anforderung.

  • awsaws-Objekt mit Informationen über denAWSRessource, auf denen Ihre Anwendung die Anforderung bereitstellt.

  • error,throttle,fault, undcauseFehlerFelder, die einen aufgetretenen Fehler angeben und Informationen über die Ausnahme enthalten, die den Fehler verursacht hat.

  • annotationsannotations-Objekt mit Schlüsselwertpaaren, die X-Ray zur Suche indizieren soll.

  • metadatametadata-Objekt mit zusätzlichen Daten, die in einem Segment gespeichert werden sollen.

  • subsegmentsReihevonsubsegmentBuckets.

Untersegmente

Sie können Untersegmente erstellen, um Anrufe aufzuzeichnenAWSDienste und Ressourcen, die Sie mit dem erstellenAWS-SDK, Aufrufe von internen oder externen HTTP-Web-APIs oder SQL-Datenbankanfragen. Sie können auch Untersegmente erstellen, um Code-Blöcke in Ihrer Anwendung zu debuggen oder zu kommentieren. Untersegmente können weitere Untersegmente enthalten, damit ein individuelles Untersegment, das Metadaten über einen internen Funktionsaufruf aufzeichnet, weitere individuelle Untersegmente sowie Untersegmente nachgelagerter Aufrufe umfassen kann.

Ein Untersegment erfasst einen nachgelagerten Aufruf aus der Sicht des Service, der den Aufruf gestartet hat. X-Ray nutzt Untersegmente, um nachgelagerte Services zu identifizieren, die keine Segmente senden und Einträge für sie im Service-Diagramm erstellen.

Ein Untersegment kann in einem vollständigen Segmentdokument eingebettet oder separat gesendet werden. Senden Sie Untersegmente separat, um nachgelagerte Aufrufe für lange andauernde Anforderungen asynchron nachzuverfolgen oder um zu verhindern, dass die maximale Größe des Segmentdokuments überschritten wird.

Beispiel Segment mit eingebettetem Untersegment

Ein unabhängiges Untersegment hat einen type vom subsegment und einen parent_id, der das übergeordnete Segment identifiziert.

{ "trace_id" : "1-5759e988-bd862e3fe1be46a994272793", "id" : "defdfd9912dc5a56", "start_time" : 1461096053.37518, "end_time" : 1461096053.4042, "name" : "www.example.com", "http" : { "request" : { "url" : "https://www.example.com/health", "method" : "GET", "user_agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7", "client_ip" : "11.0.3.111" }, "response" : { "status" : 200, "content_length" : 86 } }, "subsegments" : [ { "id" : "53995c3f42cd8ad8", "name" : "api.example.com", "start_time" : 1461096053.37769, "end_time" : 1461096053.40379, "namespace" : "remote", "http" : { "request" : { "url" : "https://api.example.com/health", "method" : "POST", "traced" : true }, "response" : { "status" : 200, "content_length" : 861 } } } ] }

Für langwierige Anforderungen können Sie ein sich in Bearbeitung befindliches Segment senden, um X-Ray über den Erhalt der Anforderung zu informieren und Untersegmente anschließend zu senden, um diese vor Abschluss der ursprünglichen Anforderung rückzuverfolgen.

Beispiel In Bearbeitung befindliches Segment

{ "name" : "example.com", "id" : "70de5b6f19ff9a0b", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979", "in_progress": true }

Beispiel Unabhängiges Untersegment

Ein unabhängiges Untersegment hat einen type-subsegment, eine trace_id und eine parent_id, die das übergeordnete Segment identifiziert.

{ "name" : "api.example.com", "id" : "53995c3f42cd8ad8", "start_time" : 1.478293361271E9, "end_time" : 1.478293361449E9, "type" : "subsegment", "trace_id" : "1-581cf771-a006649127e371903a2de979" "parent_id" : "defdfd9912dc5a56", "namespace" : "remote", "http" : { "request" : { "url" : "https://api.example.com/health", "method" : "POST", "traced" : true }, "response" : { "status" : 200, "content_length" : 861 } } }

Schließen Sie das Segment nach Abschluss der Anforderung mit einer end_time. Das vollständige Segment überschreibt das sich in Bearbeitung befindliche Segment.

Sie können außerdem Untersegmente für abgeschlossene Anforderungen, die asynchrone Workflows auslösen, getrennt senden. Beispielsweise kann eine Web-API eine OK 200-Antwort, unmittelbar bevor die vom Benutzer angeforderte Arbeit beginnt, zurücksenden. Sobald die Antwort gesendet ist, können Sie ein vollständiges Segment an X-Ray, gefolgt von Untersegmenten für später abgeschlossene Arbeiten, senden. Wie bei Segmenten können Sie auch einen Untersegmentsfragment senden, um den Beginn des Untersegments aufzuzeichnen, und es anschließend mit einem vollständigen Segment überschreiben, sobald ein nachgelagerter Aufruf abgeschlossen ist.

Die folgenden Felder sind für Untersegmente erforderlich oder in einigen Fällen notwendig.

Anmerkung

Werte sind Zeichenfolgen, die aus bis zu 250 Zeichen bestehen, soweit nicht anders angegeben.

Erforderliche Untersegmentsfelder

  • id— Eine 64-Bit-Kennung für das Untersegment, die sich von anderen Segmenten in derselben Ablaufverfolgung eindeutig unterscheidet16 hexadezimale Zeichenaus.

  • name— Der logische Name des Untersegments. Benennen Sie bei nachgelagerten Aufrufen das Untersegment, nachdem die Ressource oder der Service aufgerufen wurde. Benennen Sie bei benutzerdefinierten Untersegmenten das Untersegment nach dem genutzten Code (z. B. einem Funktionsnamen).

  • start_timeNummerdas ist die Zeit, zu der das Untersegment erstellt wurde, in Gleitkommasekunden in Epochenzeit und auf Millisekunden genau. Beispiel: 1480615200.010 oder 1.480615200010E9.

  • end_timeNummerdas ist der Zeitpunkt, wann das Untersegment geschlossen wurde. Beispiel: 1480615200.090 oder 1.480615200090E9. Geben Sie eine end_time oder in_progress ein.

  • in_progressbooleschdas ist eingestellt auftrueanstatt eineend_timeum aufzuzeichnen, dass ein Untersegment begonnen, aber nicht abgeschlossen wurde. Senden Sie pro nachgelagerter Anfrage nur ein vollständiges Untersegment und ein oder kein angefangenes Untersegment.

  • trace_id— Ablaufverfolgungs-ID des übergeordneten Segments des Untersegments. Nur erforderlich, wenn ein Untersegment separat gesendet wird.

    Format der Ablaufverfolgungs-ID

    Eine trace_id besteht aus drei durch Bindestriche getrennte Zahlen. Zum Beispiel 1-58406520-a006649127e371903a2de979. Dies umfasst:

    • Die Versionsnummer 1.

    • Die Zeit der ursprünglichen Anforderung als Zeit seit Unix-Epoche und in 8 Hexadezimalziffern ausgedrückt.

      Beispiel: 10:00 Uhr 1. Dezember 2016 PST entspricht einer Epoch-Zeit von 1480615200 Sekunden oder in hexadezimalen Ziffern ausgedrückt 58406520.

    • Eine 96-Bit-Kennzeichnung für die Ablaufverfolgung, global eindeutig, in 24 Hexadezimalziffern.

  • parent_id— Segments-ID des übergeordneten Segments des Untersegments. Nur erforderlich, wenn ein Untersegment separat gesendet wird. Bei verschachtelten Untersegmenten kann ein Untersegment ein Segment oder ein Untersegment als übergeordnetes Element haben.

  • typesubsegmentaus. Nur erforderlich, wenn ein Untersegment separat gesendet wird.

Die folgenden Felder sind für Untersegmente optional.

Optionale Untersegmentsfelder

  • namespaceawsfür AWS-SDK-Aufrufe;remotefür andere nachgelagerte Aufrufe.

  • httphttp-Objekt mit Informationen über einen ausgehenden HTTP-Aufruf.

  • awsaws-Objekt mit Informationen über den nachgelagertenAWSRessource, die Ihre Anwendung aufgerufen hat.

  • error,throttle,fault, undcauseFehlerFelder, die einen aufgetretenen Fehler angeben und Informationen über die Ausnahme enthalten, die den Fehler verursacht hat.

  • annotationsannotations-Objekt mit Schlüsselwertpaaren, die X-Ray zur Suche indizieren soll.

  • metadatametadata-Objekt mit zusätzlichen Daten, die in einem Segment gespeichert werden sollen.

  • subsegmentsReihevonsubsegmentBuckets.

  • precursor_idsReihevon Untersegments-IDs, die Untersegmente mit dem gleichen übergeordneten Segment identifizieren, das vor diesem Untersegment vervollständigt wurde.

HTTP-Anfragedaten

Verwenden Sie einen HTTP-Block, um Details zu einer HTTP-Anforderung aufzuzeichnen, die Ihrer Anwendung (in einem Segment) dient oder die Ihre Anwendung (in einem Untersegment) an eine nachgelagerte HTTP-API gestellt hat. Die meisten Felder in dieser Objektübersicht gehören zu Informationen von HTTP-Anforderungen und -Antworten.

http

Alle Felder sind optional.

  • request— Informationen zu einer Anforderung.

    • method— Anfragemethode. Zum Beispiel GET.

    • url— Die vollständige URL der Anforderung, aus dem Protokoll, dem Hostnamen und dem Anforderungspfad.

    • user_agent— Die Zeichenfolge des Benutzeragenten vom Client des Auftraggebers.

    • client_ip— Die IP-Adresse des Auftraggebers. Kann im IP-Paket Source Address oder, für weitergeleitete Anforderungen, in einem X-Forwarded-For-Header eingesehen werden.

    • x_forwarded_for— (nur Segmente)booleschzeigt an, dass dieclient_ipwurde aus einem gelesenX-Forwarded-For-Header und ist nicht verlässlich, da sie gefälscht sein könnte.

    • traced— (nur Untersegmente)booleschdas angibt, dass der nachgelagerte Aufruf ein weiterer rückverfolgter Dienst ist. Wenn dieses Feld auf eingestellt isttrueerachtet X-Ray die Ablaufverfolgung als beschädigt, bis der nachgelagerte Service ein Segment mit einer hochlädtparent_iddas passt zu deniddes Untersegments, das diesen Block enthält.

  • response— Informationen zu einer Antwort.

    • statusGanzzahlAngabe des HTTP-Status der Antwort.

    • content_lengthGanzzahldie die Länge des Antworttexts in Byte angibt.

Wenn Sie einen Aufruf einer nachgelagerten Web-API instrumentieren, erfassen Sie ein Untersegment mit Informationen über die HTTP-Anforderung und die Antwort. X-Ray verwendet das Untersegment, um ein abgeleitetes Segment für die entfernte API zu generieren.

Beispiel Segment für einen HTTP-Aufruf, der von einer Anwendung, die über Amazon EC2 ausgeführt wird, bereitgestellt wird.

{ "id": "6b55dcc497934f1a", "start_time": 1484789387.126, "end_time": 1484789387.535, "trace_id": "1-5880168b-fd5158284b67678a3bb5a78c", "name": "www.example.com", "origin": "AWS::EC2::Instance", "aws": { "ec2": { "availability_zone": "us-west-2c", "instance_id": "i-0b5a4678fc325bg98" }, "xray": { "sdk_version": "2.11.0 for Java" }, }, "http": { "request": { "method": "POST", "client_ip": "78.255.233.48", "url": "http://www.example.com/api/user", "user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", "x_forwarded_for": true }, "response": { "status": 200 } }

Beispiel Untersegment für einen nachgelagerten HTTP-Aufruf

{ "id": "004f72be19cddc2a", "start_time": 1484786387.131, "end_time": 1484786387.501, "name": "names.example.com", "namespace": "remote", "http": { "request": { "method": "GET", "url": "https://names.example.com/" }, "response": { "content_length": -1, "status": 200 } } }

Beispiel Abgeleitetes Segment für einen nachgelagerten HTTP-Anruf

{ "id": "168416dc2ea97781", "name": "names.example.com", "trace_id": "1-62be1272-1b71c4274f39f122afa64eab", "start_time": 1484786387.131, "end_time": 1484786387.501, "parent_id": "004f72be19cddc2a", "http": { "request": { "method": "GET", "url": "https://names.example.com/" }, "response": { "content_length": -1, "status": 200 } }, "inferred": true }

Anmerkungen

Segmente und Untersegmente können einannotations-Objekt, das ein oder mehrere von X-Ray indizierte Felder zur Verwendung mit Filterausdrücken enthält. Felder können eine Zeichenfolge, Zahl oder einen booleschen Werte (keine Objekte oder Arrays) umfassen. X-Ray indiziert bis zu 50 Anmerkungen pro Ablaufverfolgung.

Beispiel Segment für HTTP-Aufrufe mit Anmerkungen

{ "id": "6b55dcc497932f1a", "start_time": 1484789187.126, "end_time": 1484789187.535, "trace_id": "1-5880168b-fd515828bs07678a3bb5a78c", "name": "www.example.com", "origin": "AWS::EC2::Instance", "aws": { "ec2": { "availability_zone": "us-west-2c", "instance_id": "i-0b5a4678fc325bg98" }, "xray": { "sdk_version": "2.11.0 for Java" }, }, "annotations": { "customer_category" : 124, "zip_code" : 98101, "country" : "United States", "internal" : false }, "http": { "request": { "method": "POST", "client_ip": "78.255.233.48", "url": "http://www.example.com/api/user", "user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", "x_forwarded_for": true }, "response": { "status": 200 } }

Die Schlüssel müssen alphanumerisch sein, um mit Filtern funktionieren zu können. Unterstriche sind zulässig. Andere Zeichen und Leerzeichen sind nicht zulässig.

Metadaten

Segmente und Untersegmente können einmetadata-Objekt, das ein oder mehrere Felder mit Werten jeglicher Art, einschließlich Objekte und Arrays, enthält. X-Ray indiziert keine Metadaten. Werte können jede Größe haben, so lange das Segmentdokument die Maximalgröße (64 kB) nicht übersteigt. Sie können Metadaten im vollständigen Segmentdokument, das von der BatchGetTraces-API zurückgesendet wurde, einsehen. Feldtasten (debugim folgenden Beispiel) beginnend mitAWS.sind für die -Verwendung von reserviertAWS-bereitgestellte SDKs und Clients.

Beispiel Individuelles Untersegment mit Metadaten

{ "id": "0e58d2918e9038e8", "start_time": 1484789387.502, "end_time": 1484789387.534, "name": "## UserModel.saveUser", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } }, "subsegments": [ { "id": "0f910026178b71eb", "start_time": 1484789387.502, "end_time": 1484789387.534, "name": "DynamoDB", "namespace": "aws", "http": { "response": { "content_length": 58, "status": 200 } }, "aws": { "table_name": "scorekeep-user", "operation": "UpdateItem", "request_id": "3AIENM5J4ELQ3SPODHKBIRVIC3VV4KQNSO5AEMVJF66Q9ASUAAJG", "resource_names": [ "scorekeep-user" ] } } ] }

AWSRessourcendaten

Bei Segmenten enthält das aws-Objekt Informationen zu den Ressourcen, auf denen Ihre Anwendung ausgeführt wird. Mehrere Felder können für eine einzelne Ressource zutreffen. Eine Anwendung in einer Multicontainer-Docker-Umgebung auf Elastic Beanstalk könnte beispielsweise Informationen über die Amazon EC2 EC2-Instance, den Amazon ECS-Container in der Instance und die Elastic Beanstalk-Umgebung an sich haben.

aws (Segmente)

Alle Felder sind optional.

  • account_id— Wenn Ihre Anwendung Segmente an eine andere sendetAWS-Konto die ID des Kontos, auf dem Ihre Anwendung aufgeführt wird.

  • cloudwatch_logs— Array von Objekten, die ein einzelnes beschreiben CloudWatch Protokollgruppe.

    • log_group— Die CloudWatch Protokollgruppenname.

    • arn— Die CloudWatch Protokollgruppen-ARN.

  • ec2— Informationen zu einer Amazon-EC2-Instance.

    • instance_id— Die Instance-ID der EC2-Instance.

    • instance_size— Der Typ der EC2-Instance.

    • ami_id— Die Amazon-Image-ID.

    • availability_zone— Die Availability Zone, in der die Instance ausgeführt wird.

  • ecs— Informationen über einen ECS-Container.

    • container— Der Hostname Ihres Containers.

    • container_id— Die vollständige Container-ID Ihres Containers.

    • container_arn— ARN Ihrer Container-Instance.

  • eks— Informationen zu einem Amazon EKS-Cluster

    • pod— Der Hostname Ihres EKS-Pods.

    • cluster_name— Der Name des EKS-Clusters.

    • container_id— Die vollständige Container-ID Ihres Containers.

  • elastic_beanstalk— Informationen über eine Elastic Beanstalk-Umgebung. Sie finden diese Informationen in einer Datei mit dem Namen/var/elasticbeanstalk/xray/environment.confauf den neuesten Elastic Beanstalk-Plattformen.

    • environment_name – Der Name der Umgebung.

    • version_label— Der Name der Anwendungsversion, die aktuell für die Instance bereitgestellt wird, die die Anforderung bearbeitet hat.

    • deployment_idNummerdie ID der letzten erfolgreichen Bereitstellung in der Instance angibt, die die Anforderung bearbeitet hat.

  • xray— Metadaten über den Typ und die Version der verwendeten Instrumentierung.

    • auto_instrumentation— Boolescher Wert, der angibt, ob die automatische Instrumentierung verwendet wurde (z. B. der Java-Agent).

    • sdk_version— Die Version des verwendeten SDK oder Agenten.

    • sdk— Der Typ des SDK.

Beispiel AWSMit Plugins blockieren

"aws":{ "elastic_beanstalk":{ "version_label":"app-5a56-170119_190650-stage-170119_190650", "deployment_id":32, "environment_name":"scorekeep" }, "ec2":{ "availability_zone":"us-west-2c", "instance_id":"i-075ad396f12bc325a", "ami_id": }, "cloudwatch_logs":[ { "log_group":"my-cw-log-group", "arn":"arn:aws:logs:us-west-2:012345678912:log-group:my-cw-log-group" } ], "xray":{ "auto_instrumentation":false, "sdk":"X-Ray for Java", "sdk_version":"2.8.0" } }

Zeichnen Sie für Untersegmente Informationen über denAWS-Services und Ressourcen, auf die Ihre Anwendung zugreift. X-Ray erstellt anhand dieser Daten abgeleitete Segmente, die nachgelagerten Services in Ihrer Service-Übersicht widerspiegeln.

aws (Untersegmente)

Alle Felder sind optional.

  • operation— Der Name der API-Aktion, die bei jedem aufgerufen wirdAWSService oder Ressource.

  • account_id— Wenn Ihre Anwendung auf die Ressourcen eines anderen Kontos zugreift oder Segmente an ein anderes Konto sendet, zeichnen Sie die Konto-ID des Kontos auf, zu dem dieAWSRessource, auf die Ihre Anwendung zugegriffen hat.

  • region— Wenn sich die Ressource in einer anderen Region als Ihre Anwendung befindet, zeichnen Sie diese Region auf. Zum Beispiel us-west-2.

  • request_id— Eindeutige Bezeichnung für die Anforderung.

  • queue_url— Für Vorgänge in einer SQS-Warteschlange die URL der Warteschlange.

  • table_name— Für Vorgänge in einer DynamoDB-Tabelle der Name der Tabelle.

Beispiel Untersegment für einen Aufruf von DynamoDB zum Speichern eines Elements

{ "id": "24756640c0d0978a", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "DynamoDB", "namespace": "aws", "http": { "response": { "content_length": 60, "status": 200 } }, "aws": { "table_name": "scorekeep-user", "operation": "UpdateItem", "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG", } }

Fehler und Ausnahmen

Wenn ein Fehler auftritt, können Sie die Einzelheiten zum Fehler und den Ausnahmen, die er generiert, aufzeichnen. Zeichnen Sie Fehler in Segmenten auf, wenn Ihre Anwendung einen Fehler an den Benutzer zurückgibt, sowie in Untersegmenten, wenn ein nachgelagerter Aufruf einen Fehler ausgibt.

Fehlertypen

Stellen Sie ein oder mehrere der folgenden Felder auf true ein, um anzuzeigen, dass ein Fehler aufgetreten ist. Bei schwerwiegenden Fehlern können mehrere Typen ausgewählt werden. Ein 429 Too Many Requests-Fehler von einem nachgelagerten Aufruf kann beispielsweise dazu führen, dass Ihre Anwendung zu einem 500 Internal Server Error zurückkehrt. In diesem Fall treffen alle drei Typen zu.

  • errorbooleschzeigt an, dass ein Client-Fehler aufgetreten ist (Antwortstatuscode: 4XX-Client-Fehler).

  • throttlebooleschzeigt an, dass eine Anforderung gedrosselt wurde (Antwortstatuscode:429 — Zu viele Anfragen) enthalten.

  • faultbooleschzeigt an, dass ein Server-Fehler aufgetreten ist (Antwortstatuscode: 5XX-Server-Fehler).

Geben Sie die Fehlerursache an, indem Sie im Segment oder Untersegment ein Ursachenobjekt einschließen.

cause

Eine Ursache kann entweder eine 16-stellige Ausnahmen-ID oder ein Objekt mit den folgenden Feldern sein:

  • working_directory— Der vollständige Pfad des Arbeitsverzeichnisses bei Auftreten der Ausnahme.

  • paths— DieReihevon Pfaden der Bibliotheken oder Module, die verwendet wurden, als der Fehler auftrat.

  • exceptions— DieReihevonAusnahmeBuckets.

Geben Sie detaillierte Informationen über die Fehler in einem oder mehreren Ausnahmenobjekten an.

exception

Alle Felder sind optional außer id.

  • id— Eine 64-Bit-Kennung für die Ausnahme, die sich von anderen Segmenten in derselben Ablaufverfolgung eindeutig unterscheidet16 hexadezimale Zeichenaus.

  • message— Die Ausnahmenachricht.

  • type— Die Ausnahmeart.

  • remotebooleschgibt an, dass die Ausnahme durch einen Fehler verursacht wurde, der von einem nachgelagerten Dienst zurückgegeben wurde.

  • truncatedGanzzahldie Anzahl der Stack-Rahmen angibt, die vom ausgelassen werdenstackaus.

  • skippedGanzzahlAngabe der Anzahl der Ausnahmen, die zwischen dieser Ausnahme und der untergeordneten Ausnahme, d. h. der verursachten Ausnahme, übersprungen wurden.

  • cause— Ausnahmen-ID der übergeordneten Ausnahme, d. h. die Ausnahme, welche die Ausnahme verursacht hat.

  • stackReihevonstackFrameBuckets.

Falls verfügbar, zeichnen Sie Informationen zu dem Aufruf-Stack in stackFrame-Objekten auf.

stackFrame

Alle Felder sind optional.

  • path— Der relative Pfad der Datei.

  • line— Die Zeile in der Datei.

  • label— Der Funktions- oder Methodenname.

SQL-Abfragen

Für Anfragen, die Ihre Anwendung in eine SQL-Datenbank umwandeln, können Sie Untersegmente erstellen.

sql

Alle Felder sind optional.

  • connection_string— Zeichnen Sie für SQL-Server oder andere Datenbankverbindungen, die keine URL-Verbindungszeichenfolgen nutzen, die Verbindungszeichenfolge ohne Passwörter auf.

  • url— Zeichnen Sie für eine Datenbankverbindung, die eine URL-Verbindungszeichenfolge nutzt, die URL ohne Passwörter auf.

  • sanitized_query— Die Datenbankanfrage, bei der die von Benutzern eingegebenen Werte entfernt oder durch einen Platzhalter ersetzt werden.

  • database_type— Der Name der Datenbank-Engine.

  • database_version— Die Versionsnummer der Datenbank-Engine.

  • driver_version— Der Name und die Versionsnummer des Datenbank-Engine-Treibers, den Ihre Anwendung nutzt.

  • user— Der Datenbankbenutzername.

  • preparationcallwenn die Abfrage einPreparedCall;statementwenn die Abfrage einPreparedStatementaus.

Beispiel Untersegment mit einer SQL-Abfrage

{ "id": "3fd8634e78ca9560", "start_time": 1484872218.696, "end_time": 1484872218.697, "name": "ebdb@aawijb5u25wdoy.cpamxznpdoq8.us-west-2.rds.amazonaws.com", "namespace": "remote", "sql" : { "url": "jdbc:postgresql://aawijb5u25wdoy.cpamxznpdoq8.us-west-2.rds.amazonaws.com:5432/ebdb", "preparation": "statement", "database_type": "PostgreSQL", "database_version": "9.5.4", "driver_version": "PostgreSQL 9.4.1211.jre7", "user" : "dbuser", "sanitized_query" : "SELECT * FROM customers WHERE customer_id=?;" } }