Berbagi teknologi

Detektif--pelacakan tautan

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1 Pengantar penelusuran tautan

  Dalam konstruksi layanan mikro pada sistem besar, sistem dipecah menjadi banyak modul. Modul-modul ini bertanggung jawab atas berbagai fungsi dan digabungkan menjadi sebuah sistem yang pada akhirnya dapat menyediakan fungsionalitas yang kaya. Dalam arsitektur ini, permintaan sering kali melibatkan banyak layanan. Aplikasi Internet dibangun pada kumpulan modul perangkat lunak yang berbeda. Modul perangkat lunak ini dapat dikembangkan oleh tim yang berbeda, dapat diimplementasikan menggunakan bahasa pemrograman yang berbeda, dan dapat didistribusikan pada ribuan server di beberapa pusat data yang berbeda, yang berarti akan ada juga yang berbeda. beberapa masalah dengan bentuk arsitektur ini:

  • Bagaimana cara menemukan masalah dengan cepat?
  • Bagaimana cara menentukan cakupan dampak kesalahan?
  • Bagaimana cara memilah ketergantungan layanan dan rasionalitas ketergantungan?
  • Bagaimana cara menganalisis masalah kinerja link dan perencanaan kapasitas real-time?

Pelacakan tautan terdistribusi (Pelacakan Terdistribusi) adalah untuk memulihkan permintaan terdistribusi ke tautan panggilan, melakukan pencatatan, pemantauan kinerja, dan secara terpusat menampilkan status panggilan dari permintaan terdistribusi. Misalnya, waktu yang dihabiskan pada setiap node layanan, mesin mana yang dijangkau permintaan, status permintaan setiap node layanan, dll.

Teknologi penelusuran tautan yang umum mencakup hal-hal berikut:
  • kucing Bersumber terbuka oleh Dianping dan berdasarkanJawa Platform pemantauan aplikasi real-time yang dikembangkan meliputi pemantauan aplikasi real-time dan pemantauan bisnis. terintegrasi Solusinya adalah dengan menerapkan pemantauan melalui penguburan kode, seperti interseptor, filter, dll. Sangat mengganggu kode, integrasi biaya lebih tinggi. Risikonya lebih besar.
  • ritsleting Bergantung padaTwitterSistem pelacakan terdistribusi sumber terbuka dan sumber terbuka milik perusahaan digunakan untuk mengumpulkan data waktu layanan untuk memecahkan masalah mikro. Masalah latensi dalam arsitektur layanan meliputi: pengumpulan data, penyimpanan, pencarian, dan presentasi.Produk ini menggabungkandetektif awan musim semiIni relatif mudah digunakan dan mudah diintegrasikan, namun fungsinya relatif sederhana.
  • tepat Tepat Ini adalah analisis rantai panggilan sumber terbuka Korea dan alat analisis pemantauan aplikasi berdasarkan injeksi bytecode.FiturIni mendukung berbagai plug-in.Antarmuka PenggunaFungsi yang kuat, tidak ada intrusi kode di ujung akses.
  • berjalan di atas langit
    Berjalan di Atas Langit Ini adalah analisis rantai panggilan sumber terbuka lokal dan alat analisis pemantauan aplikasi berdasarkan injeksi bytecode.Ciri khasnya adalah mendukung banyak orangjenis plugin,Antarmuka Pengguna Fungsinya kuat dan tidak ada intrusi kode di ujung akses.Sudah bergabungBahasa Inggris Apacheinkubator.
  • Detektif
    Awan Musim Semi Memberikan solusi pelacakan tautan dalam sistem terdistribusi. 
Melihat: SpringCloud Alibaba Tumpukan teknologi tidak menyediakan teknologi pelacakan tautannya sendiri, yang dapat kita gunakan Detektif +
Zinkin Untuk membuat solusi pelacakan tautan

2 Detektifmulai

2.1 Detektifmemperkenalkan

Fungsi utama SpringCloud Sleuth adalah menyediakan solusi pelacakan dalam sistem terdistribusi.ia meminjam banyak darinya Google
Rapi Mari kita pahami dulu desainnya Detektif istilah dan konsep terkait dalam .
  • Jejak
    oleh suatu kelompokID JejakidentikMenjangkau Digabung menjadi struktur pohon.Untuk menerapkan pelacakan permintaan, ketika permintaan tiba di sistem terdistribusititik akhir entri, kerangka pelacakan layanan hanya perlu membuat pengidentifikasi unik untuk permintaan tersebut (mis.ID Jejak), sedangkan dalam sistem terdistribusi Saat beredar di dalam sistem, kerangka kerja selalu meneruskan nilai unik ini hingga seluruh permintaan dikembalikan.Maka kita hanya bisa menggunakan iniSatu pengidentifikasi menghubungkan semua permintaan bersama untuk membentuk tautan permintaan yang lengkap.
  • Menjangkau Merupakan kumpulan dasar unit kerja.Untuk menghitung penundaan setiap unit pemrosesan, ketika permintaan mencapai setiap komponen layananwaktu, juga melalui pengidentifikasi unik (Bahasa Spanyol ) untuk menandai awal, proses spesifik, dan akhir.lulusBahasa Spanyolawal dan akhirStempel waktu akhir, Anda dapat menghitungnyamenjangkau Selain waktu pemanggilan, kita juga bisa mengetahui nama acaranya.Minta informasi, dll.metadata.
  • Anotasi
    Gunakan untuk merekam peristiwa selama periode waktu tertentu. Catatan penting untuk penggunaan internal:
    Bahasa InggrisKlien Kirim) Klien mengeluarkan permintaan dan memulai kehidupan permintaan
    srServer Diterima) Server menerima permintaan dan mulai memprosesnya, srcs = Latensi jaringan (waktu untuk panggilan layanan)
    bahasa inggrisServer Kirim) Server telah selesai diproses dan siap dikirim ke klien,ss - sr = Minta waktu pemrosesan di server
    bahasa inggrisKlien Diterima) Klien menerima respons dari server dan permintaan berakhir. cr - sr =total waktu yang diminta

2.2 Detektifmulai

Nama layanan mikro , jejakId, spanid, Apakah akan menampilkan hasil pelacakan tautan ke platform pihak ketiga
[gerbang-api,3977125f73391553,3977125f73391553,salah]
[pesanan-layanan,3977125f73391553,57547b5bf71f8242,salah]
[layanan-produk,3977125f73391553,449f5b3f3ef8d5c5,salah]
Selanjutnya, integrasikan melalui kasus proyek sebelumnya Detektif , selesaikan penulisan kasus pengantar.
Ubah pengenalan proyek induk Detektif mengandalkan
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
Setelah memulai layanan mikro dan memanggil antarmuka, kita dapat mengamati di konsol detektif Keluaran log dari
dimana c61d4a753370cbeb berada ID Jejak , 0e06445e055ed94f adalah SpanId, ada TraceId global yang dipanggil secara berurutan untuk merangkai tautan panggilan. Dengan menganalisis log setiap layanan mikro secara cermat, tidak sulit untuk melihat proses spesifik permintaan tersebut.

Melihat file log bukanlah metode yang baik. Ketika layanan mikro semakin banyak, file log akan semakin banyak. Zipkin dapat mengumpulkan log dan melakukan tampilan visual dan pengambilan teks lengkap.

3 ritsletingIntegrasi

3.1 ZipKinmemperkenalkan

Zipkin adalah Twitter Sebuah proyek sumber terbuka berdasarkan Diimplementasikan oleh Google Dapper, ini didedikasikan untuk mengumpulkan data waktu layanan untuk memecahkan masalah latensi dalam arsitektur layanan mikro, termasuk data Kumpulkan, simpan, cari, dan tampilkan

Kami dapat menggunakannya untuk mengumpulkan data pelacakan tautan permintaan di setiap server, dan menggunakan antarmuka REST API yang disediakannya untuk membantu kami menanyakan data pelacakan guna menerapkan program pemantauan sistem terdistribusi, sehingga dapat segera menemukan peningkatan penundaan dalam masalah tingkat tinggi dan mengidentifikasi sumber hambatan kinerja sistem.
Selain API yang berorientasi pada pengembangan Selain antarmuka, juga menyediakan kenyamanan Komponen UI membantu kami mencari informasi pelacakan secara intuitif dan menganalisis detail tautan permintaan. Misalnya, kami dapat menanyakan waktu pemrosesan setiap permintaan pengguna dalam jangka waktu tertentu.
Zipkin menyediakan penyimpanan data yang dapat dicolokkan: Dalam kenangan Bahasa Inggris MySql Kasandra sebaik Pencarian Elastis

Gambar di atas menunjukkan ritsleting infrastruktur, yang sebagian besar terdiri dari 4 Terdiri dari komponen inti:
  • Pengumpul: Komponen kolektor, yang terutama digunakan untuk memproses informasi pelacakan yang dikirim dari sistem eksternal dan mengubah informasi ini menjadi ritsletingdiproses secara internal Menjangkauformat untuk mendukung penyimpanan selanjutnya, analisis, tampilan, dan fungsi lainnya.
  • Penyimpanan: Komponen penyimpanan, yang terutama memproses informasi pelacakan yang diterima oleh kolektor. Secara default, informasi ini akan disimpan dalam memori.Kami juga dapat memodifikasi strategi penyimpanan ini untuk menyimpan informasi pelacakan dalam database dengan menggunakan komponen penyimpanan lainnya.
  • API RESTfulAPI Komponen, yang terutama digunakan untuk menyediakan antarmuka akses eksternal.Misalnya, menampilkan informasi pelacakan ke klien, atau eksternalAkses sistem untuk pemantauan, dll.
  • Antarmuka Pengguna WebAntarmuka Pengguna komponen, berdasarkanAPI Aplikasi lapisan atas diimplementasikan oleh komponen.lulusAntarmuka PenggunaPengguna komponen dapat melakukan kueri dan analisis dengan mudah dan intuitifAnalisis informasi pelacakan.
Zipkin terbagi menjadi dua ujung, satu adalah ritsleting Di sisi server, ada satu Klien Zipkin, klien adalah penerapan layanan mikro. Klien akan mengkonfigurasi server Alamat URL-nya Alamat tersebut akan dikonfigurasi di layanan mikro setelah panggilan antar layanan terjadi. Pendengar Sleuth mendengarkan dan menghasilkan yang sesuai Jejak Dan Menjangkau Informasi dikirim ke server.

3.2 ZipKinInstalasi server

TIDAK. 1 melangkah : unduh Bahasa Indonesia: Bahasa Indonesia: ZipKin dari stoples Tas
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

 Kunjungi URL di atas untuk mendapatkanstoplesTas, ini diaBahasa Indonesia: Bahasa Indonesia: ZipKinsisi serverstoplesTas

TIDAK. 2 melangkah : Melalui baris perintah, masukkan perintah berikut untuk memulai Server ZipKin
java -jar zipkin-server-2.12.9-exec.jar

TIDAK. 3 Langkah: Akses melalui browser http://host lokal:9411 mengakses

3.3 ZipkinIntegrasi klien

Klien ZipKin dan Detektif Integrasinya sangat sederhana, cukup tambahkan dependensi dan konfigurasinya di layanan mikro.

TIDAK. 1 Langkah: Tambahkan dependensi pada setiap layanan mikro
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
TIDAK. 2 Langkah: Tambahkan konfigurasi
  1. # sleuth 和 zipkin 相关配置
  2. spring:
  3. zipkin:
  4. base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
  5. discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
  6. sleuth:
  7. sampler:
  8. probability: 1.0 #采样的百分比
TIDAK. 3 melangkah : Akses antarmuka layanan mikro
http://localhost:7000/pesanan-serv/pesanan/prod/1

TIDAK. 4 melangkah : mengakses ritsleting dari Antarmuka Pengguna antarmuka, efek observasi

TIDAK. 5 Langkah: Klik salah satu catatan untuk mengamati detail rute kunjungan.

4 ZipKinPersistensi data

Zipkin Server akan menyimpan informasi data pelacakan ke memori secara default, namun metode ini tidak cocok untuk lingkungan produksi. Zipkin mendukung data pelacakan yang ada mysql basis data atau Pencarian elastis tengah.

4.1 menggunakanmysqlMenerapkan persistensi data

TIDAK. 1 melangkah : membuat mysql lingkungan data
  1. CREATE TABLE
  2. IF
  3. NOT EXISTS zipkin_spans (
  4. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
  5. means the trace uses 128 bit traceIds instead of 64 bit',
  6. `trace_id` BIGINT NOT NULL,
  7. `id` BIGINT NOT NULL,
  8. `name` VARCHAR ( 255 ) NOT NULL,
  9. `parent_id` BIGINT,
  10. `debug` BIT ( 1 ),
  11. `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
  12. query and to implement TTL',
  13. `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
  14. and maxDuration query'
  15. ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  16. SET = utf8 COLLATE utf8_general_ci;
  17. ALTER TABLE zipkin_spans ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'ignore insert on duplicate';
  18. ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'for joining with zipkin_annotations';
  19. ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for
  20. getTracesByIds';
  21. ALTER TABLE zipkin_spans ADD INDEX ( `name` ) COMMENT 'for getTraces and
  22. getSpanNames';
  23. ALTER TABLE zipkin_spans ADD INDEX ( `start_ts` ) COMMENT 'for getTraces
  24. ordering and range';
  25. CREATE TABLE
  26. IF
  27. NOT EXISTS zipkin_annotations (
  28. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
  29. means the trace uses 128 bit traceIds instead of 64 bit',
  30. `trace_id` BIGINT NOT NULL COMMENT 'coincides with
  31. zipkin_spans.trace_id',
  32. `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
  33. `a_key` VARCHAR ( 255 ) NOT NULL COMMENT 'BinaryAnnotation.key or
  34. Annotation.value if type == -1',
  35. `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
  36. than 64KB',
  37. `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
  38. Annotation',
  39. `a_timestamp` BIGINT COMMENT 'Used to implement TTL;
  40. Annotation.timestamp or zipkin_spans.timestamp',
  41. `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
  42. null',
  43. `endpoint_ipv6` BINARY ( 16 ) COMMENT 'Null when Binary/Annotation.endpoint
  44. is null, or no IPv6 address',
  45. `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
  46. is null',
  47. `endpoint_service_name` VARCHAR ( 255 ) COMMENT 'Null when
  48. Binary/Annotation.endpoint is null'
  49. ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  50. SET = utf8 COLLATE utf8_general_ci;
  51. ALTER TABLE zipkin_annotations ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp` ) COMMENT 'Ignore insert on duplicate';
  52. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id`, `span_id` ) COMMENT 'for joining with zipkin_spans';
  53. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for getTraces/ByIds';
  54. ALTER TABLE zipkin_annotations ADD INDEX ( `endpoint_service_name` ) COMMENT 'for getTraces and getServiceNames';
  55. ALTER TABLE zipkin_annotations ADD INDEX ( `a_type` ) COMMENT 'for getTraces';
  56. ALTER TABLE zipkin_annotations ADD INDEX ( `a_key` ) COMMENT 'for getTraces';
  57. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id`, `span_id`, `a_key` ) COMMENT 'for dependencies job';
  58. CREATE TABLE
  59. IF
  60. NOT EXISTS zipkin_dependencies ( `day` DATE NOT NULL, `parent` VARCHAR ( 255 ) NOT NULL, `child` VARCHAR ( 255 ) NOT NULL, `call_count` BIGINT ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  61. SET = utf8 COLLATE utf8_general_ci;
  62. ALTER TABLE zipkin_dependencies ADD UNIQUE KEY ( `day`, `parent`, `child` );
TIDAK. 2 melangkah : saat permulaan Server ZipKin Kapan , Tentukan data yang akan disimpan mysql Informasi
  1. java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --
  2. MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root -
  3. -MYSQL_PASS=root

4.2 menggunakanPencarian elastisMenerapkan persistensi data

TIDAK. 1 melangkah : unduh Pencarian elastis
tautan unduhan: https://www.elastic.co/cn/unduh/rilis-terdahulu/elasticsearch-6-8-4

 

TIDAK. 2 melangkah : rintisan Pencarian elastis

 

Kunjungi: localhost:9200

Jika Anda memerlukan visualisasi, Anda dapat menginstal Kibana

TIDAK. 3 melangkah : saat permulaan Server ZipKin Saat menentukan data yang akan disimpan Pencarian elastis Informasi
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200

Adapun penggunaan visual dari elasticsearch, Anda dapat merujuk ke:Instalasi dan penggunaan Elasticsearch di bawah windows, dan instalasi blog kibana_windowskibanna-CSDN