Amazon SQS dan 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.

Amazon SQS dan AWS X-Ray

AWS X-Ray terintegrasi dengan Amazon Simple Queue Service (Amazon Simple Queue Service) untuk melacak pesan yang diteruskan melalui antrian Amazon SQS. Jika layanan melacak permintaan dengan menggunakan SDK X-Ray, Amazon SQS dapat mengirim header pelacakan dan terus menyebarkan pelacakan asli dari pengirim ke konsumen dengan ID pelacakan konsisten. Kontinuitas pelacakan mengaktifkan pengguna untuk melacak, menganalisis, dan men-debug di seluruh layanan hilir.

AWS X-Ray mendukung penelusuran aplikasi berbasis peristiwa menggunakan Amazon SQS dan. AWS Lambda Gunakan CloudWatch konsol untuk melihat tampilan tersambung dari setiap permintaan saat diantrian dengan Amazon SQS dan diproses oleh fungsi Lambda hilir. Jejak dari produsen pesan hulu secara otomatis ditautkan ke jejak dari node konsumen Lambda hilir, menciptakan end-to-end tampilan aplikasi. Untuk informasi selengkapnya, lihat melacak aplikasi berbasis peristiwa.

Lacak peta dari Lambda melalui antrean Amazon SQS.

Amazon SQS mendukung instrumentasi header pelacakan berikut:

  • Header HTTP default - X-Ray SDK secara otomatis mengisi header jejak sebagai header HTTP saat Anda memanggil Amazon SQS melalui SDK. AWS Header pelacakan default dilakukan oleh X-Amzn-Trace-Id dan sesuai dengan semua pesan yang disertakan dalam permintaan SendMessage atau SendMessageBatch. Untuk mempelajari selengkapnya tentang Header HTTP default, lihat Header penelusuran.

  • Atribut Sistem AWSTraceHeaderAWSTraceHeader adalah atribut sistem pesan yang disimpan oleh Amazon SQS untuk membawa header pelacakan X-Ray dengan pesan dalam antrean. AWSTraceHeader tersedia untuk digunakan meskipun instrumentasi otomatis melalui SDK X-Ray tidak, misalnya saat membuat SDK pelacakan untuk bahasa baru. Ketika kedua instrumentasi header ditetapkan, atribut sistem pesan membatalkan header pelacakan HTTP.

Ketika berjalan di Amazon EC2, Amazon SQS mendukung pengolahan satu pesan pada satu waktu. Ini berlaku saat berjalan di host lokal, dan saat menggunakan layanan kontainer, seperti Amazon ECS AWS Fargate, atau. AWS App Mesh

Header pelacakan dikecualikan dari ukuran pesan Amazon SQS dan kuota atribut pesan. Mengaktifkan pelacakan X-Ray tidak akan melebihi kuota Amazon SQS Anda. Untuk mempelajari AWS kuota selengkapnya, lihat Kuota Amazon SQS.

Kirim header pelacakan HTTP

Komponen pengirim di Amazon SQS dapat mengirim header pelacakan secara otomatis melalui panggilan SendMessageBatch atau SendMessage. Ketika klien AWS SDK diinstrumentasi, mereka dapat dilacak secara otomatis melalui semua bahasa yang didukung melalui X-Ray SDK. Ditelusuri Layanan AWS dan sumber daya yang Anda akses dalam layanan tersebut (misalnya, bucket Amazon S3 atau antrean Amazon SQS), muncul sebagai node hilir pada peta jejak di konsol X-Ray.

Untuk mempelajari cara melacak panggilan AWS SDK dengan bahasa pilihan Anda, lihat topik berikut di SDK yang didukung:

Mengambil header pelacakan dan memulihkan konteks pelacakan

Jika Anda menggunakan konsumen hilir Lambda, propagasi konteks jejak dilakukan secara otomatis. Untuk melanjutkan propagasi konteks dengan konsumen Amazon SQS lainnya, Anda harus secara manual mengarahkan handoff ke komponen penerima.

Ada tiga langkah utama untuk memulihkan konteks pelacakan:

  • Terima pesan dari antrean untuk atribut AWSTraceHeader dengan memanggil API ReceiveMessage.

  • Mengambil header pelacakan dari atribut.

  • Memulihkan ID pelacakan dari header. Secara opsional, tambahkan lebih banyak metrik ke segmen.

Berikut ini adalah contoh implementasi yang ditulis dengan SDK for Java X-Ray.

contoh : Mengambil header pelacakan dan memulihkan konteks pelacakan
// Receive the message from the queue, specifying the "AWSTraceHeader" ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest() .withQueueUrl(QUEUE_URL) .withAttributeNames("AWSTraceHeader"); List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages(); if (!messages.isEmpty()) { Message message = messages.get(0); // Retrieve the trace header from the AWSTraceHeader message system attribute String traceHeaderStr = message.getAttributes().get("AWSTraceHeader"); if (traceHeaderStr != null) { TraceHeader traceHeader = TraceHeader.fromString(traceHeaderStr); // Recover the trace context from the trace header Segment segment = AWSXRay.getCurrentSegment(); segment.setTraceId(traceHeader.getRootTraceId()); segment.setParentId(traceHeader.getParentId()); segment.setSampled(traceHeader.getSampled().equals(TraceHeader.SampleDecision.SAMPLED)); } }