Mengkonfigurasi X-Ray SDK untuk Ruby - AWS X-Ray

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

Mengkonfigurasi X-Ray SDK untuk Ruby

X-Ray SDK untuk Ruby memiliki kelas bernama XRay.recorder yang menyediakan perekam global. Anda dapat mengonfigurasi perekam global untuk menyesuaikan middleware yang membuat segmen untuk panggilan masukHTTP.

Plugin layanan

Gunakan plugins untuk mencatat informasi tentang layanan yang meng-hosting aplikasi Anda.

Plugin
  • Amazon EC2 — ec2 menambahkan ID instans dan Availability Zone.

  • Elastic Beanstalk – elastic_beanstalk menambahkan nama lingkungan, label versi, dan ID deployment.

  • Amazon ECS — ecs menambahkan ID penampung.

Segment - Scorekeep overview showing Elastic Beanstalk and EC2 deployment details.

Untuk menggunakan plugin, tentukan di objek konfigurasi yang Anda lewati ke pencatat.

contoh main.rb – Konfigurasi plugin
my_plugins = %I[ec2 elastic_beanstalk] config = { plugins: my_plugins, name: 'my app', } XRay.recorder.configure(config)

Anda juga dapat menggunakan variabel lingkungan, yang diutamakan daripada nilai-nilai yang ditetapkan dalam kode, untuk mengonfigurasi pencatat.

SDKJuga menggunakan pengaturan plugin untuk mengatur origin bidang pada segmen. Ini menunjukkan jenis AWS sumber daya yang menjalankan aplikasi Anda. Bila Anda menggunakan beberapa plugin, SDK menggunakan urutan resolusi berikut untuk menentukan asal: ElasticBeanstalk > > EKS ECS >EC2.

Aturan pengambilan sampel

SDKMenggunakan aturan pengambilan sampel yang Anda tentukan di konsol X-Ray untuk menentukan permintaan mana yang akan direkam. Aturan default menelusuri permintaan pertama setiap detik, dan lima persen permintaan tambahan di semua layanan yang mengirim pelacakan ke X-Ray. Buat aturan tambahan di konsol X-Ray untuk menyesuaikan jumlah data yang dicatat untuk setiap aplikasi Anda.

Aturan kustom SDK berlaku dalam urutan di mana mereka didefinisikan. Jika permintaan cocok dengan beberapa aturan kustom, hanya SDK berlaku aturan pertama.

catatan

Jika tidak SDK dapat mencapai X-Ray untuk mendapatkan aturan sampling, itu akan kembali ke aturan lokal default dari permintaan pertama setiap detik, dan lima persen dari permintaan tambahan per host. Hal ini dapat terjadi jika host tidak memiliki izin untuk memanggil samplingAPIs, atau tidak dapat terhubung ke daemon X-Ray, yang bertindak sebagai TCP proxy untuk API panggilan yang dilakukan oleh. SDK

Anda juga dapat mengonfigurasi aturan pengambilan sampel SDK untuk memuat dari JSON dokumen. SDKDapat menggunakan aturan lokal sebagai cadangan untuk kasus di mana pengambilan sampel X-Ray tidak tersedia, atau menggunakan aturan lokal secara eksklusif.

contoh sampling-rules.json
{ "version": 2, "rules": [ { "description": "Player moves.", "host": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ], "default": { "fixed_target": 1, "rate": 0.1 } }

Contoh ini menentukan satu aturan kustom dan aturan default. Aturan kustom menerapkan tingkat pengambilan sampel lima persen tanpa jumlah minimum permintaan untuk melacak jalur di /api/move/. Aturan default menelusuri permintaan pertama setiap detik dan 10 persen dari permintaan tambahan.

Kerugian dari menentukan aturan secara lokal adalah bahwa target tetap diterapkan oleh setiap instans pencatat secara independen, alih-alih dikelola oleh layanan X-Ray. Ketika Anda men-deploy lebih banyak host, laju tetap akan dikalikan, sehingga sulit untuk mengontrol jumlah data yang dicatat.

Untuk mengonfigurasi aturan cadangan, menentukan hash untuk dokumen di objek konfigurasi yang Anda berikan ke pencatat.

contoh main.rb - Konfigurasi aturan pencadangan
require 'aws-xray-sdk' my_sampling_rules = { version: 1, default: { fixed_target: 1, rate: 0.1 } } config = { sampling_rules: my_sampling_rules, name: 'my app', } XRay.recorder.configure(config)

Untuk menyimpan aturan sampling secara independen, menentukan hash dalam file terpisah dan memerlukan file untuk menariknya ke dalam aplikasi Anda.

contoh config/sampling-rules.rb
my_sampling_rules = { version: 1, default: { fixed_target: 1, rate: 0.1 } }
contoh main.rb - Aturan sampling dari file
require 'aws-xray-sdk' require 'config/sampling-rules.rb' config = { sampling_rules: my_sampling_rules, name: 'my app', } XRay.recorder.configure(config)

Untuk menggunakan hanya aturan lokal, memerlukan aturan pengambilan sampel dan mengonfigurasi LocalSampler.

contoh main.rb - Aturan pengambilan sampel lokal
require 'aws-xray-sdk' require 'aws-xray-sdk/sampling/local/sampler' config = { sampler: LocalSampler.new, name: 'my app', } XRay.recorder.configure(config)

Anda juga dapat mengonfigurasi pencatat global untuk menonaktifkan pengambilan sampel dan instrumen semua permintaan masuk.

contoh main.rb – Nonaktifkan pengambilan sampel
require 'aws-xray-sdk' config = { sampling: false, name: 'my app', } XRay.recorder.configure(config)

Pencatatan log

Secara default, pencatat output peristiwa tingkat info untuk $stdout. Anda dapat menyesuaikan log dengan mendefinisikan Pencatat di objek konfigurasi yang Anda lulus ke pencatat.

contoh main.rb – Logging
require 'aws-xray-sdk' config = { logger: my_logger, name: 'my app', } XRay.recorder.configure(config)

Gunakan log debug untuk mengidentifikasi masalah, seperti subsegmen yang tidak tertutup, saat Anda menghasilkan subsegmen secara manual.

Konfigurasi pencatat dalam kode

Pengaturan tambahan tersedia dari metode configure pada XRay.recorder.

  • context_missing – Mengatur ke LOG_ERROR untuk menghindari mengembalikan pengecualian ketika kode instrumentasi Anda mencoba mencatat data ketika tidak ada segmen yang terbuka.

  • daemon_address – Mengatur host dan port listener daemon X-Ray.

  • name— Tetapkan nama layanan yang SDK digunakan untuk segmen.

  • naming_pattern – Atur pola nama domain untuk menggunakan Penamaan dinamis.

  • plugins – Catat informasi tentang sumber daya AWS aplikasi dengan plugin.

  • sampling – Atur ke false untuk menonaktifkan pengambilan sampel.

  • sampling_rules – Atur hash yang berisi Aturan pengambilan sampel.

contoh main.rb - Menonaktifkan konteks pengecualian hilang
require 'aws-xray-sdk' config = { context_missing: 'LOG_ERROR' } XRay.recorder.configure(config)

Konfigurasi pencatat dengan rail

Jika Anda menggunakan kerangka kerja Rails, Anda dapat mengonfigurasi opsi pada pencatat global dalam file Ruby di bawah app_root/initializers. X-Ray SDK mendukung kunci konfigurasi tambahan untuk digunakan dengan Rails.

  • active_record – Atur ke true untuk mencatat subsegmen untuk transaksi basis data Catatan Aktif.

Mengonfigurasi pengaturan yang tersedia di objek konfigurasi bernama Rails.application.config.xray.

contoh config/initializers/aws_xray.rb
Rails.application.config.xray = { name: 'my app', patch: %I[net_http aws_sdk], active_record: true }

Variabel-variabel lingkungan

Anda dapat menggunakan variabel lingkungan untuk mengkonfigurasi X-Ray SDK untuk Ruby. SDKMendukung variabel berikut:

  • AWS_XRAY_TRACING_NAME— Tetapkan nama layanan yang SDK digunakan untuk segmen. Menimpa nama layanan yang Anda tetapkan pada strategi penamaan segmen filter servlet.

  • AWS_XRAY_DAEMON_ADDRESS – Mengatur host dan port listener daemon X-Ray. Secara default, SDK mengirimkan data jejak ke127.0.0.1:2000. Gunakan variabel ini jika Anda telah mengonfigurasi daemon untuk mendengarkan di port berbeda atau jika berjalan pada host yang berbeda.

  • AWS_XRAY_CONTEXT_MISSING— Setel RUNTIME_ERROR untuk melempar pengecualian saat kode instrumentasi Anda mencoba merekam data saat tidak ada segmen yang terbuka.

    Nilai Valid
    • RUNTIME_ERROR— Lempar pengecualian runtime.

    • LOG_ERROR— Log kesalahan dan lanjutkan (default).

    • IGNORE_ERROR— Abaikan kesalahan dan lanjutkan.

    Kesalahan yang berkaitan dengan segmen atau subsegmen yang hilang dapat terjadi ketika Anda mencoba untuk menggunakan klien yang diinstrumentasi dalam kode perusahaan rintisan yang berjalan ketika tidak ada permintaan terbuka, atau dalam kode yang memunculkan thread baru.

variabel lingkungan menimpa nilai yang ditetapkan dalam kode.