Menelusuri permintaan yang masuk dengan X-Ray SDK for Java - 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 X-Ray SDK for Java

Anda dapat menggunakan X-Ray SDK untuk menelusuri permintaan HTTP yang dilayani aplikasi Anda pada instans EC2 dalam Amazon EC2, AWS Elastic Beanstalk, atau Amazon ECS.

Gunakan Filter untuk menginstrumentasikan permintaan HTTP yang masuk. Ketika Anda menambahkan filter servlet X-Ray ke aplikasi Anda, X-Ray SDK for Java membuat segmen untuk setiap permintaan sampel. Segmen ini mencakup waktu, metode, dan disposisi permintaan HTTP. Instrumentasi tambahan membuat subsegmen pada segmen ini.

catatan

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

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 yang berisi bidang x_forwarded_for ditetapkan ke true, IP klien diambil dari header X-Forwarded-For dalam permintaan HTTP.

Penangan pesan membuat segmen untuk setiap permintaan masuk dengan blok http yang berisi informasi berikut:

  • Metode HTTP – DAPATKAN, POSTING, LETAKKAN, HAPUS, 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 filter penelusuran ke aplikasi Anda (Tomcat)

Untuk Tomcat, tambahkan <filter> ke file proyek web.xml. Gunakan parameter fixedName untuk menentukan nama layanan untuk diterapkan ke segmen yang dibuat untuk permintaan masuk.

contoh WEB-INF/web.xml - Tomcat
<filter> <filter-name>AWSXRayServletFilter</filter-name> <filter-class>com.amazonaws.xray.javax.servlet.AWSXRayServletFilter</filter-class> <init-param> <param-name>fixedName</param-name> <param-value>MyApp</param-value> </init-param> </filter> <filter-mapping> <filter-name>AWSXRayServletFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping>

Menambahkan filter penelusuran ke aplikasi Anda (spring)

Untuk Spring, tambahkan Filter ke kelas WebConfig Anda. Teruskan nama segmen ke konstruktor AWSXRayServletFilter sebagai string.

contoh src/main/java/myapp/WebConfig.java - spring
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter("Scorekeep"); } }

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 Anda memulai filter servlet, seperti yang ditampilkan dalam bagian sebelumnya. Ini memiliki efek yang sama seperti membuat tetap SegmentNamingStrategy dengan memanggil SegmentNamingStrategy.fixed() dan meneruskannya ke konstruktor AWSXRayServletFilter.

catatan

Anda dapat menimpa nama layanan default yang Anda tentukan dalam kode dengan variabel lingkunganAWS_XRAY_TRACING_NAME.

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 nama segmen dinamis di Tomcat, gunakan dynamicNamingRecognizedHosts dan dynamicNamingFallbackName untuk menentukan pola dan nama default, masing-masing.

contoh WEB-INF/web.xml - filter servlet dengan penamaan dinamis
<filter> <filter-name>AWSXRayServletFilter</filter-name> <filter-class>com.amazonaws.xray.javax.servlet.AWSXRayServletFilter</filter-class> <init-param> <param-name>dynamicNamingRecognizedHosts</param-name> <param-value>*.example.com</param-value> </init-param> <init-param> <param-name>dynamicNamingFallbackName</param-name> <param-value>MyApp</param-value> </init-param> </filter> <filter-mapping> <filter-name>AWSXRayServletFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping>

Untuk Spring, buat dinamik SegmentNamingStrategy dengan memanggil SegmentNamingStrategy.dynamic(), dan menyebarkannya ke konstruktor AWSXRayServletFilter.

contoh src/main/java/myapp/WebConfig.java - filter servlet dengan penamaan dinamis
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; import com.amazonaws.xray.strategy.SegmentNamingStrategy; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic("MyApp", "*.example.com")); } }