Mengirim data pelacakan ke AWS X-Ray - AWS X-Ray

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengirim data pelacakan ke AWS X-Ray

Anda dapat mengirim data pelacakan ke X-Ray dalam bentuk dokumen segmen. Sebuah dokumen segmen adalah string berformat JSON yang berisi informasi tentang pekerjaan yang dilakukan aplikasi Anda dalam pelayanan permintaan. Aplikasi Anda dapat mencatat data tentang pekerjaan yang dilakukannya sendiri di segmen, atau pekerjaan yang menggunakan layanan hilir dan sumber daya di subsegment.

Segmen mencatat informasi tentang pekerjaan yang dilakukan aplikasi Anda. Segmen, setidaknya, mencatat waktu yang dihabiskan untuk tugas, nama, dan dua ID. ID pelacakan melacak permintaan saat perjalanan antara layanan. ID segmen melacak pekerjaan yang dilakukan untuk permintaan oleh satu layanan.

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

Ketika permintaan diterima, Anda dapat mengirim segmen yang sedang berlangsung sebagai placeholder sampai permintaan selesai.

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

Anda dapat mengirim segmen ke X-Ray secara langsung, dengan PutTraceSegments, atau melalui daemon X-Ray.

Sebagian besar aplikasi memanggil layanan lain atau mengakses sumber daya dengan AWS SDK. Mencatat informasi tentang panggilan hilir di subsegmen. X-Ray menggunakan subsegmen untuk mengidentifikasi layanan hilir yang tidak mengirim segmen dan membuat entri untuk mereka di grafik layanan.

Sebuah subsegmen dapat ditanamkan dalam dokumen segmen penuh, atau dikirim secara terpisah. Kirim subsegmen secara terpisah untuk melacak panggilan hilir secara asinkron untuk permintaan yang berlangsung lama, atau untuk menghindari melebihi ukuran dokumen segmen maksimum (64 kB).

contoh Subsegmen

Subsegmen memiliki type dari subsegment dan parent_id yang mengidentifikasi segmen induk.

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

Untuk informasi selengkapnya tentang bidang dan nilai yang dapat Anda sertakan dalam segmen dan subsegmen, lihat AWS X-Ray dokumen segmen.

Menghasilkan ID pelacakan

Untuk mengirim data ke X-Ray, Anda harus menghasilkan ID jejak unik untuk setiap permintaan.

Format ID jejak X-Ray

trace_idX-Ray terdiri dari tiga angka yang dipisahkan oleh tanda hubung. Contohnya, 1-58406520-a006649127e371903a2de979. Hal ini mencakup:

  • Nomor versi, yaitu1.

  • Waktu permintaan asli dalam waktu epoch Unix menggunakan 8 digit heksadesimal.

    Misalnya, 10:00 AM 1 Desember 2016 PST dalam waktu epoch adalah 1480615200 detik atau 58406520 dalam digit heksadesimal.

  • Pengidentifikasi 96-bit yang unik secara global untuk jejak dalam 24 digit heksadesimal.

catatan

X-Ray sekarang mendukung ID jejak yang dibuat menggunakan OpenTelemetry dan kerangka kerja lain yang sesuai dengan spesifikasi W3C Trace Context. ID jejak W3C harus diformat dalam format X-Ray Trace ID saat mengirim ke X-Ray. Misalnya, ID jejak W3C 4efaaf4d1e8720b39541901950019ee5 harus diformat seperti 1-4efaaf4d-1e8720b39541901950019ee5 saat mengirim ke X-Ray. ID jejak X-Ray menyertakan cap waktu permintaan asli dalam waktu epoch Unix, tetapi ini tidak diperlukan saat mengirim ID jejak W3C dalam format X-Ray.

Anda dapat menulis skrip untuk menghasilkan ID jejak X-Ray untuk pengujian. Berikut ini adalah dua contoh.

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"

Lihat aplikasi sampel Scorekeep untuk skrip yang membuat ID pelacakan dan mengirim segmen ke daemon X-Ray.

Menggunakan PutTraceSegments

Anda dapat mengunggah dokumen segmen dengan API PutTraceSegments. API memiliki parameter tunggal , TraceSegmentDocuments, yang mengambil daftar dokumen segmen JSON.

Dengan AWS CLI, gunakan perintah aws xray put-trace-segments untuk mengirim dokumen segmen langsung ke X-Ray.

$ 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": [] }
catatan

Windows Command Processor dan Windows PowerShell memiliki persyaratan yang berbeda untuk mengutip dan melarikan diri dari kutipan dalam string JSON. Lihat Mengutip String di Panduan Pengguna AWS CLI untuk detail.

Output mencantumkan segmen yang gagal diproses. Misalnya, jika tanggal di ID pelacakan terlalu lama di masa lalu, Anda melihat kesalahan seperti berikut ini.

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

Anda dapat melewati beberapa dokumen segmen pada saat yang sama, dipisahkan oleh spasi.

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

Mengirim dokumen segmen ke daemon X-Ray

Daripada mengirim dokumen segmen ke API X-Ray, Anda dapat mengirim segmen dan subsegmen ke daemon X-Ray, yang akan menyangga dokumen tersebut dan mengunggahnya ke API X-Ray dalam batch. X-Ray SDK mengirimkan dokumen segmen ke daemon untuk menghindari panggilan ke AWS secara langsung.

catatan

Lihat Menjalankan daemon X-Ray secara lokal sebagai petunjuk tentang menjalankan daemon.

Kirim segmen di JSON melalui UDP port 2000, diawali dengan header daemon, {"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"}

Di Linux, Anda dapat mengirim dokumen segmen ke daemon dari terminal Bash. Simpan header dan segmen dokumen ke file teks dan alirkan ke /dev/udp dengan cat.

$ cat segment.txt > /dev/udp/127.0.0.1/2000
contoh 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"}

Periksa log daemon untuk memverifikasi bahwa segmen tersebut telah dikirim ke X-Ray.

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)