Senden von Ablaufverfolgungsdaten an AWS X-Ray - 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.

Senden von Ablaufverfolgungsdaten an AWS X-Ray

Sie können Ablaufverfolgungsdaten in Form von Segmentdokumenten an X-Ray senden. Ein Segmentdokument ist eine JSON-formatierte Zeichenfolge mit Informationen über die Arbeit, die Ihre Anwendung im Dienste einer Anforderung verrichtet. Ihre Anwendung kann Daten über die Arbeit, die sie selbst in Segmenten verrichtet, oder über Arbeit, die Downstream-Services und -Ressourcen in Untersegmenten verrichtet, aufzeichnen.

Segmente zeichnen Informationen über die Arbeit auf, die Ihre Anwendung verrichtet. Ein Segment zeichnet mindestens die für eine Aufgabe aufgewendete zeit, ihren Namen sowie zwei IDs auf. Die Nachverfolgungs-ID zeichnet die Anforderung auf Ihrem Weg zwischen den Services auf. Die Segment-ID verfolgt die für die Anforderung durch einen einzelnen Service verrichtete Arbeit.

Beispiel Minimales vollständiges Segment

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

Wenn eine Anfrage empfangen wird, können Sie eine In-Progress-Segment als Platzhalter senden, bis die Anforderung abgeschlossen ist.

Beispiel In Bearbeitung befindliches Segment

{ "name" : "Scorekeep", "id" : "70de5b6f19ff9a0b", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979", “in_progress”: true }

Sie können Segmente direkt an X-Ray senden, mitPutTraceSegments, oderdurch den X-Ray-Daemonaus.

Die meisten Anwendungen führen den Aufruf anderer Services oder den Zugriff auf Ressourcen mit dem AWS-SDK durch. Zeichnen Sie Informationen über Downstream-Aufrufe aufUntersegmenteaus. 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 (64 kB) überschritten wird.

Beispiel Untersegment

Ein Untersegment hat den type subsegment und eine parent_id, mit der das übergeordnete Segment identifiziert wird.

{ "name" : "www2.example.com", "id" : "70de5b6f19ff9a0c", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979" “end_time” : 1.478293361449E9, “type” : “subsegment”, “parent_id” : “70de5b6f19ff9a0b” }

Weitere Informationen über die Felder und Werte, die in Segmente und Untersegmente eingegeben werden können, finden Sie unter AWS X-Ray-Segmentdokumente.

Erzeugen von Ablaufverfolgungs-IDs

Um Daten an X-Ray zu senden, müssen Sie für jede Anfrage eine eindeutige Ablaufverfolgungs-ID erzeugen. Ablaufverfolgungs-ID müssen die folgenden Anforderungen erfüllen.

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.

Sie können ein Skript schreiben, um Ablaufverfolgungs-IDs zu Testzwecken zu generieren. Nachfolgend finden Sie zwei Beispiele.

Python

import time import os import binascii START_TIME = time.time() HEX=hex(int(START_TIME))[2:] TRACE_ID="1-{}-{}".format(HEX, binascii.hexlify(os.urandom(12)).decode('utf-8'))

Bash

START_TIME=$(date +%s) HEX_TIME=$(printf '%x\n' $START_TIME) GUID=$(dd if=/dev/random bs=12 count=1 2>/dev/null | od -An -tx1 | tr -d ' \t\n') TRACE_ID="1-$HEX_TIME-$GUID"

In der Scoreep-Beispielanwendung finden Sie Skripte, die Ablaufverfolgungs-IDs erstellen und Segmente an den X-Ray-Daemon senden.

Verwendung von PutTraceSegments

Sie können Segmentdokumente mit der PutTraceSegments-API hochladen. Die API hat einen einzelnen Parameter, TraceSegmentDocuments, der eine Liste von JSON-Segmentdokumenten aufnimmt.

Verwenden Sie mit der AWS CLI denaws xray put-trace-segmentsBefehl, um Segmentdokumente direkt an X-Ray zu senden.

$ DOC='{"trace_id": "1-5960082b-ab52431b496add878434aa25", "id": "6226467e3f845502", "start_time": 1498082657.37518, "end_time": 1498082695.4042, "name": "test.elasticbeanstalk.com"}' $ aws xray put-trace-segments --trace-segment-documents "$DOC" { "UnprocessedTraceSegments": [] }
Anmerkung

Windows Command Prozessor und Windows PowerShell haben unterschiedliche Anforderungen für Anführungszeichen und Escapes für Anführungszeichen in JSON-Zeichenfolgen: Weitere Details finden Sie unter Setzen von Anführungszeichen für Zeichenfolgen im AWS CLI-Benutzerhandbuch.

Die Ausgabe führt alle Segmente auf, deren Verarbeitung fehlgeschlagen ist. Beispiel: Wenn das Datum in der Nachverfolgungs-ID zu weit in der Vergangenheit liegt, sehen Sie eine Fehlermeldung wie die folgende.

{ "UnprocessedTraceSegments": [ { "ErrorCode": "InvalidTraceId", "Message": "Invalid segment. ErrorCode: InvalidTraceId", "Id": "6226467e3f845502" } ] }

Sie können mehrere Segmentdokumente gleichzeitig, durch Leerräume getrennt, weitergeben.

$ aws xray put-trace-segments --trace-segment-documents "$DOC1" "$DOC2"

Senden von Segmentdokumenten an den X-Ray-Daemon

Anstatt Segmentdokumente zur X-Ray-API zu senden, können Sie Segmente und Untersegmente an den X-Ray-Daemon senden, der sie puffert und in Stapeln zur X-Ray-API hochlädt. Das X-Ray-SDK sendet Segmentdokumente an den Daemon, um Aufrufe an zu vermeidenAWSdirekt.

Anmerkung

Informationen zur Ausführung des Daemons finden Sie unter Lokales Ausführen des X-Ray-Daemons.

Senden Sie das Segment in JSON über den UDP-Port 2000 mit dem vorangestellten Daemon-Kopf {"format": "json", "version": 1}\n.

{"format": "json", "version": 1}\n{"trace_id": "1-5759e988-bd862e3fe1be46a994272793", "id": "defdfd9912dc5a56", "start_time": 1461096053.37518, "end_time": 1461096053.4042, "name": "test.elasticbeanstalk.com"}

Unter Linux können Sie Segmentdokumente von einem Bash-Terminal aus an den Daemon senden. Speichern Sie den Kopf und das Segmentdokument in einer Textdatei, und senden Sie sie an /dev/udp mit cat.

$ cat segment.txt > /dev/udp/127.0.0.1/2000

Beispiel segment.txt

{"format": "json", "version": 1} {"trace_id": "1-594aed87-ad72e26896b3f9d3a27054bb", "id": "6226467e3f845502", "start_time": 1498082657.37518, "end_time": 1498082695.4042, "name": "test.elasticbeanstalk.com"}

Überprüfen Sie dasProtokoll des -Daemonsum zu sehen, ob das Segment an X-Ray gesendet wurde.

2017-07-07T01:57:24Z [Debug] processor: sending partial batch 2017-07-07T01:57:24Z [Debug] processor: segment batch size: 1. capacity: 50 2017-07-07T01:57:24Z [Info] Successfully sent batch of 1 segments (0.020 seconds)