Pelacakan Terdistribusi di Istio



Sebuah catatan dari staf editorial kami tentang terjemahan: artikel yang disajikan menggambarkan produk tertutup dari perusahaan tertentu dan, sayangnya, tidak ada bukti bahwa itu pernah direncanakan untuk membukanya - dalam arti kata Stallman. Namun demikian, bagi kami tampaknya sangat penting dan berguna untuk mempertimbangkan bagaimana orang umumnya mendekati masalah debug Istio dan bagaimana mereka mengoptimalkan pekerjaan mereka di bidang ini. Mungkin seseorang dapat menggambar beberapa ide menarik untuk diri mereka sendiri.

Pada titik tertentu, ketika mengembangkan sistem produksi berdasarkan arsitektur layanan mikro, kami sampai pada kesimpulan bahwa pemantauan setiap elemen layanan kami tidak cukup untuk mengatasi masalah serius. Seiring waktu, ada kebutuhan untuk mendapatkan gambaran lengkap dari seluruh tumpukan panggilan di seluruh aplikasi secara bersamaan, dengan informasi terperinci tentang topologi permintaan, keterlambatan jaringan, dan durasi masing-masing perintah. Untuk mengatasi masalah ini, para insinyur biasanya menggunakan penelusuran terdistribusi.

Dalam posting ini, konsep penelusuran terdistribusi akan diperiksa melalui prisma arsitektur layanan mikro: bagaimana semuanya terintegrasi dan diotomatisasi melalui Istio , dan kemudian seluruh proses disederhanakan dan diproses melalui Backyards - produk layanan kami untuk Istio.

Entri


Sebelumnya, kami menulis tentang betapa rumitnya hanya menginstal dan mengkonfigurasi Istio, jadi untuk menyederhanakan situasi ini, kami memilih pengembangan open source dari Banzai Cloud Istio . Selain Istio, Anda dapat menggunakan sejumlah alat praktis dengan Helm ( Prometheus , Grafana , Jaeger , Kiali ), dalam hal apa pun, sebagian besar permintaan dukungan / integrasi datang hanya untuk mereka. Karena kami percaya bahwa setiap orang memilih alat sesuai dengan keinginan mereka , kami tidak secara kaku mengimplementasikan alat yang terdaftar di Istio, tetapi hanya menyediakan kemampuan untuk dengan mudah mengintegrasikan komponen-komponen ini.

Selain itu, kami ingin memberi pengguna kami alat lain yang kuat untuk mengelola komponen yang tercantum dalam kluster (yaitu, sesuatu selain Istio), jadi kami juga membuat Backyards . Dengan menggunakannya, Anda dapat dengan mudah menginstal Prometheus, Grafana dan Jaeger, dan, tidak seperti Kiali, Backyards bukan hanya antarmuka pemantauan berbasis web, tetapi alat multifungsi lengkap untuk mengelola jaringan layanan Anda. Ini kompatibel dengan satu atau beberapa cluster sekaligus dan mengandung CLI dan GraphQL API yang kuat.

Dalam posting ini, kita akan fokus pada tracing dan Jaeger yang didistribusikan.

Pengantar Penelusuran Terdistribusi


Dalam arsitektur microservices, ketika beberapa layanan saling memanggil satu sama lain, seringkali sulit untuk menemukan dan men-debug masalah. Sebenarnya, dalam pernyataan ini terletak alasan utama mengapa efisiensi permintaan layanan rendah: layanan mana yang menjadi hambatan, seberapa besar penundaan jaringan antara permintaan?

Berkat penelusuran terdistribusi, Anda dapat memvisualisasikan pohon panggilan lengkap, melihat layanan mana yang telah mengakses layanan mana, berapa lama setiap panggilan berlangsung dan berapa lama keterlambatan dalam menjawab. Ini adalah jejak yang didistribusikan yang membantu menentukan di mana kegagalan terjadi dan layanan mana yang keluar dari waktu respons.
Pelacakan terdistribusi adalah proses melacak permintaan individu di seluruh tumpukan panggilan dalam sistem.


Tanpa menggunakan tracing terdistribusi, sangat mudah untuk tersesat dalam banyak panggilan yang dipertukarkan antara layanan microser. Juga sulit untuk men-debug masalah tanpa itu, karena Anda harus hanya mengandalkan log. Tetapi berkat penelusuran terdistribusi, seluruh tumpukan panggilan dengan semua informasi yang diperlukan untuk mendiagnosis masalah tersedia bagi Anda.

Di bawah kap jejak yang didistribusikan


Span adalah unit terkecil dalam jejak terdistribusi. Dia memiliki label "mulai" dan "durasi". Span memiliki hubungan orangtua-anak satu sama lain dan bersama-sama membentuk Jejak.

Ada tiga tugas untuk mengumpulkan jejak dengan benar

1. Incoming request spans 2. Outgoing request spans 3. Context propagation 

  Rentang permintaan masuk: 
ketika permintaan tiba di layanan, itu harus diperiksa untuk jejak jejak. Jika tidak ada tajuk, maka perlu membuat rentang root (induk) untuk mulai melacak, jika demikian, buat rentang anak untuk melanjutkan pelacakan.

  Rentang permintaan keluar: 
ketika permintaan dikirim dari satu layanan ke layanan lain, rentang dibuat terlebih dahulu, sehingga pihak yang menerima permintaan terus melacak, seperti dijelaskan di atas.

  Perambatan konteks: 
Layanan biasanya menerima dan mengirim beberapa permintaan sekaligus. Tanpa membuat perubahan, tidak mungkin melacak koneksi antara permintaan masuk dan keluar. Di sinilah saat terbaik datang untuk menyampaikan konteksnya. Untuk HTTP, ini dapat dilakukan dengan meneruskan jejak jejak panggilan masuk ke panggilan keluar dari aplikasi, yang akan memungkinkan untuk membangun jejak penuh.

Selain tugas-tugas ini, jejak harus dikumpulkan, dikelompokkan, dan divisualisasikan dengan sempurna.

Semua ini mungkin terlihat cukup rumit untuk diimplementasikan pada semua layanan dalam sistem, tetapi ada alat yang memungkinkan Anda untuk menyelesaikan hampir semua tugas yang dijelaskan dalam mode otomatis. Akibatnya, pengembang dapat didistribusikan pelacakan, pada kenyataannya, di luar kotak.

Untuk informasi lebih lanjut tentang prinsip-prinsip dasar pelacakan terdistribusi, saya akan merekomendasikan membaca posting hebat ini dari Nike .

Pelacakan Terdistribusi di Istio


Di Istio, utusan Utusan melakukan pekerjaan kotor dari penelusuran terdistribusi . Istio memiliki injeksi sespan, berkat semua permintaan masuk dan keluar ke / dari layanan pertama kali melewati server proxy Utusan. Pada tahap ini jejak orang tua dan anak perempuan dihasilkan, yang merupakan dua dari tiga kondisi yang diperlukan untuk membuat jejak yang didistribusikan.

Kondisi ketiga - pemindahan konteks - harus dilakukan melalui perubahan dalam logika aplikasi. Di Istio Bookinfo, ini sudah diimplementasikan di tingkat setiap layanan Microsoft, sehingga jejak penuh dapat diperoleh segera setelah instalasi. Saat menggunakan pelacakan terdistribusi di layanan Anda sendiri, Anda perlu menerapkan propagasi konteks sendiri.

Bertentangan dengan beberapa kesalahpahaman umum, perlu dicatat bahwa dukungan penuh untuk penelusuran terdistribusi dengan propagasi konteks bahkan pada tingkat grid layanan biasa hanya dapat dibuat dengan mengubah logika aplikasi. Contoh yang baik diberikan dalam Peringatan 1 .

Situs web Istio memiliki dokumentasi tentang header mana yang akan digunakan. Semua kompatibel dengan format header Zipkin .
Harap dicatat bahwa selain penelusuran berbasis Utusan yang dijelaskan di atas, Istio juga memiliki penelusuran berbasis Mixer yang menggunakan komponen Mixer lebih aktif. Sangat mungkin bahwa dalam versi yang akan datang Mixer akan dihentikan, jadi saya tidak akan menjelaskan bekerja dengannya secara detail. Kita hanya bisa mengatakan bahwa mixer telemetri dapat dirasakan melalui operator.
Dengan Utusan dan mendistribusikan jejak header yang kita butuhkan, kita bisa mendapatkan jejak yang kita butuhkan. Untuk mengumpulkan dan memvisualisasikan informasi ini, Istio dilengkapi dengan alat-alat seperti Jaeger , Zipkin , Lightstep dan Datadog . Secara default, Jaeger digunakan, itu juga alat yang paling populer dari semua yang terdaftar.

Kami juga dapat menyesuaikan laju pengambilan sampel, yaitu, berapa persen dari semua permintaan yang akan disajikan dalam bentuk penelusuran. Nilai default adalah 1% dari total jumlah permintaan. Frekuensi dapat diubah di sini di bidang operator Istio ini.

Cara kerjanya di Istio


Mari kita meringkas bagaimana melakukan tracing terdistribusi dengan Jaeger (nanti kita membandingkannya dengan proses yang sama di Backyards):

  1. Bersama dengan Istio, Anda mendapatkan Jaeger dengan semua layanan dan penyebaran yang diperlukan.
  2. Alamat layanan jejak diatur secara default oleh konfigurasi proxy Utusan dan melalui mereka laporan Span dan kerja layanan sespan.
  3. Bookinfo dapat diinstal sebelum semua layanan mendistribusikan headernya ke jejak.
  4. Jejak akan tersedia setelah informasi yang cukup telah dikumpulkan.
  5. Panel kontrol Jaeger dapat diarahkan untuk membuka bagian pengguna melalui browser.

Jejak terdistribusi di Backyards


Di Backyards, menginstal, mengkonfigurasi Jaeger, menginstal aplikasi demo dengan header jejak yang didistribusikan secara otomatis dan mengirim banyak ke semua ini - semuanya dilakukan dengan satu perintah sederhana! Dan setelah menghubungkan layanan satu sama lain dengan trek, semua ini tersedia dari antarmuka pengguna.

Sekarang lihat!

Buat sebuah cluster
Sebagai permulaan, kita membutuhkan sebuah cluster di Kubernetes. Saya mengangkat kluster Kubernetes di GKE melalui versi gratis Pipeline untuk pengembang. Jika Anda ingin melakukan hal yang sama, buat cluster Anda melalui Pipeline di salah satu dari lima penyedia cloud yang kami dukung. Jika tidak, naikkan kluster Kubernet Anda di tempat lain.

Cara kerjanya di Backyards
Sebelumnya, kami menyimpulkan hasil antara bahwa Jaeger dapat digunakan bersama dengan Istio. Sekarang mari kita bandingkan bagaimana semuanya terjadi di Backyards.

Sekarang, cara termudah untuk menginstal Istio, Backyards, dan aplikasi demo pada cluster baru adalah dengan menggunakan antarmuka baris perintah Backyards .

Anda hanya perlu memasukkan satu perintah (pada cluster Anda seharusnya
  KUBECONFIG): 


 $backyards install –a –run-demo 

  1. Dengan menggunakan perintah ini, Jaeger diinstal secara otomatis (bukan dengan operator Istio open source kami dan komponen Backyards).
  2. Seperti yang disebutkan sebelumnya, Istio berada di luar kotak siap untuk berintegrasi dengan komponen lain seperti Prometheus, Grafana atau Jaeger. Ketika Jaeger diinstal, alamat layanannya diatur di jendela pengguna operator. Di masa depan, alamat ini ditulis di setiap tempat yang diperlukan untuk mengontrol komponen dan aliran data Istio.
  3. Aplikasi demo juga diinstal secara default. Ia menggunakan layanan golang yang sudah dikonfigurasi untuk mendistribusikan jejak header yang diperlukan.
  4. Pemuatan otomatis aplikasi demo dimulai (oleh karena itu bendera --run-demo ), sehingga Anda dapat segera mulai melacak trek.
  5. Jaeger terbuka melalui gateway input, terhubung dengan UI dan tersedia secara otomatis baik dalam bentuk skema dan sebagai daftar.

Secara harfiah sesederhana menulis tim untuk membuat kluster Kubernet baru, jadi cobalah jika Anda mau!

Inilah yang akan Anda lihat:

Jaeger ditautkan dengan skema:



Dan berikut ini daftarnya:



Jaeger UI untuk aplikasi demo:





Di UI, Anda dapat melihat seluruh tumpukan panggilan di sistem layanan-mikro Anda. Sekarang Anda dapat melacak dengan tepat kapan permintaan root diluncurkan dan berapa lama setiap permintaan. Atau, misalnya, Anda dapat melihat bahwa layanan analitik menghabiskan sebagian besar waktu untuk pertanyaan tertentu, karena sibuk dengan perhitungan aktual (misalnya, ia menghitung nilai Pi).

Membersihkan
Untuk menghapus aplikasi demo, Halaman Belakang dan Istio dari cluster Anda, Anda hanya perlu satu tim. Dia akan menghapus semua komponen dalam urutan yang benar:

 $ backyards uninstall -a 

Ringkasan


Pelacakan terdistribusi diperlukan terutama untuk sistem terdistribusi yang ada di mana kesulitan atau masalah perlu diperbaiki. Operator kami, Istio, semata-mata berfokus pada manajemen, di mana Backyards berisi lebih banyak komponen yang dapat digunakan dalam pekerjaan. Sebagai contoh, ini adalah Jaeger, yang di luar kotak menyediakan kemampuan untuk melakukan penelusuran terdistribusi.

Dalam hal ini, Jaeger diinstal menggunakan Backyards, dan yang terakhir menampilkan semua tautan dan jejak Jaeger di sistem langsung di antarmuka!

Semoga jejaknya bagus!

Source: https://habr.com/ru/post/id472318/


All Articles