Alibaba Cloud Service Mesh (ASM) menyediakan kemampuan pelacakan siap pakai untuk aplikasi di dalam service mesh. Namun, untuk mencapai pelacakan end-to-end yang mencakup aplikasi eksternal yang berkomunikasi dengan layanan dalam-mesh, Anda harus menggunakan Managed Service for OpenTelemetry guna menyatukan jejak panggilan. Panduan ini menjelaskan cara menggunakan Managed Service for OpenTelemetry untuk melacak permintaan dari aplikasi eksternal ke aplikasi di dalam instans ASM, sehingga menghasilkan satu jejak panggilan terpadu.
Prasyarat
-
Instans Service Mesh (ASM) telah dibuat dan kluster ACK telah ditambahkan ke instans tersebut. Untuk informasi selengkapnya, lihat Create an ASM instance dan Add a cluster to an ASM instance.
-
Gerbang masuk (ingress gateway) telah diterapkan di instans ASM untuk mengizinkan akses ke aplikasi dalam-mesh. Untuk informasi selengkapnya, lihat Create an ingress gateway.
-
Lingkungan dengan Python 2.7 terinstal tersedia untuk menjalankan aplikasi contoh luar-mesh.
-
Managed Service for OpenTelemetry telah diaktifkan. Untuk informasi selengkapnya, lihat Export tracing data from Service Mesh (ASM).
Catatan
-
Panduan ini menerapkan aplikasi Python bernama ExternalProxy yang menjalankan server HTTP. Mengakses path root ExternalProxy akan memanggil layanan
productpagedari aplikasi Bookinfo yang berjalan di dalam service mesh. -
Panduan ini menggunakan Managed Service for OpenTelemetry sebagai backend pelacakan. Jika Anda menggunakan sistem pelacakan mandiri yang kompatibel dengan Zipkin, buka titik akhir (endpoint) pelaporannya agar dapat diakses oleh aplikasi eksternal. Anda kemudian dapat melewatkan Langkah 2: Dapatkan endpoint untuk Managed Service for OpenTelemetry dan langsung melanjutkan ke Langkah 3: Terapkan aplikasi ExternalProxy luar-mesh, menggunakan endpoint sistem Anda sebagai alamat pelaporan.
Langkah 1: Terapkan aplikasi Bookinfo dalam-mesh
-
Jalankan perintah berikut untuk menerapkan aplikasi Bookinfo ke kluster dalam instans ASM Anda.
Anda dapat mengunduh file YAML untuk aplikasi Bookinfo dari GitHub.
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml -
Jalankan perintah berikut untuk menerapkan VirtualService untuk aplikasi Bookinfo.
Anda dapat mengunduh file YAML untuk VirtualService dari GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml -
Jalankan perintah berikut untuk menerapkan DestinationRule untuk aplikasi Bookinfo.
Anda dapat mengunduh file YAML untuk DestinationRule dari GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml -
Jalankan perintah berikut untuk menerapkan Gateway untuk aplikasi Bookinfo.
Anda dapat mengunduh file YAML untuk Gateway dari GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
Langkah 2: Dapatkan endpoint OpenTelemetry
-
Masuk ke konsol Managed Service for OpenTelemetry. Di panel navigasi sebelah kiri, klik Overview.
-
Pada halaman Overview, klik tab Access process, lalu klik View access point information.
-
Lihat endpoint tersebut.
-
Di bagian atas halaman, pilih wilayah target.
Anda harus memilih wilayah tempat kluster ACK untuk aplikasi Bookinfo diterapkan. Jika tidak, data pelacakan tidak dapat dikorelasikan.
-
Pada tab Access point information, aktifkan sakelar Show token. Pilih endpoint jaringan publik atau jaringan pribadi berdasarkan lokasi penerapan aplikasi ExternalProxy Anda.
Karena ExternalProxy melaporkan data menggunakan API Zipkin v1, Anda memerlukan endpoint v1. Klik tab Zipkin dan temukan endpoint yang sesuai dalam tabel. Biasanya, Anda sebaiknya menggunakan endpoint v2. Namun, untuk skenario tertentu seperti integrasi Istio atau Molten, diperlukan endpoint v1. Saat menggunakan komponen Sleuth, URL dasar tidak boleh mencakup
/api/v2/spans.
-
Langkah 3: Terapkan aplikasi ExternalProxy luar-mesh
-
Proxy sidecar meneruskan semua bagian permintaan masuk, termasuk Header HTTP dan badan permintaan, ke layanan hulu (upstream). Artinya, header yang terkait pelacakan juga diteruskan.
-
Untuk memastikan propagasi konteks jejak, aplikasi Anda harus meneruskan header pelacakan yang diperlukan dalam permintaan arah keluar (outbound), sesuai praktik standar komunitas.
-
Simpan kode berikut sebagai file bernama ExternalProxy.py di lingkungan runtime aplikasi eksternal Anda.
-
Ganti
{XTRACE_ZIPKIN_V1_ENDPOINT}dengan endpoint dari langkah sebelumnya. Jika Anda melaporkan ke sistem pelacakan mandiri, gunakan endpoint pelaporannya sebagai gantinya. -
Ganti
{INGRESS_GATE_WAY_IP}dengan alamat IP gerbang masuk kluster ACK Anda.
-
-
Jalankan perintah berikut untuk memulai aplikasi ExternalProxy.
python ExternalProxy.py* Serving Flask app "main" (pemuatan malas) * Environment: production WARNING: Ini adalah server pengembangan. Jangan gunakan dalam penerapan produksi. Gunakan server WSGI produksi sebagai gantinya. * Debug mode: on * Running on http://0.0.0.0:5000/ (Tekan CTRL+C untuk keluar) * Restarting with stat * Debugger is active! * Debugger PIN: 317-792-686 -
Jalankan perintah berikut untuk mengirim permintaan ke aplikasi ExternalProxy.
curl localhost:5000Output yang diharapkan:
OK
Langkah 4: Lihat informasi jejak
-
Masuk ke konsol Managed Service for OpenTelemetry.
-
Di panel navigasi sebelah kiri, klik Applications. Pilih wilayah di bagian atas halaman, lalu klik ExternalProxy dalam daftar aplikasi.
-
Di panel navigasi sebelah kiri, klik Application details. Klik tab Traces, lalu klik Trace ID untuk melihat detail jejak panggilan.
Jejak panggilan lengkap kini terbentuk antara aplikasi eksternal, ExternalProxy, dan aplikasi Bookinfo dalam-mesh. Bagian atas halaman detail jejak menampilkan informasi ringkasan, termasuk Start time, Duration, Services, Depth, dan Total spans. Di bawah ringkasan, tampilan pohon menunjukkan hubungan hierarkis setiap rentang. Kolom-kolomnya mencakup Span name, Timeline, Service name, Start time, IP address, dan Status. Dalam contoh ini, jejak panggilan dimulai dari
external-proxy, melewatiproductpage, lalu secara berurutan memanggil layanandetails,reviews, danratings. Beberapa rentang, seperti rentang pembatas lajuahas_rate_limit_cluster, mungkin muncul dengan status error.