Menelusuri permintaan yang masuk dengan perangkat tengah SDK for Python 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.

Menelusuri permintaan yang masuk dengan perangkat tengah SDK for Python X-Ray

Ketika Anda menambahkan perangkat tengah ke aplikasi Anda dan mengonfigurasi nama segmen, SDK for Python X-Ray membuat segmen untuk setiap permintaan sampel. Segmen ini mencakup waktu, metode, dan disposisi permintaan HTTP. Instrumentasi tambahan membuat subsegmen pada segmen ini.

SDK for Python X-Ray mendukung perangkat tengah berikut ini untuk instrumen permintaan HTTP yang masuk:

  • Django

  • Flask

  • Botol

catatan

Untuk fungsi AWS Lambda, Lambda membuat segmen untuk setiap permintaan sampel. Lihat AWS Lambda dan AWS X-Ray untuk informasi selengkapnya.

Lihat Pekerja untuk contoh fungsi Python yang diinstrumentasikan di Lambda.

Untuk skrip atau aplikasi Python pada kerangka kerja lain, Anda dapat membuat segmen secara manual.

Setiap segmen memiliki nama yang mengidentifikasi aplikasi Anda dalam peta layanan. Segmen dapat diberi nama secara statis, atau Anda dapat mengonfigurasi SDK untuk nama itu secara dinamis berdasarkan header host dalam permintaan masuk. Penamaan dinamis memungkinkan Anda mengelompokkan pelacakan berdasarkan nama domain dalam permintaan, dan menerapkan nama default jika nama tersebut tidak cocok dengan pola yang diharapkan (misalnya, jika header host ditiru).

Permintaan yang Diteruskan

Jika penyeimbang beban atau perantara lainnya meneruskan permintaan ke aplikasi Anda, X-Ray akan mengambil IP klien dari header X-Forwarded-For dalam permintaan bukan dari sumber IP dalam paket IP. IP klien yang dicatat untuk permintaan yang diteruskan dapat ditiru, sehingga tidak dapat dipercaya.

Ketika permintaan diteruskan, SDK menetapkan bidang tambahan di segmen untuk menunjukkan ini. Jika segmen berisi bidang x_forwarded_for atur ketrue, IP klien diambil dari header X-Forwarded-For dalam permintaan HTTP.

Perangkat tengah membuat segmen untuk setiap permintaan masuk dengan blok http yang berisi informasi berikut:

  • Metode HTTP – GET, POST, PUT, DELETE, dll

  • Alamat klien – Alamat IP klien yang mengirim permintaan.

  • Kode respons – Kode respons HTTP untuk permintaan yang selesai.

  • Timing – Waktu mulai (saat permintaan diterima) dan waktu akhir (saat respons dikirim).

  • Agen penggunauser-agent dari permintaan.

  • Panjang kontencontent-length dari respons.

Menambahkan perangkat tengah ke aplikasi Anda (Django)

Tambahkan perangkat tengah ke daftar MIDDLEWARE di file settings.py Anda. Perangkat tengah X-Ray harus menjadi baris pertama dalam file settings.py untuk memastikan bahwa permintaan yang gagal di perangkat tengah lain dicatat.

contoh settings.py - perangkat tengah SDK for Python X-Ray
MIDDLEWARE = [ 'aws_xray_sdk.ext.django.middleware.XRayMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware' ]

Tambahkan aplikasi Django SDK X-Ray ke daftar INSTALLED_APPS di file settings.py. Tindakan ini akan mengizinkan pencatat X-Ray dikonfigurasi selama memulai aplikasi Anda.

contoh settings.py - aplikasi Django SDK for Python X-Ray
INSTALLED_APPS = [ 'aws_xray_sdk.ext.django', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]

Mengonfigurasi nama segmen di file settings.py.

contoh settings.py - Nama segmen
XRAY_RECORDER = { 'AWS_XRAY_TRACING_NAME': 'My application', 'PLUGINS': ('EC2Plugin',), }

Ini memberitahu pencatat X-Ray untuk melacak permintaan yang dilayani oleh aplikasi Django Anda dengan tingkat pengambilan sampel default. Anda dapat mengonfigurasi pencatat file pengaturan Django Anda untuk menerapkan aturan pengambilan sampel kustom atau mengubah pengaturan lainnya.

catatan

Karena plugins diteruskan sebagai tuple, pastikan untuk menyertakan , saat menentukan plugin tunggal. Misalnya, plugins = ('EC2Plugin',)

Menambahkan perangkat tengah ke aplikasi Anda (flask)

Untuk instrumen aplikasi Flask Anda, pertama mengonfigurasi nama segmen pada xray_recorder. Kemudian, gunakan fungsi XRayMiddleware untuk mem-patch aplikasi Flask Anda dalam kode.

contoh app.py
from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.ext.flask.middleware import XRayMiddleware app = Flask(__name__) xray_recorder.configure(service='My application') XRayMiddleware(app, xray_recorder)

Ini memberitahu pencatat X-Ray untuk melacak permintaan yang disediakan oleh aplikasi Flask Anda dengan tingkat pengambilan sampel default. Anda dapat mengonfigurasi pencatat dalam kode untuk menerapkan aturan pengambilan sampel kustom atau mengubah pengaturan lainnya.

Menambahkan perangkat tengah ke aplikasi Anda (Bottle)

Untuk instrumen aplikasi Bottle Anda, pertama-tama konfigurasikan nama segmen pada xray_recorder. Kemudian, gunakan fungsi XRayMiddleware untuk melakukan patch aplikasi Bottle Anda dalam kode.

contoh app.py
from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.ext.bottle.middleware import XRayMiddleware app = Bottle() xray_recorder.configure(service='fallback_name', dynamic_naming='My application') app.install(XRayMiddleware(xray_recorder))

Ini memberitahu pencatat X-Ray untuk melacak permintaan yang disediakan oleh aplikasi Bottle Anda dengan tingkat pengambilan sampel default. Anda dapat mengonfigurasi pencatat dalam kode untuk menerapkan aturan pengambilan sampel kustom atau mengubah pengaturan lainnya.

Menginstrumentasikan kode Python secara manual

Jika Anda tidak menggunakan Django atau Flask, Anda dapat membuat segmen secara manual. Anda dapat membuat segmen untuk setiap permintaan masuk, atau membuat segmen di sekitar HTTP yang ditambal atau klien AWS SDK untuk menyediakan konteks bagi pencatat untuk menambahkan subsegmen.

contoh main.py - instrumentasi manual
from aws_xray_sdk.core import xray_recorder # Start a segment segment = xray_recorder.begin_segment('segment_name') # Start a subsegment subsegment = xray_recorder.begin_subsegment('subsegment_name') # Add metadata and annotations segment.put_metadata('key', dict, 'namespace') subsegment.put_annotation('key', 'value') # Close the subsegment and segment xray_recorder.end_subsegment() xray_recorder.end_segment()

Mengonfigurasi strategi penamaan segmen

AWS X-Ray menggunakan nama layanan untuk mengidentifikasi aplikasi Anda dan membedakannya dari aplikasi lain, database, API eksternal, dan sumber daya AWS yang menggunakan aplikasi Anda. Saat SDK X-Ray membuat segmen untuk permintaan masuk, SDK akan mencatat nama layanan aplikasi Anda di kolom nama.

SDK X-Ray dapat memberi nama segmen setelah nama host di header permintaan HTTP. Namun, header ini dapat ditiru, yang dapat mengakibatkan simpul tak terduga di peta layanan Anda. Untuk mencegah SDK dari penamaan segmen salah karena permintaan dengan header host palsu, Anda harus menentukan nama default untuk permintaan masuk.

Jika aplikasi Anda menyuguhkan permintaan untuk beberapa domain, Anda dapat mengonfigurasi SDK untuk menggunakan strategi penamaan dinamis untuk mencerminkan ini dalam nama segmen. Strategi penamaan dinamis mengizinkan SDK menggunakan nama host untuk permintaan yang sesuai dengan pola yang diharapkan, dan menerapkan nama default untuk permintaan yang tidak sesuai.

Misalnya, Anda boleh memiliki satu aplikasi yang melayani permintaan untuk tiga subdomain– www.example.com, api.example.com, dan static.example.com. Anda dapat menggunakan strategi penamaan dinamis dengan pola *.example.com untuk mengidentifikasi segmen untuk setiap subdomain dengan nama yang berbeda, mengakibatkan tiga simpul layanan pada peta layanan. Jika aplikasi Anda menerima permintaan dengan nama host yang tidak cocok dengan pola, Anda akan melihat simpul keempat pada peta layanan dengan nama fallback yang Anda tentukan.

Untuk menggunakan nama yang sama untuk semua segmen permintaan, tentukan nama aplikasi Anda ketika mengonfigurasi pencatat, seperti yang ditunjukkan di bagian sebelumnya.

Strategi penamaan dinamis menentukan pola yang harus sesuai dengan nama host, dan nama default untuk digunakan jika nama host dalam permintaan HTTP tidak cocok dengan pola. Untuk menamai segmen secara dinamis di Django, tambahkan pengaturan DYNAMIC_NAMING ke file settings.py.

contoh settings.py - Penamaan dinamis
XRAY_RECORDER = { 'AUTO_INSTRUMENT': True, 'AWS_XRAY_TRACING_NAME': 'My application', 'DYNAMIC_NAMING': '*.example.com', 'PLUGINS': ('ElasticBeanstalkPlugin', 'EC2Plugin') }

Anda dapat menggunakan '*' dalam pola untuk mencocokkan string apa pun, atau '?' untuk mencocokkan setiap karakter tunggal. Untuk Flask, konfigurasi pencatat dalam simpul.

contoh main.py - Nama segmen
from aws_xray_sdk.core import xray_recorder xray_recorder.configure(service='My application') xray_recorder.configure(dynamic_naming='*.example.com')
catatan

Anda dapat mengganti nama layanan default yang Anda tentukan dalam kode dengan variabel lingkungan AWS_XRAY_TRACING_NAME.