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:
cs(Asiakaslähetys) Asiakas lähettää pyynnön ja aloittaa pyynnön elinkaaren
sr(Palvelin vastaanotettu) Palvelin vastaanottaa pyynnön ja alkaa käsitellä sitä, sr-cs = Verkon latenssi (huoltopuhelun aika)
ss(Palvelin Lähetä) Palvelin on suorittanut käsittelyn ja on valmis lähetettäväksi asiakkaalle,ss - sr = Pyydä käsittelyaika palvelimella
kr(Asiakas 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
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
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 API:API 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
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
Ei.
2
Vaihe: Lisää kokoonpano
base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
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ö
NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`name` VARCHAR ( 255 ) NOT NULL,
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for
ALTER TABLE zipkin_spans ADD INDEX ( `name` ) COMMENT 'for getTraces and
ALTER TABLE zipkin_spans ADD INDEX ( `start_ts` ) COMMENT 'for getTraces
NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR ( 255 ) NOT NULL COMMENT 'BinaryAnnotation.key or
Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
`a_timestamp` BIGINT COMMENT 'Used to implement TTL;
Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
`endpoint_ipv6` BINARY ( 16 ) COMMENT 'Null when Binary/Annotation.endpoint
is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
`endpoint_service_name` VARCHAR ( 255 ) COMMENT 'Null when
Binary/Annotation.endpoint is null'
) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp` ) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id`, `span_id` ) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX ( `endpoint_service_name` ) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX ( `a_type` ) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX ( `a_key` ) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id`, `span_id`, `a_key` ) COMMENT 'for dependencies job';
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
SET = utf8 COLLATE utf8_general_ci;
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
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --
MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=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