Gunakan API 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.

Gunakan API X-Ray

Jika X-Ray SDK tidak mendukung bahasa pemrograman Anda, Anda dapat menggunakan API X-Ray secara langsung atau AWS Command Line Interface (AWS CLI) untuk memanggil perintah X-Ray API. Gunakan panduan berikut untuk memilih cara Anda berinteraksi dengan API:

  • Gunakan sintaks AWS CLI untuk lebih sederhana menggunakan perintah yang telah diformat sebelumnya atau dengan opsi di dalam permintaan Anda.

  • Gunakan X-Ray API secara langsung untuk fleksibilitas maksimum dan kustomisasi untuk permintaan yang Anda buat ke X-Ray.

Jika Anda menggunakan X-Ray API secara langsung alih-alih AWS CLI, Anda harus membuat parameter permintaan Anda dalam format data yang benar dan mungkin juga harus mengonfigurasi otentikasi dan penanganan kesalahan.

Diagram berikut menunjukkan panduan untuk memilih cara berinteraksi dengan X-Ray API:

X-Ray menampilkan informasi rinci tentang permintaan aplikasi.

Gunakan X-Ray API untuk mengirim data jejak langsung ke X-Ray. X-Ray API mendukung semua fungsi yang tersedia di X-Ray SDK termasuk tindakan umum berikut:

  • PutTraceSegments— Mengunggah dokumen segmen ke X-Ray.

  • BatchGetTraces— Mengambil daftar jejak dalam daftar ID jejak. Setiap jejak yang diambil adalah kumpulan dokumen segmen dari satu permintaan.

  • GetTraceSummaries— Mengambil ID dan anotasi untuk jejak. Anda dapat menentukan a FilterExpression untuk mengambil subset ringkasan jejak.

  • GetTraceGraph— Mengambil grafik layanan untuk ID jejak tertentu.

  • GetServiceGraph— Mengambil dokumen yang JSON diformat yang menjelaskan layanan yang memproses permintaan masuk dan memanggil permintaan hilir.

Anda juga dapat menggunakan AWS Command Line Interface (AWS CLI) di dalam kode aplikasi Anda untuk berinteraksi secara terprogram dengan X-Ray. AWS CLI Mendukung semua fungsi yang tersedia di X-Ray SDK termasuk yang lain Layanan AWS. Fungsi-fungsi berikut adalah versi operasi API yang terdaftar sebelumnya dengan format yang lebih sederhana:

  • put-trace-segments— Mengunggah dokumen segmen ke X-Ray.

  • batch-get-traces— Mengambil daftar jejak dalam daftar ID jejak. Setiap jejak yang diambil adalah kumpulan dokumen segmen dari satu permintaan.

  • get-trace-summaries— Mengambil ID dan anotasi untuk jejak. Anda dapat menentukan a FilterExpression untuk mengambil subset ringkasan jejak.

  • get-trace-graph— Mengambil grafik layanan untuk ID jejak tertentu.

  • get-service-graph— Mengambil dokumen yang JSON diformat yang menjelaskan layanan yang memproses permintaan masuk dan memanggil permintaan hilir.

Untuk memulai, Anda harus menginstal AWS CLIuntuk sistem operasi Anda. AWS mendukungLinux, macOS dan sistem Windows operasi. Untuk informasi selengkapnya tentang daftar perintah X-Ray, lihat panduan Referensi AWS CLI Perintah untuk X-Ray.

Jelajahi X-Ray API

X-Ray API menyediakan akses ke semua fungsionalitas X-Ray melalui AWS SDK, AWS Command Line Interface, atau langsung melalui HTTPS. Referensi API X-Ray mendokumentasikan parameter input untuk setiap tindakan API, dan bidang serta tipe data yang dikembalikan.

Anda dapat menggunakan AWS SDK untuk mengembangkan program yang menggunakan X-Ray API. Konsol X-Ray dan daemon X-Ray keduanya menggunakan AWS SDK untuk berkomunikasi dengan X-Ray. AWS SDK untuk setiap bahasa memiliki dokumen referensi untuk kelas dan metode yang memetakan ke tindakan dan jenis API X-Ray.

AWS Referensi SDK

AWS Command Line Interface Ini adalah alat baris perintah yang menggunakan SDK untuk Python untuk AWS memanggil API. Ketika Anda pertama kali mempelajari AWS API, AWS CLI menyediakan cara mudah untuk menjelajahi parameter yang tersedia dan melihat output layanan dalam bentuk JSON atau teks.

Lihat Referensi AWS CLI Perintah untuk detail tentang aws xray subperintah.

AWS CLI memungkinkan Anda mengakses layanan X-Ray secara langsung dan menggunakan API yang sama dengan yang digunakan konsol X-Ray untuk mengambil grafik layanan dan data jejak mentah. Contoh aplikasi menyertakan skrip yang menunjukkan cara menggunakan API ini dengan AWS CLI.

Prasyarat

Tutorial ini menggunakan aplikasi sampel Scorekeep dan termasuk skrip untuk menghasilkan data pelacakan dan peta layanan. Ikuti petunjuk dalam contoh tutorial aplikasi untuk meluncurkan aplikasi.

Tutorial ini menggunakan AWS CLI untuk menunjukkan penggunaan dasar X-Ray API. AWS CLI, tersedia untuk Windows, Linux, dan OS-X, menyediakan akses baris perintah ke API publik untuk semua. Layanan AWS

catatan

Anda harus memverifikasi bahwa Anda AWS CLI dikonfigurasi ke wilayah yang sama tempat aplikasi sampel Anda dibuat.

Skrip disertakan untuk menguji aplikasi sampel menggunakan cURL untuk mengirim lalu lintas ke API dan jq untuk mengurai output. Anda dapat mengunduh jq eksekusi dari stedolan.github.io, dan curl eksekusi dari https://curl.haxx.se/download.html. Sebagian besar instalasi Linux dan OS X mencakup cURL.

Hasilkan data pelacakan

Aplikasi web terus menghasilkan lalu lintas ke API setiap beberapa detik saat game sedang berlangsung, tetapi hanya menghasilkan satu tipe permintaan. Gunakan skrip test-api.sh untuk menjalankan skenario end to end dan menghasilkan data pelacakan yang lebih beragam saat Anda menguji API.

Untuk menggunakan skrip test-api.sh
  1. Buka Konsol Elastic Beanstalk.

  2. Navigasikan ke konsol manajemen untuk lingkungan Anda.

  3. Salin URL lingkungan dari header halaman.

  4. Buka bin/test-api.sh dan ganti nilai untuk API dengan URL lingkungan Anda.

    #!/bin/bash API=scorekeep.9hbtbm23t2.us-west-2.elasticbeanstalk.com/api
  5. Jalankan skrip untuk menghasilkan lalu lintas ke API.

    ~/debugger-tutorial$ ./bin/test-api.sh Creating users, session, game, configuring game, playing game, ending game, game complete. {"id":"MTBP8BAS","session":"HUF6IT64","name":"tic-tac-toe-test","users":["QFF3HBGM","KL6JR98D"],"rules":"102","startTime":1476314241,"endTime":1476314245,"states":["JQVLEOM2","D67QLPIC","VF9BM9NC","OEAA6GK9","2A705O73","1U2LFTLJ","HUKIDD70","BAN1C8FI","G3UDJTUF","AB70HVEV"],"moves":["BS8F8LQ","4MTTSPKP","463OETES","SVEBCL3N","N7CQ1GHP","O84ONEPD","EG4BPROQ","V4BLIDJ3","9RL3NPMV"]}

Gunakan API X-Ray

AWS CLI menyediakan perintah untuk semua tindakan API yang disediakan X-Ray, termasuk GetServiceGraphdan. GetTraceSummaries Lihat AWS X-Ray Referensi API untuk informasi selengkapnya tentang semua tindakan yang didukung dan tipe data yang mereka gunakan.

contoh bin/service-graph.sh
EPOCH=$(date +%s) aws xray get-service-graph --start-time $(($EPOCH-600)) --end-time $EPOCH

Skrip mengambil grafik layanan selama 10 menit terakhir.

~/eb-java-scorekeep$ ./bin/service-graph.sh | less { "StartTime": 1479068648.0, "Services": [ { "StartTime": 1479068648.0, "ReferenceId": 0, "State": "unknown", "EndTime": 1479068651.0, "Type": "client", "Edges": [ { "StartTime": 1479068648.0, "ReferenceId": 1, "SummaryStatistics": { "ErrorStatistics": { "ThrottleCount": 0, "TotalCount": 0, "OtherCount": 0 }, "FaultStatistics": { "TotalCount": 0, "OtherCount": 0 }, "TotalCount": 2, "OkCount": 2, "TotalResponseTime": 0.054000139236450195 }, "EndTime": 1479068651.0, "Aliases": [] } ] }, { "StartTime": 1479068648.0, "Names": [ "scorekeep.elasticbeanstalk.com" ], "ReferenceId": 1, "State": "active", "EndTime": 1479068651.0, "Root": true, "Name": "scorekeep.elasticbeanstalk.com", ...
contoh bin/trace-urls.sh
EPOCH=$(date +%s) aws xray get-trace-summaries --start-time $(($EPOCH-120)) --end-time $(($EPOCH-60)) --query 'TraceSummaries[*].Http.HttpURL'

Skrip mengambil URL pelacakan yang dihasilkan antara satu dan dua menit yang lalu.

~/eb-java-scorekeep$ ./bin/trace-urls.sh [ "http://scorekeep.elasticbeanstalk.com/api/game/6Q0UE1DG/5FGLM9U3/endtime/1479069438", "http://scorekeep.elasticbeanstalk.com/api/session/KH4341QH", "http://scorekeep.elasticbeanstalk.com/api/game/GLQBJ3K5/153AHDIA", "http://scorekeep.elasticbeanstalk.com/api/game/VPDL672J/G2V41HM6/endtime/1479069466" ]
contoh bin/full-traces.sh
EPOCH=$(date +%s) TRACEIDS=$(aws xray get-trace-summaries --start-time $(($EPOCH-120)) --end-time $(($EPOCH-60)) --query 'TraceSummaries[*].Id' --output text) aws xray batch-get-traces --trace-ids $TRACEIDS --query 'Traces[*]'

Skrip mengambil pelacakan penuh yang dihasilkan antara satu dan dua menit yang lalu.

~/eb-java-scorekeep$ ./bin/full-traces.sh | less [ { "Segments": [ { "Id": "3f212bc237bafd5d", "Document": "{\"id\":\"3f212bc237bafd5d\",\"name\":\"DynamoDB\",\"trace_id\":\"1-5828d9f2-a90669393f4343211bc1cf75\",\"start_time\":1.479072242459E9,\"end_time\":1.479072242477E9,\"parent_id\":\"72a08dcf87991ca9\",\"http\":{\"response\":{\"content_length\":60,\"status\":200}},\"inferred\":true,\"aws\":{\"consistent_read\":false,\"table_name\":\"scorekeep-session-xray\",\"operation\":\"GetItem\",\"request_id\":\"QAKE0S8DD0LJM245KAOPMA746BVV4KQNSO5AEMVJF66Q9ASUAAJG\",\"resource_names\":[\"scorekeep-session-xray\"]},\"origin\":\"AWS::DynamoDB::Table\"}" }, { "Id": "309e355f1148347f", "Document": "{\"id\":\"309e355f1148347f\",\"name\":\"DynamoDB\",\"trace_id\":\"1-5828d9f2-a90669393f4343211bc1cf75\",\"start_time\":1.479072242477E9,\"end_time\":1.479072242494E9,\"parent_id\":\"37f14ef837f00022\",\"http\":{\"response\":{\"content_length\":606,\"status\":200}},\"inferred\":true,\"aws\":{\"table_name\":\"scorekeep-game-xray\",\"operation\":\"UpdateItem\",\"request_id\":\"388GEROC4PCA6D59ED3CTI5EEJVV4KQNSO5AEMVJF66Q9ASUAAJG\",\"resource_names\":[\"scorekeep-game-xray\"]},\"origin\":\"AWS::DynamoDB::Table\"}" } ], "Id": "1-5828d9f2-a90669393f4343211bc1cf75", "Duration": 0.05099987983703613 } ...

Pembersihan

Akhiri lingkungan Elastic Beanstalk Anda untuk mematikan instans Amazon EC2, tabel DynamoDB, dan sumber daya lainnya.

Untuk mengakhiri lingkungan Elastic Beanstalk
  1. Buka Konsol Elastic Beanstalk.

  2. Navigasikan ke konsol manajemen untuk lingkungan Anda.

  3. Pilih Tindakan.

  4. Pilih Akhiri Lingkungan.

  5. Pilih Akhiri.

Data pelacakan dihapus secara otomatis dari X-Ray setelah 30 hari.

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 Dokumen segmen X-Ray.

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.

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"

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)

X-Ray memproses data jejak yang Anda kirim untuk menghasilkan jejak lengkap, ringkasan jejak, dan grafik layanan di JSON. Anda dapat mengambil data yang dihasilkan langsung dari API dengan AWS CLI.

Anda dapat menggunakan GetServiceGraph API untuk mengambil grafik layanan JSON. API memerlukan waktu mulai dan waktu berakhir, yang dapat Anda hitung dari terminal Linux dengan perintah date.

$ date +%s 1499394617

date +%s mencetak tanggal dalam hitungan detik. Gunakan angka ini sebagai waktu berakhir dan kurangi waktu darinya untuk mendapatkan waktu mulai.

contoh Skrip untuk mengambil grafik layanan selama 10 menit terakhir
EPOCH=$(date +%s) aws xray get-service-graph --start-time $(($EPOCH-600)) --end-time $EPOCH

Contoh berikut menunjukkan grafik layanan dengan 4 simpul, termasuk simpul klien, instans EC2, tabel DynamoDB, dan topik Amazon SNS.

contoh GetServiceGraph keluaran
{ "Services": [ { "ReferenceId": 0, "Name": "xray-sample.elasticbeanstalk.com", "Names": [ "xray-sample.elasticbeanstalk.com" ], "Type": "client", "State": "unknown", "StartTime": 1528317567.0, "EndTime": 1528317589.0, "Edges": [ { "ReferenceId": 2, "StartTime": 1528317567.0, "EndTime": 1528317589.0, "SummaryStatistics": { "OkCount": 3, "ErrorStatistics": { "ThrottleCount": 0, "OtherCount": 1, "TotalCount": 1 }, "FaultStatistics": { "OtherCount": 0, "TotalCount": 0 }, "TotalCount": 4, "TotalResponseTime": 0.273 }, "ResponseTimeHistogram": [ { "Value": 0.005, "Count": 1 }, { "Value": 0.015, "Count": 1 }, { "Value": 0.157, "Count": 1 }, { "Value": 0.096, "Count": 1 } ], "Aliases": [] } ] }, { "ReferenceId": 1, "Name": "awseb-e-dixzws4s9p-stack-StartupSignupsTable-4IMSMHAYX2BA", "Names": [ "awseb-e-dixzws4s9p-stack-StartupSignupsTable-4IMSMHAYX2BA" ], "Type": "AWS::DynamoDB::Table", "State": "unknown", "StartTime": 1528317583.0, "EndTime": 1528317589.0, "Edges": [], "SummaryStatistics": { "OkCount": 2, "ErrorStatistics": { "ThrottleCount": 0, "OtherCount": 0, "TotalCount": 0 }, "FaultStatistics": { "OtherCount": 0, "TotalCount": 0 }, "TotalCount": 2, "TotalResponseTime": 0.12 }, "DurationHistogram": [ { "Value": 0.076, "Count": 1 }, { "Value": 0.044, "Count": 1 } ], "ResponseTimeHistogram": [ { "Value": 0.076, "Count": 1 }, { "Value": 0.044, "Count": 1 } ] }, { "ReferenceId": 2, "Name": "xray-sample.elasticbeanstalk.com", "Names": [ "xray-sample.elasticbeanstalk.com" ], "Root": true, "Type": "AWS::EC2::Instance", "State": "active", "StartTime": 1528317567.0, "EndTime": 1528317589.0, "Edges": [ { "ReferenceId": 1, "StartTime": 1528317567.0, "EndTime": 1528317589.0, "SummaryStatistics": { "OkCount": 2, "ErrorStatistics": { "ThrottleCount": 0, "OtherCount": 0, "TotalCount": 0 }, "FaultStatistics": { "OtherCount": 0, "TotalCount": 0 }, "TotalCount": 2, "TotalResponseTime": 0.12 }, "ResponseTimeHistogram": [ { "Value": 0.076, "Count": 1 }, { "Value": 0.044, "Count": 1 } ], "Aliases": [] }, { "ReferenceId": 3, "StartTime": 1528317567.0, "EndTime": 1528317589.0, "SummaryStatistics": { "OkCount": 2, "ErrorStatistics": { "ThrottleCount": 0, "OtherCount": 0, "TotalCount": 0 }, "FaultStatistics": { "OtherCount": 0, "TotalCount": 0 }, "TotalCount": 2, "TotalResponseTime": 0.125 }, "ResponseTimeHistogram": [ { "Value": 0.049, "Count": 1 }, { "Value": 0.076, "Count": 1 } ], "Aliases": [] } ], "SummaryStatistics": { "OkCount": 3, "ErrorStatistics": { "ThrottleCount": 0, "OtherCount": 1, "TotalCount": 1 }, "FaultStatistics": { "OtherCount": 0, "TotalCount": 0 }, "TotalCount": 4, "TotalResponseTime": 0.273 }, "DurationHistogram": [ { "Value": 0.005, "Count": 1 }, { "Value": 0.015, "Count": 1 }, { "Value": 0.157, "Count": 1 }, { "Value": 0.096, "Count": 1 } ], "ResponseTimeHistogram": [ { "Value": 0.005, "Count": 1 }, { "Value": 0.015, "Count": 1 }, { "Value": 0.157, "Count": 1 }, { "Value": 0.096, "Count": 1 } ] }, { "ReferenceId": 3, "Name": "SNS", "Names": [ "SNS" ], "Type": "AWS::SNS", "State": "unknown", "StartTime": 1528317583.0, "EndTime": 1528317589.0, "Edges": [], "SummaryStatistics": { "OkCount": 2, "ErrorStatistics": { "ThrottleCount": 0, "OtherCount": 0, "TotalCount": 0 }, "FaultStatistics": { "OtherCount": 0, "TotalCount": 0 }, "TotalCount": 2, "TotalResponseTime": 0.125 }, "DurationHistogram": [ { "Value": 0.049, "Count": 1 }, { "Value": 0.076, "Count": 1 } ], "ResponseTimeHistogram": [ { "Value": 0.049, "Count": 1 }, { "Value": 0.076, "Count": 1 } ] } ] }

Untuk memanggil grafik layanan berdasarkan konten grup, sertakan groupName atau groupARN. Contoh berikut menunjukkan panggilan grafik layanan ke grup bernama Example1.

contoh Skrip untuk mengambil grafik layanan berdasarkan nama untuk grup Example1
aws xray get-service-graph --group-name "Example1"

Anda dapat menggunakan API GetTraceSummaries untuk mendapatkan daftar ringkasan pelacakan. Ringkasan pelacakan menyertakan informasi yang dapat Anda gunakan untuk mengidentifikasi pelacakan yang ingin Anda unduh secara lengkap, termasuk anotasi, informasi permintaan dan tanggapan, dan ID.

Ada dua bendera TimeRangeType tersedia ketika memanggil aws xray get-trace-summaries:

  • TraceIdGetTraceSummaries Pencarian default menggunakan waktu traceID dan mengembalikan jejak yang dimulai dalam rentang yang dihitung. [start_time, end_time) Rentang stempel waktu ini dihitung berdasarkan pengkodean stempel waktu di dalam TraceId, atau dapat didefinisikan secara manual.

  • Waktu acara — Untuk mencari peristiwa yang terjadi dari waktu ke waktu, AWS X-Ray memungkinkan pencarian jejak menggunakan stempel waktu acara. Waktu peristiwa mengembalikan pelacakan yang aktif selama jangkauan [start_time, end_time), terlepas dari kapan penelusuran dimulai.

Gunakan perintah aws xray get-trace-summaries untuk mendapatkan daftar ringkasan pelacakan. Perintah berikut mendapatkan daftar ringkasan jejak dari antara 1 dan 2 menit di masa lalu menggunakan waktu default TraceId .

contoh Skrip untuk mendapatkan ringkasan pelacakan
EPOCH=$(date +%s) aws xray get-trace-summaries --start-time $(($EPOCH-120)) --end-time $(($EPOCH-60))
contoh GetTraceSummaries keluaran
{ "TraceSummaries": [ { "HasError": false, "Http": { "HttpStatus": 200, "ClientIp": "205.255.255.183", "HttpURL": "http://scorekeep.elasticbeanstalk.com/api/session", "UserAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "HttpMethod": "POST" }, "Users": [], "HasFault": false, "Annotations": {}, "ResponseTime": 0.084, "Duration": 0.084, "Id": "1-59602606-a43a1ac52fc7ee0eea12a82c", "HasThrottle": false }, { "HasError": false, "Http": { "HttpStatus": 200, "ClientIp": "205.255.255.183", "HttpURL": "http://scorekeep.elasticbeanstalk.com/api/user", "UserAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "HttpMethod": "POST" }, "Users": [ { "UserName": "5M388M1E" } ], "HasFault": false, "Annotations": { "UserID": [ { "AnnotationValue": { "StringValue": "5M388M1E" } } ], "Name": [ { "AnnotationValue": { "StringValue": "Ola" } } ] }, "ResponseTime": 3.232, "Duration": 3.232, "Id": "1-59602603-23fc5b688855d396af79b496", "HasThrottle": false } ], "ApproximateTime": 1499473304.0, "TracesProcessedCount": 2 }

Gunakan ID pelacakan dari output untuk mengambil pelacakan penuh dengan API BatchGetTraces.

contoh BatchGetTraces perintah
$ aws xray batch-get-traces --trace-ids 1-596025b4-7170afe49f7aa708b1dd4a6b
contoh BatchGetTraces keluaran
{ "Traces": [ { "Duration": 3.232, "Segments": [ { "Document": "{\"id\":\"1fb07842d944e714\",\"name\":\"random-name\",\"start_time\":1.499473411677E9,\"end_time\":1.499473414572E9,\"parent_id\":\"0c544c1b1bbff948\",\"http\":{\"response\":{\"status\":200}},\"aws\":{\"request_id\":\"ac086670-6373-11e7-a174-f31b3397f190\"},\"trace_id\":\"1-59602603-23fc5b688855d396af79b496\",\"origin\":\"AWS::Lambda\",\"resource_arn\":\"arn:aws:lambda:us-west-2:123456789012:function:random-name\"}", "Id": "1fb07842d944e714" }, { "Document": "{\"id\":\"194fcc8747581230\",\"name\":\"Scorekeep\",\"start_time\":1.499473411562E9,\"end_time\":1.499473414794E9,\"http\":{\"request\":{\"url\":\"http://scorekeep.elasticbeanstalk.com/api/user\",\"method\":\"POST\",\"user_agent\":\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",\"client_ip\":\"205.251.233.183\"},\"response\":{\"status\":200}},\"aws\":{\"elastic_beanstalk\":{\"version_label\":\"app-abb9-170708_002045\",\"deployment_id\":406,\"environment_name\":\"scorekeep-dev\"},\"ec2\":{\"availability_zone\":\"us-west-2c\",\"instance_id\":\"i-0cd9e448944061b4a\"},\"xray\":{\"sdk_version\":\"1.1.2\",\"sdk\":\"X-Ray for Java\"}},\"service\":{},\"trace_id\":\"1-59602603-23fc5b688855d396af79b496\",\"user\":\"5M388M1E\",\"origin\":\"AWS::ElasticBeanstalk::Environment\",\"subsegments\":[{\"id\":\"0c544c1b1bbff948\",\"name\":\"Lambda\",\"start_time\":1.499473411629E9,\"end_time\":1.499473414572E9,\"http\":{\"response\":{\"status\":200,\"content_length\":14}},\"aws\":{\"log_type\":\"None\",\"status_code\":200,\"function_name\":\"random-name\",\"invocation_type\":\"RequestResponse\",\"operation\":\"Invoke\",\"request_id\":\"ac086670-6373-11e7-a174-f31b3397f190\",\"resource_names\":[\"random-name\"]},\"namespace\":\"aws\"},{\"id\":\"071684f2e555e571\",\"name\":\"## UserModel.saveUser\",\"start_time\":1.499473414581E9,\"end_time\":1.499473414769E9,\"metadata\":{\"debug\":{\"test\":\"Metadata string from UserModel.saveUser\"}},\"subsegments\":[{\"id\":\"4cd3f10b76c624b4\",\"name\":\"DynamoDB\",\"start_time\":1.49947341469E9,\"end_time\":1.499473414769E9,\"http\":{\"response\":{\"status\":200,\"content_length\":57}},\"aws\":{\"table_name\":\"scorekeep-user\",\"operation\":\"UpdateItem\",\"request_id\":\"MFQ8CGJ3JTDDVVVASUAAJGQ6NJ82F738BOB4KQNSO5AEMVJF66Q9\",\"resource_names\":[\"scorekeep-user\"]},\"namespace\":\"aws\"}]}]}", "Id": "194fcc8747581230" }, { "Document": "{\"id\":\"00f91aa01f4984fd\",\"name\":\"random-name\",\"start_time\":1.49947341283E9,\"end_time\":1.49947341457E9,\"parent_id\":\"1fb07842d944e714\",\"aws\":{\"function_arn\":\"arn:aws:lambda:us-west-2:123456789012:function:random-name\",\"resource_names\":[\"random-name\"],\"account_id\":\"123456789012\"},\"trace_id\":\"1-59602603-23fc5b688855d396af79b496\",\"origin\":\"AWS::Lambda::Function\",\"subsegments\":[{\"id\":\"e6d2fe619f827804\",\"name\":\"annotations\",\"start_time\":1.499473413012E9,\"end_time\":1.499473413069E9,\"annotations\":{\"UserID\":\"5M388M1E\",\"Name\":\"Ola\"}},{\"id\":\"b29b548af4d54a0f\",\"name\":\"SNS\",\"start_time\":1.499473413112E9,\"end_time\":1.499473414071E9,\"http\":{\"response\":{\"status\":200}},\"aws\":{\"operation\":\"Publish\",\"region\":\"us-west-2\",\"request_id\":\"a2137970-f6fc-5029-83e8-28aadeb99198\",\"retries\":0,\"topic_arn\":\"arn:aws:sns:us-west-2:123456789012:awseb-e-ruag3jyweb-stack-NotificationTopic-6B829NT9V5O9\"},\"namespace\":\"aws\"},{\"id\":\"2279c0030c955e52\",\"name\":\"Initialization\",\"start_time\":1.499473412064E9,\"end_time\":1.499473412819E9,\"aws\":{\"function_arn\":\"arn:aws:lambda:us-west-2:123456789012:function:random-name\"}}]}", "Id": "00f91aa01f4984fd" }, { "Document": "{\"id\":\"17ba309b32c7fbaf\",\"name\":\"DynamoDB\",\"start_time\":1.49947341469E9,\"end_time\":1.499473414769E9,\"parent_id\":\"4cd3f10b76c624b4\",\"inferred\":true,\"http\":{\"response\":{\"status\":200,\"content_length\":57}},\"aws\":{\"table_name\":\"scorekeep-user\",\"operation\":\"UpdateItem\",\"request_id\":\"MFQ8CGJ3JTDDVVVASUAAJGQ6NJ82F738BOB4KQNSO5AEMVJF66Q9\",\"resource_names\":[\"scorekeep-user\"]},\"trace_id\":\"1-59602603-23fc5b688855d396af79b496\",\"origin\":\"AWS::DynamoDB::Table\"}", "Id": "17ba309b32c7fbaf" }, { "Document": "{\"id\":\"1ee3c4a523f89ca5\",\"name\":\"SNS\",\"start_time\":1.499473413112E9,\"end_time\":1.499473414071E9,\"parent_id\":\"b29b548af4d54a0f\",\"inferred\":true,\"http\":{\"response\":{\"status\":200}},\"aws\":{\"operation\":\"Publish\",\"region\":\"us-west-2\",\"request_id\":\"a2137970-f6fc-5029-83e8-28aadeb99198\",\"retries\":0,\"topic_arn\":\"arn:aws:sns:us-west-2:123456789012:awseb-e-ruag3jyweb-stack-NotificationTopic-6B829NT9V5O9\"},\"trace_id\":\"1-59602603-23fc5b688855d396af79b496\",\"origin\":\"AWS::SNS\"}", "Id": "1ee3c4a523f89ca5" } ], "Id": "1-59602603-23fc5b688855d396af79b496" } ], "UnprocessedTraceIds": [] }

Pelacakan lengkap mencakup dokumen untuk setiap segmen, dikompilasi dari semua dokumen segmen yang diterima dengan ID pelacakan yang sama. Dokumen-dokumen ini tidak mewakili data karena dikirim ke X-Ray oleh aplikasi Anda. Sebaliknya, data-data tersebut mewakili dokumen yang diproses dihasilkan oleh layanan X-Ray. X-Ray membuat dokumen pelacakan lengkap dengan mengompilasi dokumen segmen yang dikirim oleh aplikasi Anda, dan menghapus data yang tidak sesuai dengan skema dokumen segmen . Untuk informasi selengkapnya, lihat Dokumen segmen X-Ray.

X-Ray juga membuat segmen yang disimpulkan untuk panggilan hilir ke layanan yang tidak mengirim segmen itu sendiri. Misalnya, saat Anda memanggil DynamoDB dengan klien berinstrumen, X-Ray SDK mencatat subsegmen dengan detail tentang panggilan dari sudut pandangnya. Namun, DynamoDB tidak mengirim segmen yang sesuai. X-Ray menggunakan informasi di subsegmen untuk membuat segmen yang disimpulkan untuk mewakili sumber daya DynamoDB di peta jejak, dan menambahkannya ke dokumen jejak.

Untuk mendapatkan beberapa pelacakan dari API, Anda memerlukan daftar ID pelacakan, yang dapat Anda ekstrak dari output get-trace-summaries dengan kueri AWS CLI. Alihkan ulang daftar ke input batch-get-traces untuk mendapatkan pelacakan penuh untuk jangka waktu tertentu.

contoh Skrip untuk mendapatkan pelacakan penuh selama satu menit
EPOCH=$(date +%s) TRACEIDS=$(aws xray get-trace-summaries --start-time $(($EPOCH-120)) --end-time $(($EPOCH-60)) --query 'TraceSummaries[*].Id' --output text) aws xray batch-get-traces --trace-ids $TRACEIDS --query 'Traces[*]'

Setelah membuat ringkasan jejak dengan GetTraceSummaries API, ringkasan jejak sebagian dapat digunakan kembali dalam format JSON mereka untuk membuat ekspresi filter yang disempurnakan berdasarkan akar penyebab. Lihat contoh di bawah untuk panduan langkah-langkah penyempurnaan.

contoh Contoh GetTraceSummaries keluaran - bagian akar penyebab waktu respons
{ "Services": [ { "Name": "GetWeatherData", "Names": ["GetWeatherData"], "AccountId": 123456789012, "Type": null, "Inferred": false, "EntityPath": [ { "Name": "GetWeatherData", "Coverage": 1.0, 'Remote": false }, { "Name": "get_temperature", "Coverage": 0.8, "Remote": false } ] }, { "Name": "GetTemperature", "Names": ["GetTemperature"], "AccountId": 123456789012, "Type": null, "Inferred": false, "EntityPath": [ { "Name": "GetTemperature", "Coverage": 0.7, "Remote": false } ] } ] }

Dengan mengedit dan menghilangkan output di atas, JSON ini dapat menjadi filter untuk entitas akar masalah yang cocok. Untuk setiap bidang yang ada di JSON, setiap kandidat yang cocok harus sama persis, atau pelacakan tidak akan dikembalikan. Bidang yang dihapus menjadi nilai wildcard, format yang kompatibel dengan struktur kueri ekspresi filter.

contoh Akar masalah waktu respons yang diformat ulang
{ "Services": [ { "Name": "GetWeatherData", "EntityPath": [ { "Name": "GetWeatherData" }, { "Name": "get_temperature" } ] }, { "Name": "GetTemperature", "EntityPath": [ { "Name": "GetTemperature" } ] } ] }

JSON ini kemudian digunakan sebagai bagian dari ekspresi filter melalui panggilan ke rootcause.json = #[{}]. Lihat bagian Gunakan ekspresi filter di Jelajahi konsol X-Ray untuk detail selengkapnya tentang kueri dengan ekspresi filter.

contoh Contoh filter JSON
rootcause.json = #[{ "Services": [ { "Name": "GetWeatherData", "EntityPath": [{ "Name": "GetWeatherData" }, { "Name": "get_temperature" } ] }, { "Name": "GetTemperature", "EntityPath": [ { "Name": "GetTemperature" } ] } ] }]

X-Ray menyediakan API untuk mengonfigurasi aturan pengambilan sampel, aturan grup, dan pengaturan enkripsi.

Pengaturan enkripsi

Gunakan PutEncryptionConfiguntuk menentukan kunci AWS Key Management Service (AWS KMS) yang akan digunakan untuk enkripsi.

catatan

X-Ray tidak mendukung tombol KMS asimetris.

$ aws xray put-encryption-config --type KMS --key-id alias/aws/xray { "EncryptionConfig": { "KeyId": "arn:aws:kms:us-east-2:123456789012:key/c234g4e8-39e9-4gb0-84e2-b0ea215cbba5", "Status": "UPDATING", "Type": "KMS" } }

Untuk ID kunci, Anda dapat menggunakan alias (seperti yang ditunjukkan dalam contoh), ID kunci, atau Amazon Resource Name (ARN).

Gunakan GetEncryptionConfig untuk mendapatkan konfigurasi saat ini. Setelah X-Ray selesai menerapkan pengaturan Anda, status akan berubah dari UPDATING ke ACTIVE.

$ aws xray get-encryption-config { "EncryptionConfig": { "KeyId": "arn:aws:kms:us-east-2:123456789012:key/c234g4e8-39e9-4gb0-84e2-b0ea215cbba5", "Status": "ACTIVE", "Type": "KMS" } }

Untuk berhenti menggunakan kunci KMS dan menggunakan enkripsi default, atur jenis enkripsi keNONE.

$ aws xray put-encryption-config --type NONE { "EncryptionConfig": { "Status": "UPDATING", "Type": "NONE" } }

Anda dapat mengelola aturan pengambilan sampel pada akun Anda dengan API X-Ray. Untuk informasi lebih lanjut tentang pengambilan sampel, lihatKonfigurasikan aturan pengambilan sampel. Untuk informasi selengkapnya tentang menambahkan dan mengelola tag, lihatMenandai aturan dan grup pengambilan sampel X-Ray.

Dapatkan semua aturan pengambilan sampel dengan GetSamplingRules.

$ aws xray get-sampling-rules { "SamplingRuleRecords": [ { "SamplingRule": { "RuleName": "Default", "RuleARN": "arn:aws:xray:us-east-2:123456789012:sampling-rule/Default", "ResourceARN": "*", "Priority": 10000, "FixedRate": 0.05, "ReservoirSize": 1, "ServiceName": "*", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1, "Attributes": {} }, "CreatedAt": 0.0, "ModifiedAt": 1529959993.0 } ] }

Aturan default berlaku untuk semua permintaan yang tidak cocok dengan aturan lain. Ini adalah aturan prioritas terendah dan tidak dapat dihapus. Namun, Anda dapat mengubah tingkat dan ukuran reservoir dengan UpdateSamplingRule.

contoh Input API untuk UpdateSamplingRule – 10000-default.json
{ "SamplingRuleUpdate": { "RuleName": "Default", "FixedRate": 0.01, "ReservoirSize": 0 } }

Contoh berikut menggunakan file sebelumnya sebagai input untuk mengubah aturan default ke satu persen tanpa reservoir. Tanda adalah opsional. Jika Anda memilih untuk menambahkan tanda, kunci tanda diperlukan, dan nilai tanda adalah opsional. Untuk menghapus tag yang ada dari aturan pengambilan sampel, gunakan UntagResource.

$ aws xray update-sampling-rule --cli-input-json file://1000-default.json --tags [{"Key": "key_name","Value": "value"},{"Key": "key_name","Value": "value"}] { "SamplingRuleRecords": [ { "SamplingRule": { "RuleName": "Default", "RuleARN": "arn:aws:xray:us-east-2:123456789012:sampling-rule/Default", "ResourceARN": "*", "Priority": 10000, "FixedRate": 0.01, "ReservoirSize": 0, "ServiceName": "*", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1, "Attributes": {} }, "CreatedAt": 0.0, "ModifiedAt": 1529959993.0 },

Buat aturan pengambilan sampel tambahan dengan CreateSamplingRule. Bila Anda membuat aturan, sebagian besar bidang aturan diperlukan. Contoh berikut ini menampilkan pembuatan dua aturan. Aturan pertama ini menetapkan tingkat dasar untuk aplikasi sampel Scorekeep. Aturan tersebut cocok dengan semua permintaan yang dilayani oleh API yang tidak cocok dengan aturan prioritas yang lebih tinggi.

contoh Input API untuk UpdateSamplingRule – 9000-base-scorekeep.json
{ "SamplingRule": { "RuleName": "base-scorekeep", "ResourceARN": "*", "Priority": 9000, "FixedRate": 0.1, "ReservoirSize": 5, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1 } }

Aturan kedua juga berlaku untuk Scorekeep, tetapi memiliki prioritas yang lebih tinggi dan lebih spesifik. Aturan ini menetapkan tingkat pengambilan sampel yang sangat rendah atas permintaan polling. Ini adalah permintaan GET yang dibuat oleh klien setiap beberapa detik untuk memeriksa perubahan pada status game.

contoh Input API untuk UpdateSamplingRule – 5000-polling-scorekeep.json
{ "SamplingRule": { "RuleName": "polling-scorekeep", "ResourceARN": "*", "Priority": 5000, "FixedRate": 0.003, "ReservoirSize": 0, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "GET", "URLPath": "/api/state/*", "Version": 1 } }

Tanda adalah opsional. Jika Anda memilih untuk menambahkan tanda, kunci tanda diperlukan, dan nilai tanda adalah opsional.

$ aws xray create-sampling-rule --cli-input-json file://5000-polling-scorekeep.json --tags [{"Key": "key_name","Value": "value"},{"Key": "key_name","Value": "value"}] { "SamplingRuleRecord": { "SamplingRule": { "RuleName": "polling-scorekeep", "RuleARN": "arn:aws:xray:us-east-1:123456789012:sampling-rule/polling-scorekeep", "ResourceARN": "*", "Priority": 5000, "FixedRate": 0.003, "ReservoirSize": 0, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "GET", "URLPath": "/api/state/*", "Version": 1, "Attributes": {} }, "CreatedAt": 1530574399.0, "ModifiedAt": 1530574399.0 } } $ aws xray create-sampling-rule --cli-input-json file://9000-base-scorekeep.json { "SamplingRuleRecord": { "SamplingRule": { "RuleName": "base-scorekeep", "RuleARN": "arn:aws:xray:us-east-1:123456789012:sampling-rule/base-scorekeep", "ResourceARN": "*", "Priority": 9000, "FixedRate": 0.1, "ReservoirSize": 5, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1, "Attributes": {} }, "CreatedAt": 1530574410.0, "ModifiedAt": 1530574410.0 } }

Untuk menghapus aturan pengambilan sampel, gunakan DeleteSamplingRule.

$ aws xray delete-sampling-rule --rule-name polling-scorekeep { "SamplingRuleRecord": { "SamplingRule": { "RuleName": "polling-scorekeep", "RuleARN": "arn:aws:xray:us-east-1:123456789012:sampling-rule/polling-scorekeep", "ResourceARN": "*", "Priority": 5000, "FixedRate": 0.003, "ReservoirSize": 0, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "GET", "URLPath": "/api/state/*", "Version": 1, "Attributes": {} }, "CreatedAt": 1530574399.0, "ModifiedAt": 1530574399.0 } }

Anda dapat menggunakan API X-Ray untuk mengelola grup di akun Anda. Grup adalah kumpulan pelacakan yang ditentukan oleh ekspresi filter. Anda dapat menggunakan grup untuk menghasilkan grafik layanan tambahan dan menyediakan CloudWatch metrik Amazon. Lihat Mendapatkan data dari X-Ray untuk detail selengkapnya tentang bekerja dengan grafik dan metrik layanan melalui X-Ray API. Untuk informasi selengkapnya tentang grup, lihat Konfigurasikan grup. Untuk informasi selengkapnya tentang menambahkan dan mengelola tag, lihatMenandai aturan dan grup pengambilan sampel X-Ray.

Buat grup denganCreateGroup. Tanda adalah opsional. Jika Anda memilih untuk menambahkan tanda, kunci tanda diperlukan, dan nilai tanda adalah opsional.

$ aws xray create-group --group-name "TestGroup" --filter-expression "service(\"example.com\") {fault}" --tags [{"Key": "key_name","Value": "value"},{"Key": "key_name","Value": "value"}] { "GroupName": "TestGroup", "GroupARN": "arn:aws:xray:us-east-2:123456789012:group/TestGroup/UniqueID", "FilterExpression": "service(\"example.com\") {fault OR error}" }

Dapatkan semua grup yang ada dengan GetGroups.

$ aws xray get-groups { "Groups": [ { "GroupName": "TestGroup", "GroupARN": "arn:aws:xray:us-east-2:123456789012:group/TestGroup/UniqueID", "FilterExpression": "service(\"example.com\") {fault OR error}" }, { "GroupName": "TestGroup2", "GroupARN": "arn:aws:xray:us-east-2:123456789012:group/TestGroup2/UniqueID", "FilterExpression": "responsetime > 2" } ], "NextToken": "tokenstring" }

Perbarui grup denganUpdateGroup. Tanda adalah opsional. Jika Anda memilih untuk menambahkan tanda, kunci tanda diperlukan, dan nilai tanda adalah opsional. Untuk menghapus tag yang ada dari grup, gunakan UntagResource.

$ aws xray update-group --group-name "TestGroup" --group-arn "arn:aws:xray:us-east-2:123456789012:group/TestGroup/UniqueID" --filter-expression "service(\"example.com\") {fault OR error}" --tags [{"Key": "Stage","Value": "Prod"},{"Key": "Department","Value": "QA"}] { "GroupName": "TestGroup", "GroupARN": "arn:aws:xray:us-east-2:123456789012:group/TestGroup/UniqueID", "FilterExpression": "service(\"example.com\") {fault OR error}" }

Hapus grup dengan DeleteGroup.

$ aws xray delete-group --group-name "TestGroup" --group-arn "arn:aws:xray:us-east-2:123456789012:group/TestGroup/UniqueID" { }

X-Ray SDK menggunakan X-Ray API untuk mendapatkan aturan sampling, melaporkan hasil sampling, dan mendapatkan kuota. Anda dapat menggunakan API ini untuk mendapatkan pemahaman yang lebih baik tentang cara kerja aturan pengambilan sampel, atau untuk menerapkan pengambilan sampel dalam bahasa yang tidak didukung oleh X-Ray SDK.

Mulailah dengan mendapatkan semua aturan pengambilan sampel menggunakan GetSamplingRules.

$ aws xray get-sampling-rules { "SamplingRuleRecords": [ { "SamplingRule": { "RuleName": "Default", "RuleARN": "arn:aws:xray:us-east-1::sampling-rule/Default", "ResourceARN": "*", "Priority": 10000, "FixedRate": 0.01, "ReservoirSize": 0, "ServiceName": "*", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1, "Attributes": {} }, "CreatedAt": 0.0, "ModifiedAt": 1530558121.0 }, { "SamplingRule": { "RuleName": "base-scorekeep", "RuleARN": "arn:aws:xray:us-east-1::sampling-rule/base-scorekeep", "ResourceARN": "*", "Priority": 9000, "FixedRate": 0.1, "ReservoirSize": 2, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1, "Attributes": {} }, "CreatedAt": 1530573954.0, "ModifiedAt": 1530920505.0 }, { "SamplingRule": { "RuleName": "polling-scorekeep", "RuleARN": "arn:aws:xray:us-east-1::sampling-rule/polling-scorekeep", "ResourceARN": "*", "Priority": 5000, "FixedRate": 0.003, "ReservoirSize": 0, "ServiceName": "Scorekeep", "ServiceType": "*", "Host": "*", "HTTPMethod": "GET", "URLPath": "/api/state/*", "Version": 1, "Attributes": {} }, "CreatedAt": 1530918163.0, "ModifiedAt": 1530918163.0 } ] }

Output termasuk aturan default dan aturan kustom. Lihat Mengkonfigurasi pengaturan sampling, grup, dan enkripsi dengan X-Ray API jika Anda belum membuat aturan pengambilan sampel.

Mengevaluasi aturan terhadap permintaan masuk dalam urutan menaik prioritas. Ketika aturan cocok, gunakan nilai tetap dan ukuran reservoir untuk membuat keputusan pengambilan sampel. Catat permintaan sampel dan abaikan (untuk tujuan pelacakan) permintaan tanpa sampel. Hentikan evaluasi aturan ketika keputusan pengambilan sampel dibuat.

Sebuah ukuran aturan reservoir adalah jumlah target pelacakan untuk mencatat per detik sebelum menerapkan nilai tetap. Reservoir berlaku di semua layanan secara kumulatif, sehingga Anda tidak dapat menggunakannya secara langsung. Namun, jika bukan nol, Anda dapat meminjam satu pelacakan per detik dari reservoir sampai X-Ray menetapkan kuota. Sebelum menerima kuota, catat permintaan pertama setiap detik, dan terapkan nilai tetap untuk permintaan tambahan. Nilai tetapnya merupakan angka desimal antara 0 dan 1,00 (100%).

Contoh berikut menunjukkan panggilan ke GetSamplingTargets dengan detail tentang keputusan pengambilan sampel yang dibuat selama 10 detik terakhir.

$ aws xray get-sampling-targets --sampling-statistics-documents '[ { "RuleName": "base-scorekeep", "ClientID": "ABCDEF1234567890ABCDEF10", "Timestamp": "2018-07-07T00:20:06", "RequestCount": 110, "SampledCount": 20, "BorrowCount": 10 }, { "RuleName": "polling-scorekeep", "ClientID": "ABCDEF1234567890ABCDEF10", "Timestamp": "2018-07-07T00:20:06", "RequestCount": 10500, "SampledCount": 31, "BorrowCount": 0 } ]' { "SamplingTargetDocuments": [ { "RuleName": "base-scorekeep", "FixedRate": 0.1, "ReservoirQuota": 2, "ReservoirQuotaTTL": 1530923107.0, "Interval": 10 }, { "RuleName": "polling-scorekeep", "FixedRate": 0.003, "ReservoirQuota": 0, "ReservoirQuotaTTL": 1530923107.0, "Interval": 10 } ], "LastRuleModification": 1530920505.0, "UnprocessedStatistics": [] }

Respons dari X-Ray mencakup kuota untuk digunakan daripada meminjam dari reservoir. Dalam contoh ini, layanan meminjam 10 peristiwa dari reservoir selama lebih dari 10 detik, dan menerapkan nilai tetap 10 persen untuk 100 permintaan lainnya, mengakibatkan total 20 permintaan sampel. Kuota tersebut bagus selama lima menit (ditunjukkan dengan waktu untuk tayang) atau sampai kuota baru ditetapkan. X-Ray juga dapat menetapkan interval pelaporan yang lebih lama daripada default, meskipun tidak ada di sini.

catatan

Respons dari X-Ray mungkin tidak termasuk kuota saat pertama kali Anda memanggilnya. Lanjutkan peminjaman dari reservoir sampai Anda diberi kuota.

Dua bidang lainnya dalam respons mungkin menunjukkan masalah dengan input. Periksa LastRuleModification untuk terakhir kali Anda menelepon GetSamplingRules. Jika lebih baru, dapatkan salinan aturan baru. UnprocessedStatistics dapat mencakup kesalahan yang menunjukkan bahwa aturan telah dihapus, dokumen statistik dalam input terlalu tua, atau izin mengalami kesalahan.

Segmen penelusuran adalah representasi JSON dari permintaan yang digunakan aplikasi Anda. Segmen penelusuran mencatat informasi tentang permintaan asli, informasi tentang pekerjaan yang aplikasi Anda lakukan secara lokal, dan subsegmen dengan informasi mengenai panggilan hilir yang aplikasi Anda buat sebagai sumber daya AWS , HTTP API, dan basis data SQL.

Sebuah dokumen segmen menyampaikan informasi tentang segmen ke X-Ray. Dokumen segmen dapat sebesar 64 kB dan berisi seluruh segmen dengan subsegment, fragmen segmen yang menunjukkan bahwa permintaan sedang berlangsung, atau subsegmen tunggal yang dikirim secara terpisah. Anda dapat mengirim dokumen segmen langsung ke X-Ray dengan menggunakan API PutTraceSegments.

X-Ray menghimpun dan memproses dokumen segmen untuk menghasilkan ringkasan penelusuran dan penelusuran penuh yang dapat Anda akses menggunakan API GetTraceSummaries dan BatchGetTraces, secara berturut-turut. Selain segmen dan subsegmen yang Anda kirim ke X-Ray, layanan ini menggunakan informasi dalam subsegmen untuk menghasilkan segmen yang disimpulkan serta menambahkan segmen tersebut ke penelusuran penuh. Segmen yang disimpulkan mewakili layanan hilir dan sumber daya di peta jejak.

X-Ray menyediakan Skema JSON untuk dokumen segmen. Anda dapat mengunduh skema di sini: xray-segmentdocument-schema-v1.0.0. Bidang dan objek yang tercantum dalam skema dijelaskan lebih detail pada bagian berikut.

Bagian dari bidang segmen diindeks oleh X-Ray untuk digunakan dengan ekspresi filter. Misalnya, jika Anda mengatur bidang user pada sebuah segmen ke pengenal unik, Anda dapat mencari segmen yang terkait dengan pengguna tertentu di konsol X-Ray atau menggunakan API GetTraceSummaries. Untuk informasi selengkapnya, lihat Gunakan ekspresi filter.

Saat Anda melengkapi aplikasi Anda dengan SDK X-Ray, SDK akan menghasilkan dokumen segmen untuk Anda. Alih-alih mengirim dokumen segmen secara langsung ke X-Ray, SDK mentransmisikannya melalui port UDP lokal kepada Daemon X-Ray. Untuk informasi selengkapnya, lihat Mengirim dokumen segmen ke daemon X-Ray.

Segmen mencatat informasi pelacakan tentang permintaan yang digunakan aplikasi Anda. Minimal, segmen mencatat nama, ID, waktu mulai, penelusuran ID, dan waktu akhir permintaan.

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

Bidang berikut diperlukan, atau secara kondisional diperlukan, untuk segmen.

catatan

Nilai mesti menjadi string (hingga 250 karakter) kecuali dicatat sebaliknya.

Bidang Segment yang Diperlukan
  • name – Nama logis dari layanan yang menangani permintaan, hingga 200 karakter. Misalnya, nama aplikasi atau nama domain Anda. Nama dapat berisi huruf Unicode, angka, dan spasi, serta simbol-simbol berikut: _, ., :, /, %, &, #, =, +, \, -, @

  • id – Pengenal 64-bit untuk segmen, unik di antara segmen dalam penelusuran yang sama, dalam 16 digit heksadesimal.

  • trace_id – Pengenal unik yang menghubungkan semua segmen dan subsegmen yang berasal dari permintaan klien tunggal.

    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.

    Keamanan ID Penelusuran

    ID penelusuran terlihat di header respons. Menghasilkan penelusuran ID dengan algoritme acak yang aman untuk memastikan bahwa penyerang tidak dapat mengalkulasi pelacakan ID dimasa mendatang dan mengirim permintaan dengan ID tersebut pada aplikasi Anda.

  • start_timebilangan yang merupakan waktu ketika segmen dibuat, di detik titik mengambang dalam jangka waktu zaman. Misalnya, 1480615200.010 atau 1.480615200010E9. Gunakan tempat desimal sebanyak yang Anda butuhkan. Resolusi microsecond dianjurkan bila tersedia.

  • end_timeangka yang merupakan waktu segmen ditutup. Contohnya, 1480615200.090 atau 1.480615200090E9. Tentukan salah satu dari end_time atau in_progress.

  • in_progressboolean, atur ke true alih-alih menentukan sebuah end_time untuk mencatat bahwa segmen dimulai, tetapi tidak lengkap. Kirim segmen yang sedang berlangsung saat aplikasi Anda menerima permintaan yang akan memakan waktu lama untuk melayani, untuk melacak tanda terima permintaan. Ketika respons dikirim, mengirim segmen lengkap untuk menimpa segmen sedang berlangsung. Hanya mengirim satu segmen lengkap, dan satu atau nol segmen dalam proses, per permintaan.

Nama Layanan

Segmen name mesti sesuai dengan nama domain atau nama logis dari layanan yang menghasilkan segmen. Walau bagaimanapun, ini tidak dipaksakan. Aplikasi apa pun yang memiliki izin untuk PutTraceSegments dapat mengirim segmen dengan nama apa pun.

Bidang berikut opsional untuk segmen.

Bidang Segmen Opsional
  • service – Objek dengan informasi tentang aplikasi Anda.

    • version – String yang mengidentifikasi versi aplikasi Anda yang melayani permintaan.

  • user – Sebuah string yang mengidentifikasi pengguna yang mengirim permintaan.

  • origin— Jenis AWS sumber daya yang menjalankan aplikasi Anda.

    Nilai yang Didukung
    • AWS::EC2::Instance – Luncurkan Instans Amazon EC2

    • AWS::ECS::Container – Kontainer Amazon ECS.

    • AWS::ElasticBeanstalk::Environment – Lingkungan Elastic Beanstalk

    Ketika beberapa nilai yang berlaku untuk aplikasi Anda, gunakan salah satu yang paling spesifik. Misalnya, lingkungan Multicontainer Docker Elastic Beanstalk menjalankan aplikasi Anda pada kontainer Amazon ECS, yang pada gilirannya berjalan pada instans Amazon EC2. Dalam hal ini Anda akan mengatur asal untuk AWS::ElasticBeanstalk::Environment karena lingkungan adalah induk dari dua sumber daya lainnya.

  • parent_id – ID subsegmen yang Anda tentukan jika permintaan berasal dari aplikasi yang diinstrumentasi. X-Ray SDK menambahkan ID subsegmen induk ke Header pelacakan untuk panggilan HTTP hilir. Dalam kasus subsegment yang di-nest, subsegmen dapat memiliki segmen atau subsegmen sebagai induknya.

  • http – objek http dengan informasi tentang permintaan HTTP asli.

  • awsawsobjek dengan informasi tentang AWS sumber daya tempat aplikasi Anda melayani permintaan.

  • error, throttle, fault, dan cause – bidang kesalahan yang menunjukkan kesalahan terjadi dan yang mencakup informasi tentang pengecualian yang menyebabkan kesalahan.

  • annotations – Objek annotations dengan pasangan nilai kunci yang ingin Anda X-Ray untuk indeks pencarian.

  • metadata – Objek metadata dengan data tambahan yang ingin Anda simpan di segmen.

  • subsegmentssusunan objek subsegment.

Anda dapat membuat subsegmen untuk merekam panggilan Layanan AWS dan sumber daya yang Anda buat dengan AWS SDK, panggilan ke API web HTTP internal atau eksternal, atau kueri database SQL. Anda juga dapat membuat subsegment untuk debug atau anotasi blok kode dalam aplikasi Anda. Subsegmen dapat berisi subsegmen lain, sehingga subsegmen kustom yang mencatat metadata tentang panggilan fungsi internal dapat berisi subsegmen dan subsegmen kustom lainnya untuk panggilan hilir.

Sebuah subsegmen mencatat panggilan hilir dari sudut pandang layanan yang menyebutnya. X-Ray menggunakan subsegmen untuk mengidentifikasi layanan hilir yang tidak mengirim segmen dan membuat entri untuk mereka di grafik layanan.

Sebuah subsegmen dapat tertanam dalam dokumen segmen penuh atau dikirim secara independen. Kirim subsegment secara terpisah untuk asynchronously melacak panggilan hilir untuk permintaan berjalan lama, atau untuk menghindari melampaui ukuran dokumen segmen maksimum.

contoh Segmen dengan subsegmen tertanam

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

{ "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 } } } ] }

Untuk permintaan yang berjalan lama, Anda dapat mengirim segmen yang sedang berlangsung untuk memberi tahu X-Ray bahwa permintaan telah diterima, lalu mengirim subsegmen secara terpisah untuk melacaknya sebelum menyelesaikan permintaan awal.

contoh Segmen yang sedang berlangsung
{ "name" : "example.com", "id" : "70de5b6f19ff9a0b", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979", "in_progress": true }
contoh Subsegmen independen

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

{ "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 } } }

Ketika permintaan selesai, tutup segmen dengan mengirim ulangnya bersama end_time. Segmen lengkap menimpa segmen yang sedang berlangsung.

Anda juga dapat mengirim subsegment secara terpisah untuk permintaan selesai yang memicu alur kerja asinkron. Misalnya, web API dapat mengembalikan respons OK 200 segera sebelum memulai pekerjaan yang diminta pengguna. Anda dapat mengirim segmen lengkap ke X-Ray segera setelah respons dikirim, diikuti oleh subsegmen untuk pekerjaan yang diselesaikan nanti. Seperti segmen, Anda juga dapat mengirim fragmen subsegmen untuk mencatat bahwa subsegmen telah dimulai, dan kemudian menimpa dengan subsegmen penuh setelah panggilan hilir selesai.

Bidang berikut diperlukan, atau kondisional diperlukan, untuk subsegment.

catatan

Nilai adalah string hingga 250 karakter kecuali dicatat sebaliknya.

Bidang Subsegmen yang Wajib
  • id – Pengenal 64-bit untuk subsegmen, unik di antara segmen di penelusuran yang sama, dalam 16 digit heksadesimal.

  • name – Nama logis dari subsegmen. Untuk panggilan hilir, nama subsegmen setelah sumber daya atau layanan yang disebut. Untuk subsegment kustom, nama subsegmen setelah kode yang instrumen (misalnya, nama fungsi).

  • start_timeangka yang merupakan waktu subsegment dibuat, di floating point detik dalam waktu zaman, akurat untuk milidetik. Misalnya, 1480615200.010 atau 1.480615200010E9.

  • end_timeangka yang merupakan waktu segmen ditutup. Misalnya, 1480615200.090 atau 1.480615200090E9. Tentukan sebuah end_time atau in_progress.

  • in_progressboolean yang diatur ke true alih-alih menentukan sebuah end_time untuk mencatat bahwa segmen dimulai, tetapi tidak lengkap. Hanya kirim satu subsegmen lengkap, dan satu atau nol subsegmen dalam proses, per permintaan hilir.

  • trace_id – Penelusuran ID dari segmen induk subsegmen ini. Diperlukan hanya jika mengirim subsegmen secara terpisah.

    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.

  • parent_id – Segmen ID dari segmen induk subsegmen ini. Diperlukan hanya jika mengirim subsegmen secara terpisah. Dalam kasus subsegment yang di-nest, subsegmen dapat memiliki segmen atau subsegmen sebagai induknya.

  • typesubsegment. Diperlukan hanya jika mengirim subsegmen secara terpisah.

Bidang berikut adalah opsional untuk subsegment.

Kolom Subsegmen opsional
  • namespaceaws untuk panggilan AWS SDK; remote untuk panggilan hilir lainnya.

  • http – objek http dengan informasi tentang panggilan HTTP keluar.

  • awsawsobjek dengan informasi tentang AWS sumber daya hilir yang disebut aplikasi Anda.

  • error, throttle, fault, dan cause – bidang kesalahan yang menunjukkan kesalahan terjadi dan yang mencakup informasi tentang pengecualian yang menyebabkan kesalahan.

  • annotations – Objek annotations dengan pasangan nilai kunci yang ingin Anda X-Ray untuk indeks pencarian.

  • metadata – Objek metadata dengan data tambahan yang ingin Anda simpan di segmen.

  • subsegmentssusunan objek subsegment.

  • precursor_idssusunan ID subsegmen yang mengidentifikasi subsegment dengan induk yang sama yang diselesaikan sebelum subsegmen ini.

Gunakan blok HTTP untuk mencatat detail permintaan HTTP bahwa aplikasi Anda sediakan (dalam segmen) atau yang aplikasi Anda buat untuk HTTP API hilir (dalam subsegmen). Sebagian besar bidang dalam peta objek ini untuk informasi yang ditemukan dalam permintaan HTTP dan respon.

http

Semua kolom lain bersifat opsional.

  • request – Informasi tentang permintaan.

    • method – Metode permintaan Misalnya, GET.

    • url – URL lengkap dari permintaan, disusun dari protokol, hostname, dan path dari permintaan.

    • user_agent – String agen pengguna dari klien peminta.

    • client_ip – Alamat IP peminta. Dapat diambil dari paket IP Source Address atau, untuk permintaan yang diteruskan, dari header X-Forwarded-For.

    • x_forwarded_for – (hanya segmen)boolean menunjukkan bahwa client_ip dibaca dari header X-Forwarded-For dan tidak dapat diandalkan karena mungkin telah ditempa.

    • traced – (hanya subsegmen)booleanmenunjukkan bahwa panggilan hilir adalah untuk layanan lain ditelusuri. Jika bidang ini diatur ke true, X-Ray menganggap penelusuran tersebut rusak hingga layanan hilir mengunggah segmen dengan parent_id yang cocok dengan id dari subsegmen yang berisi blok ini.

  • response – Informasi tentang respon.

    • statusbilangan bulat yang menunjukkan status HTTP dari respons.

    • content_lengthbilangan bulat yang menunjukkan panjang badan respons dalam byte.

Ketika Anda instrumen panggilan ke api web hilir, mencatat subsegmen dengan informasi tentang permintaan HTTP dan respon. X-Ray menggunakan subsegmen untuk menghasilkan segmen disimpulkan untuk API jarak jauh.

contoh Segmen untuk panggilan HTTP yang dilayani oleh aplikasi yang berjalan di Amazon EC2
{ "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 } }
contoh Subsegmen untuk panggilan HTTP hilir
{ "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 } } }
contoh Segmen yang disimpulkan untuk panggilan HTTP downstream
{ "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 }

Segmen dan subsegmen dapat mencakup objek annotations yang berisi satu atau lebih bidang yang X-Ray indeks untuk digunakan dengan ekspresi filter. Fields dapat memiliki string, angka, atau nilai Boolean (tidak ada objek atau array). Indeks X-Ray hingga 50 anotasi per penelusuran.

contoh Segmen untuk panggilan HTTP dengan anotasi
{ "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 } }

Kunci harus alfanumerik agar bisa bekerja dengan filter. Garis bawah diperbolehkan. Simbol dan spasi lainnya tidak diperbolehkan.

Segmen dan subsegmen dapat mencakup objek metadata yang berisi satu atau lebih bidang dengan nilai-nilai dari tipe apa pun, termasuk objek dan array. X-Ray tidak mengindeks metadata, dan nilai dapat berupa ukuran apa pun, selama dokumen segmen tidak melebihi ukuran maksimum (64 kB). Anda dapat melihat metadata dalam dokumen segmen penuh dikembalikan oleh API BatchGetTraces. Kunci bidang (debugdalam contoh berikut) yang dimulai dengan AWS. dicadangkan untuk digunakan oleh SDK dan klien yang AWS disediakan.

contoh Subsegmen kustom dengan metadata
{ "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" ] } } ] }

Untuk segmen, aws objek berisi informasi tentang sumber daya tempat aplikasi Anda berjalan. Beberapa bidang dapat berlaku untuk sumber daya tunggal. Misalnya, aplikasi yang berjalan di lingkungan Docker multicontainer pada Elastic Beanstalk bisa memiliki informasi tentang instans Amazon EC2, kontainer Amazon ECS berjalan pada instans, dan lingkungan Elastic Beanstalk itu sendiri.

aws (Segmen)

Semua bidang bersifat opsional.

  • account_id— Jika aplikasi Anda mengirim segmen ke yang berbeda Akun AWS, catat ID akun yang menjalankan aplikasi Anda.

  • cloudwatch_logs— Array objek yang menggambarkan grup CloudWatch log tunggal.

    • log_group— Nama Grup CloudWatch Log.

    • arn— Grup CloudWatch Log ARN.

  • ec2— Informasi tentang instans Amazon EC2.

    • instance_id – ID instans dari instans EC2.

    • instance_size— Jenis instans EC2.

    • ami_id— ID Gambar Mesin Amazon.

    • availability_zone - Availability Zone tempat instans berjalan.

  • ecs – Informasi tentang kontainer Amazon ECS.

    • container— Nama host wadah Anda.

    • container_id— ID kontainer lengkap wadah Anda.

    • container_arn— ARN dari instance kontainer Anda.

  • eks— Informasi tentang cluster Amazon EKS.

    • pod— Nama host pod EKS Anda.

    • cluster_name— Nama cluster EKS.

    • container_id— ID kontainer lengkap wadah Anda.

  • elastic_beanstalk – Informasi tentang lingkungan Elastic Beanstalk. Anda dapat menemukan informasi ini dalam sebuah file bernama /var/elasticbeanstalk/xray/environment.conf pada platform Elastic Beanstalk terbaru.

    • environment_name – Nama lingkungan.

    • version_label– Nama versi aplikasi yang saat ini digunakan untuk instans yang melayani permintaan.

    • deployment_idangkayang menunjukkan ID dari deployment berhasil terakhir ke instans yang melayani permintaan.

  • xray— Metadata tentang jenis dan versi instrumentasi yang digunakan.

    • auto_instrumentation— Boolean menunjukkan apakah instrumentasi otomatis digunakan (misalnya, Agen Java).

    • sdk_version— Versi SDK atau agen yang digunakan.

    • sdk— Jenis SDK.

contoh AWS blokir dengan plugin
"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" } }

Untuk subsegmen, catat informasi tentang Layanan AWS dan sumber daya yang diakses aplikasi Anda. X-Ray menggunakan informasi ini untuk membuat segmen yang disimpulkan yang mewakili layanan hilir di peta layanan Anda.

aws (Subsegmen)

Semua bidang bersifat opsional.

  • operation— Nama tindakan API yang dipanggil terhadap sumber daya Layanan AWS atau.

  • account_idJika aplikasi Anda mengakses sumber daya di akun yang berbeda, atau mengirim segmen ke akun lain, catat ID akun yang memiliki AWS sumber daya yang diakses aplikasi Anda.

  • region – Jika sumber daya berada di wilayah yang berbeda dari aplikasi Anda, catat wilayahnya. Misalnya, us-west-2.

  • request_id – Pengenal unik untuk permintaan.

  • queue_url – Untuk operasi pada antrean Amazon SQS, URL antrean ini.

  • table_name – Untuk operasi pada tabel DynamoDB, nama tabel.

contoh Subsegmen untuk panggilan ke DynamoDB untuk menyimpan item
{ "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", } }

Ketika terjadi kesalahan, Anda dapat mencatat detail tentang kesalahan dan pengecualian yang dihasilkan. Catatan kesalahan dalam segmen ketika aplikasi Anda kembali kesalahan ke pengguna, dan di subsegment ketika panggilan hilir kembali kesalahan.

Tipe kesalahan

Tetapkan satu atau beberapa bidang berikut ketrueuntuk menunjukkan bahwa kesalahan terjadi. Beberapa tipe dapat berlaku jika kesalahan berlipat ganda. Misalnya,429 Too Many Requestskesalahan dari panggilan hilir dapat menyebabkan aplikasi Anda kembali500 Internal Server Error, dalam hal ini ketiga tipe akan berlaku.

  • errorbooleanmenunjukkan bahwa kesalahan klien terjadi (kode status respons adalah 4XX klien Error).

  • throttlebooleanmenunjukkan bahwa permintaan telah dicekik (kode status respon429 Terlalu Banyak Permintaan).

  • faultbooleanmenunjukkan bahwa kesalahan server terjadi (kode status respons adalah 5XX Server Error).

Menunjukkan penyebab kesalahan dengan memasukkanPenyebabobjek dalam segmen atau subsegmen.

cause

Penyebab bisa berupa16 karakterpengecualian ID atau objek dengan bidang-bidang berikut:

  • working_directory– Jalur lengkap direktori kerja ketika pengecualian terjadi.

  • pathsSusunandari path ke pustaka atau modul yang digunakan ketika pengecualian terjadi.

  • exceptionsSusunandaripengecualianobjek.

Sertakan informasi rinci tentang kesalahan dalam satu atau lebihpengecualianobjek.

exception

Semua bidang bersifat opsional.

  • id – Pengenal 64-bit untuk segmen, unik di antara segmen dalam penelusuran yang sama, dalam 16 digit heksadesimal.

  • message– Pesan pengecualian.

  • type – Tipe pengecualian.

  • remotebooleanmenunjukkan bahwa pengecualian disebabkan oleh kesalahan yang dikembalikan oleh layanan hilir.

  • truncatedInteger menunjukkan jumlah frame tumpukan yang dihilangkan dari stack.

  • skippedIntegermenunjukkan jumlah pengecualian yang dilewati antara pengecualian ini dan anaknya, yaitu pengecualian yang ditimbulkannya.

  • cause– Exception ID dari induk pengecualian ini, yaitu, pengecualian yang menyebabkan pengecualian ini.

  • stackSusunan dari objek stackFrame.

Jika tersedia, catat informasi tentang tumpukan panggilan di objek stackFrame.

stackFrame

Semua kolom lain bersifat opsional.

  • path– Jalur relatif ke file.

  • line– Baris di file.

  • label– Fungsi atau nama metode.

Anda dapat membuat subsegmen untuk kueri bahwa aplikasi Anda membuat basis data SQL.

sql

Semua kolom lain bersifat opsional.

  • connection_string – Untuk SQL Server atau koneksi basis data lain yang tidak menggunakan string koneksi URL, mencatat string koneksi, tidak termasuk kata sandi.

  • url– Untuk koneksi database yang menggunakan string koneksi URL, catat URL, tidak termasuk password.

  • sanitized_query – Kueri basis data, dengan setiap pengguna diberikan nilai-nilai dihapus atau diganti dengan placeholder.

  • database_type– Nama mesin basis data.

  • database_version – nomor versi mesin basis data yang akan ditingkatkan.

  • driver_version– Nama dan nomor versi driver mesin basis data yang digunakan aplikasi Anda.

  • user– Nama pengguna basis data.

  • preparationcall jika kueri menggunakan PreparedCall; statement jika kueri menggunakan PreparedStatement.

contoh Subsegmen dengan Kueri SQL
{ "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=?;" } }