Teknologian jakaminen

Sleuth - linkin seuranta

2024-07-12

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

1 Linkkien jäljittämisen esittely

  Suurten järjestelmien mikropalvelurakenteessa järjestelmä on jaettu useisiin moduuleihin. Nämä moduulit vastaavat erilaisista toiminnoista, ja ne yhdistetään järjestelmäksi, joka voi lopulta tarjota runsaasti toimintoja. Tässä arkkitehtuurissa pyyntö sisältää usein useita palveluita. Internet-sovellukset on rakennettu erilaisille ohjelmistomoduuleille. Näitä ohjelmistomoduuleja voivat kehittää eri työryhmät, ne voidaan toteuttaa eri ohjelmointikielillä ja ne voidaan jakaa tuhansille palvelimille useiden eri tietokeskusten kesken, mikä tarkoittaa, että niitä on myös olemassa. joitain ongelmia tässä arkkitehtonisessa muodossa:

  • Kuinka löytää ongelmat nopeasti?
  • Miten vian vaikutuksen laajuus määritetään?
  • Kuinka selvittää palveluriippuvuudet ja riippuvuuksien rationaalisuus?
  • Kuinka analysoida linkin suorituskykyongelmia ja reaaliaikaista kapasiteetin suunnittelua?

Hajautetun linkin jäljitys (Distributed Tracing) on ​​palauttaa hajautettu pyyntö kutsuvaan linkkiin, suorittaa lokikirjausta, suorituskyvyn seurantaa ja näyttää keskitetysti hajautetun pyynnön kutsun tila. Esimerkiksi kussakin palvelusolmussa käytetty aika, minkä koneen pyyntö saavuttaa, kunkin palvelusolmun pyynnön tila jne.

Yleisiä linkkien jäljitystekniikoita ovat seuraavat:
  • kissa Avoimen lähdekoodin Dianping ja perustuuJava Kehitetty reaaliaikainen sovellustenvalvontaalusta sisältää reaaliaikaisen sovellusten seurannan ja liiketoiminnan seurannan. integroitu Ratkaisu on toteuttaa valvonta koodin hautaamisen avulla, kuten sieppaajat, suodattimet jne. Erittäin tunkeileva koodi, integraatio korkeammat kustannukset. Riski on suurempi.
  • vetoketju RiippuaViserrysYrityksen avoimen lähdekoodin, avoimen lähdekoodin hajautettua seurantajärjestelmää käytetään palveluiden ajoitustietojen keräämiseen mikro- Palveluarkkitehtuurin latenssiongelmia ovat: tiedonkeruu, tallennus, haku ja esittäminen.Tämä tuote yhdistääkevät-pilvi-sleuthSe on suhteellisen yksinkertainen käyttää ja helppo integroida, mutta sen toiminnot ovat suhteellisen yksinkertaisia.
  • täsmentää Tarkkaile Se on korealainen avoimen lähdekoodin puheluketjuanalyysi- ja sovellusvalvontaanalyysityökalu, joka perustuu tavukoodiinjektioon.ominaisuudetSe tukee useita laajennuksia.UITehokkaat toiminnot, ei koodin tunkeutumista pääsypäähän.
  • skywalking
    SkyWalking Se on tavukoodiinjektioon perustuva paikallinen avoimen lähdekoodin puheluketjuanalyysi- ja sovellusvalvontaanalyysityökalu.Ominaisuus on, että se tukee moniaeräänlainen laajennus,UI Toiminto on vahva ja pääsypäässä ei ole koodin tunkeutumista.Jo liittynytApachehautomo.
  • Salapoliisi
    SpringCloud Tarjoaa linkkien seurantaratkaisuja hajautetuissa järjestelmissä. 
Ilmoitus: SpringCloud alibaba Teknologiapino ei tarjoa omaa linkkiseurantatekniikkaa, voimme käyttää Sleuth +
Zinkin Linkkien seurantaratkaisun luominen

2 Sleuthpäästä alkuun

2.1 Sleuthesitellä

SpringCloud Sleuthin päätehtävänä on tarjota seurantaratkaisuja hajautetuissa järjestelmissä.se lainaa paljon Google
Taitava Ymmärrämme ensin suunnittelun Salapoliisi termit ja niihin liittyvät käsitteet .
  • Jäljittää
    ryhmän toimestaJäljitystunnusidenttinenSpan Yhdistetty muodostamaan puurakenteen.Pyynnön seurannan toteuttamiseksi, kun pyyntö saapuu hajautettuun järjestelmäänpääsyn päätepisteeseen, palvelun seurantakehyksen tarvitsee vain luoda pyynnölle yksilöllinen tunniste (esim.TraceId), ollessaan hajautetussa järjestelmässä Järjestelmän sisällä kiertäessään kehys välittää aina tämän ainutlaatuisen arvon, kunnes koko pyyntö palautetaan.Sitten voimme käyttää vain tätäYksi tunniste yhdistää kaikki pyynnöt yhteen täydelliseksi pyyntölinkiksi.
  • Span Edustaa perusjoukkoa työyksiköitä.Jotta voidaan laskea kunkin käsittely-yksikön viive, kun pyyntö saavuttaa jokaisen palvelukomponentinaika, myös yksilöllisen tunnisteen kautta (SpanId ) merkitsemään sen alkua, tiettyä prosessia ja loppua.kulkeaSpanIdalkua ja loppuaLopetuksen aikaleima, voit laskeajänneväli Soittoajan lisäksi saamme myös tapahtuman nimen.Pyydä tietoja jne.metatiedot.
  • Annotaatio
    Käytä sitä tapahtumien tallentamiseen tietyn ajanjakson aikana. Tärkeitä huomautuksia sisäiseen käyttöön:
    csAsiakaslähetys) Asiakas lähettää pyynnön ja aloittaa pyynnön elinkaaren
    srPalvelin vastaanotettu) Palvelin vastaanottaa pyynnön ja alkaa käsitellä sitä, srcs = Verkon latenssi (huoltopuhelun aika)
    ssPalvelin Lähetä) Palvelin on suorittanut käsittelyn ja on valmis lähetettäväksi asiakkaalle,ss - sr = Pyydä käsittelyaika palvelimella
    krAsiakas vastaanotettu) Asiakas saa vastauksen palvelimelta ja pyyntö päättyy. cr - sr =pyydetty kokonaisaika

2.2 Sleuthpäästä alkuun

Mikropalvelun nimi , traceId, espanja, Tulostetaanko linkkien seurantatulokset kolmannen osapuolen alustalle
[api-gateway,3977125f73391553,3977125f73391553,false]
[palvelutilaus,3977125f73391553,57547b5bf71f8242,false]
[palvelutuote,3977125f73391553,449f5b3f3ef8d5c5,false]
Integroi seuraavaksi aiempien projektitapausten kautta Salapoliisi , kirjoita johdantotapaus loppuun.
Muokkaa pääprojektin esittelyä Salapoliisi luottaa
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
Mikropalvelun käynnistämisen ja käyttöliittymän soittamisen jälkeen voimme tarkkailla konsolissa salapoliisi Kohteen lokitulostus
missä c61d4a753370cbeb on TraceId , 0e06445e055ed94f on SpanId, on globaali TraceId, jota kutsutaan peräkkäin kutsuvien linkkien yhdistämiseksi. Analysoimalla huolellisesti kunkin mikropalvelun lokit, ei ole vaikea nähdä pyynnön tiettyä prosessia.

Lokitiedostojen katselu ei ole hyvä tapa.

3 vetoketjuaLiittäminen

3.1 ZipKinesitellä

Zipkin on Viserrys Avoimen lähdekoodin projekti perustuu Google Dapperin toteuttama se on omistettu palveluiden ajoitustietojen keräämiseen mikropalveluarkkitehtuurin latenssiongelmien ratkaisemiseksi, mukaan lukien tiedot Kerää, tallenna, etsi ja näytä

Voimme käyttää sitä keräämään pyyntölinkkien seurantatietoja jokaiselta palvelimelta ja sen tarjoamaa REST API -rajapintaa auttamaan meitä seuraamaan seurantatietoja hajautetun järjestelmän valvontaohjelman toteuttamiseksi, jotta viiveen kasvu havaitaan viipymättä. korkean tason ongelmat ja tunnistaa järjestelmän suorituskyvyn pullonkaulojen lähde.
Kehityssuuntautuneen API:n lisäksi Käyttöliittymän lisäksi se tarjoaa myös kätevän Käyttöliittymäkomponentit auttavat meitä etsimään intuitiivisesti seurantatietoja ja analysoimaan pyyntölinkin yksityiskohtia. Voimme esimerkiksi kysyä kunkin käyttäjän pyynnön käsittelyaikaa tietyn ajanjakson sisällä.
Zipkin tarjoaa kytkettävän tietotallennustilan: Muistissa MySql Cassandra yhtä hyvin kuin Elasticsearch

Yllä oleva kuva näyttää Zipkin infrastruktuuri, joka koostuu pääasiassa 4 Koostuu ydinkomponenteista:
  • Keräilijä: Keräilijäkomponentti, jota käytetään pääasiassa ulkoisista järjestelmistä lähetettyjen seurantatietojen käsittelemiseen ja näiden tietojen muuntamiseen Zipkinkäsitellään sisäisesti Spanmuodossa tukemaan myöhempää tallennusta, analysointia, näyttöä ja muita toimintoja.
  • Varastointi: Tallennuskomponentti, joka käsittelee pääasiassa kerääjän vastaanottamia seurantatietoja Oletusarvoisesti nämä tiedot tallennetaan muistiin.Voimme myös muokata tätä tallennusstrategiaa tallentamaan seurantatiedot tietokantaan käyttämällä muita tallennuskomponentteja.
  • RESTful APIAPI Komponentti, jota käytetään pääasiassa ulkoisen käyttöliittymän tarjoamiseen.Voit esimerkiksi näyttää seurantatiedot asiakkaalle tai ulkopuoliselleJärjestelmän pääsy valvontaa varten jne.
  • VerkkokäyttöliittymäUI komponentti, joka perustuuAPI Komponentin toteuttama ylemmän kerroksen sovellus.kulkeaUIKomponenttien käyttäjät voivat tehdä kyselyitä ja analysoida kätevästi ja intuitiivisestiAnalysoi seurantatiedot.
Zipkin on jaettu kahteen päähän, yksi on Zipkin Palvelimen puolella yksi on Zipkin-asiakas, asiakas on mikropalvelujen sovellus. Asiakas määrittää palvelimen URL-osoite Osoite konfiguroidaan mikropalvelussa, kun palveluiden välillä tapahtuu puhelu. Sleuthin kuuntelija kuuntelee ja luo vastaavan Jäljittää ja Span Tiedot lähetetään palvelimelle.

3.2 ZipKinPalvelimen asennus

Ei. 1 askel : ladata ZipKin / purkki Laukku
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

 Siirry yllä olevaan URL-osoitteeseen saadaksesi apurkkiLaukku, tässä seZipKinpalvelimen puolellapurkkiLaukku

Ei. 2 askel : Aloita kirjoittamalla komentorivin kautta seuraava komento ZipKin-palvelin
java -jar zipkin-server-2.12.9-exec.jar

Ei. 3 Vaihe: Käytä selaimen kautta http://localhost:9411 pääsy

3.3 ZipkinAsiakasintegraatio

ZipKin-asiakas ja Salapoliisi Integrointi on hyvin yksinkertaista, lisää vain sen riippuvuudet ja konfiguraatio mikropalveluun.

Ei. 1 Vaihe: Lisää riippuvuuksia jokaiseen mikropalveluun
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
Ei. 2 Vaihe: Lisää kokoonpano
  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 #采样的百分比
Ei. 3 askel : Käytä mikropalvelun käyttöliittymää
http://localhost:7000/order-serv/order/prod/1

Ei. 4 askel : pääsy vetoketju / UI käyttöliittymä, havaintovaikutus

Ei. 5 Vaihe: Napsauta yhtä tietueista nähdäksesi käynnin yksityiskohtaisen reitin.

4 ZipKinTietojen pysyvyys

Zipkin Server tallentaa seurantatiedot muistiin oletuksena, mutta tämä menetelmä ei sovellu tuotantoympäristöihin. Zipkin tukee pysyviä seurantatietoja mysql tietokanta tai elastinen haku keskellä.

4.1 käyttäämysqlOta käyttöön tietojen pysyvyys

Ei. 1 askel : luoda mysql tietoympäristö
  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` );
Ei. 2 askel : käynnistyksen yhteydessä ZipKin-palvelin kun , Määritä tallennettavat tiedot mysql Tiedot
  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 käyttääelastinen hakuOta käyttöön tietojen pysyvyys

Ei. 1 askel : ladata elastinen haku
lataa linkki: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4

 

Ei. 2 askel : aloittaa elastinen haku

 

Käy: localhost: 9200

Jos tarvitset visualisointia, voit asentaa Kibanan

Ei. 3 askel : käynnistyksen yhteydessä ZipKin-palvelin Kun määritetään tallennettavia tietoja elastinen haku Tiedot
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200

Mitä tulee elasticsearchin visuaaliseen käyttöön, voit viitata:Elasticsearchin asennus ja käyttö ikkunoiden alle sekä kibana_windowskibanna-CSDN-blogin asennus