Investigatore: tracciamento dei collegamenti
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1 Introduzione al tracciamento dei collegamenti
Nella costruzione di microservizi di sistemi di grandi dimensioni, un sistema è suddiviso in molti moduli. Questi moduli sono responsabili di diverse funzioni e sono combinati in un sistema che in definitiva può fornire ricche funzionalità. In questa architettura, una richiesta spesso coinvolge più servizi. Le applicazioni Internet sono costruite su diversi set di moduli software. Questi moduli software possono essere sviluppati da team diversi, possono essere implementati utilizzando linguaggi di programmazione diversi e possono essere distribuiti su migliaia di server in più data center diversi, il che significa che ce ne saranno anche. alcuni problemi con questa forma architettonica:
- Come trovare rapidamente i problemi?
- Come determinare la portata dell'impatto della colpa?
- Come risolvere le dipendenze del servizio e la razionalità delle dipendenze?
- Come analizzare i problemi relativi alle prestazioni dei collegamenti e la pianificazione della capacità in tempo reale?

La traccia dei collegamenti distribuiti (traccia distribuita) consiste nel ripristinare una richiesta distribuita su un collegamento chiamante, eseguire la registrazione, il monitoraggio delle prestazioni e visualizzare centralmente lo stato della chiamata di una richiesta distribuita. Ad esempio, il tempo trascorso su ciascun nodo di servizio, quale macchina raggiunge la richiesta, lo stato della richiesta di ciascun nodo di servizio, ecc.
Le tecnologie comuni di tracciamento dei collegamenti includono quanto segue:
- gatto Open source di Dianping e basato suGiava La piattaforma di monitoraggio delle applicazioni in tempo reale sviluppata include il monitoraggio delle applicazioni in tempo reale e il monitoraggio aziendale. integrato La soluzione è implementare il monitoraggio tramite code burying, come intercettori, filtri, ecc. Molto invadente per il codice, integrazione costo più elevato. Il rischio è maggiore.
- cerniera Dipende daCinguettioIl sistema di tracciamento distribuito open source e open source dell'azienda viene utilizzato per raccogliere dati temporali dei servizi per risolvere micro- I problemi di latenza nell'architettura del servizio includono: raccolta, archiviazione, ricerca e presentazione dei dati.Questo prodotto combinainvestigatore-nuvole-primaveriliÈ relativamente semplice da usare e facile da integrare, ma le sue funzioni sono relativamente semplici.
- individuare Individuare Si tratta di uno strumento coreano di analisi della catena di chiamate e di analisi del monitoraggio delle applicazioni open source basato sull'iniezione di bytecode.CaratteristicheSupporta una varietà di plug-in.Interfaccia utenteFunzioni potenti, nessuna intrusione di codice all'estremità di accesso.
- camminare nel cielo
Camminare nel cielo Si tratta di uno strumento di analisi della catena di chiamate locale open source e di analisi del monitoraggio delle applicazioni basato sull'iniezione di bytecode.La caratteristica è che ne supporta moltitipo di plug-in,Interfaccia utente La funzione è potente e non vi è alcuna intrusione di codice all'estremità dell'accesso.Già iscrittoapacheincubatrice. - Investigatore
PrimaveraNuvola Fornisce soluzioni di tracciamento dei collegamenti nei sistemi distribuiti.
Avviso:
SpringCloud Alibaba
Lo stack tecnologico non fornisce la propria tecnologia di tracciamento dei collegamenti, che possiamo utilizzare
Investigatore +
Zinco
Per creare una soluzione di monitoraggio dei collegamenti
2 Investigatoreiniziare
2.1 Investigatoreintrodurre
La funzione principale di SpringCloud Sleuth è fornire soluzioni di tracciamento in sistemi distribuiti.prende in prestito pesantemente da
Google
Elegante
Comprendiamo innanzitutto il design di
Investigatore
termini e concetti correlati in .
- Traccia
da un gruppoID tracciaidenticoPortata Concatenati per formare una struttura ad albero.Per implementare il tracciamento delle richieste, quando una richiesta arriva al sistema distribuitoendpoint di ingresso, il framework di tracciamento del servizio deve solo creare un identificatore univoco per la richiesta (ad es.TracciaID), mentre nel sistema distribuito Quando circola all'interno del sistema, il framework continua sempre a trasmettere questo valore univoco finché non viene restituita l'intera richiesta.Quindi possiamo usare solo questoUn identificatore collega tutte le richieste insieme per formare un collegamento di richiesta completo. - Portata Rappresenta un insieme base di unità di lavoro.Per contare il ritardo di ciascuna unità di elaborazione, quando la richiesta raggiunge ciascun componente del serviziotempo, anche attraverso un identificatore univoco (IDSpagnolo ) per segnarne l'inizio, il processo specifico e la fine.passaggioIDSpagnolol'inizio e la fine diFine timestamp, puoi contare ilcampata Oltre all'orario della chiamata possiamo ottenere anche il nome dell'evento.Richiedi informazioni, ecc.metadati.
- Annotazione
Usalo per registrare eventi in un periodo di tempo Note importanti per uso interno:
c.s.(Invia il cliente) Il client emette una richiesta e inizia la vita di una richiesta
signore(Server ricevuto) Il server riceve la richiesta e inizia a elaborarla, signore-cs = Latenza di rete (tempo per la chiamata di servizio)
ss(Invia server) Il server ha completato l'elaborazione ed è pronto per essere inviato al client,ss - sr = Richiedi il tempo di elaborazione sul server
cretino(Cliente ricevuto) Il client riceve la risposta dal server e la richiesta termina. cr - sr =tempo totale richiesto

2.2 Investigatoreiniziare
Nome del microservizio
, traceId, spanid,
Se inviare i risultati del monitoraggio dei collegamenti a una piattaforma di terze parti
[api-gateway,3977125f73391553,3977125f73391553,falso]
[ordine-di-servizio,3977125f73391553,57547b5bf71f8242,falso]
[servizio-prodotto,3977125f73391553,449f5b3f3ef8d5c5,false]
Successivamente, integra i casi di progetto precedenti
Investigatore
, completare la stesura della causa introduttiva.
Modifica l'introduzione del progetto principale
Investigatore
fare affidamento
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
Dopo aver avviato il microservizio e chiamato l'interfaccia, possiamo osservare sulla console
investigatore
L'output del registro di
dove c61d4a753370cbeb è
TracciaID
, 0e06445e055ed94f è
SpanId, esiste un TraceId globale chiamato in sequenza per mettere insieme i collegamenti chiamanti. Analizzando attentamente i log di ciascun microservizio, non è difficile vedere lo specifico processo della richiesta.
La visualizzazione dei file di registro non è un buon metodo. Quando ci sono sempre più microservizi, ci saranno sempre più file di registro in grado di aggregare i registri ed eseguire la visualizzazione visiva e il recupero del testo completo.
3 CernieraIntegrazione
3.1 ZipKinintrodurre
Zipkin lo è
Cinguettio
Un progetto open source basato su
Implementato da Google Dapper, è dedicato alla raccolta di dati temporali dei servizi per risolvere problemi di latenza nell'architettura dei microservizi, inclusi i dati
Raccogli, archivia, cerca e visualizza
。
Possiamo usarlo per raccogliere dati di tracciamento dei collegamenti di richiesta su ciascun server e utilizzare l'interfaccia API REST che fornisce per aiutarci nell'interrogazione dei dati di tracciamento per implementare il programma di monitoraggio del sistema distribuito, in modo da scoprire tempestivamente l'aumento del ritardo nel problemi di alto livello e identificare l'origine dei colli di bottiglia nelle prestazioni del sistema.
Oltre all'API orientata allo sviluppo
Oltre all'interfaccia, offre anche una comoda interfaccia
I componenti dell'interfaccia utente ci aiutano a cercare in modo intuitivo le informazioni di tracciamento e ad analizzare i dettagli del collegamento della richiesta. Ad esempio, possiamo interrogare il tempo di elaborazione di ciascuna richiesta dell'utente entro un determinato periodo di tempo.
Zipkin fornisce archiviazione dati collegabile:
In memoria
、
Il mio SQL
、
Cassandra
così come
Ricerca elastica
。

L'immagine sopra mostra
Cerniera
infrastruttura, che consiste principalmente di
4
Composto da componenti principali:
- Collettore: componente di raccolta, utilizzato principalmente per elaborare le informazioni di tracciamento inviate da sistemi esterni e convertire queste informazioni in Cernieraelaborati internamente Portataformato per supportare la successiva memorizzazione, analisi, visualizzazione e altre funzioni.
- Magazzinaggio: componente di archiviazione, che elabora principalmente le informazioni di tracciamento ricevute dal raccoglitore. Per impostazione predefinita, queste informazioni verranno archiviate in memoria.Possiamo anche modificare questa strategia di archiviazione per archiviare le informazioni di tracciamento nel database utilizzando altri componenti di archiviazione.
- API RESTful:API Componente utilizzato principalmente per fornire un'interfaccia di accesso esterno.Ad esempio, visualizzare le informazioni di tracciamento al client o all'esternoAccesso al sistema per il monitoraggio, ecc.
- Interfaccia utente Web:Interfaccia utente componente, basato suAPI L'applicazione di livello superiore implementata dal componente.passaggioInterfaccia utenteGli utenti dei componenti possono interrogare e analizzare in modo comodo e intuitivoAnalizzare le informazioni di tracciamento.
Zipkin è diviso in due estremità, una è
Cerniera
Dal lato server, uno lo è
Client Zipkin, il client è l'applicazione dei microservizi. Il client configurerà il server
Indirizzo URL
L'indirizzo verrà configurato nel microservizio una volta che si verifica una chiamata tra servizi.
L'ascoltatore dell'investigatore ascolta e genera corrispondenza
Traccia
E
Portata
Le informazioni vengono inviate al server.
3.2 ZipKinInstallazione del server
NO.
1
fare un passo
:
scaricamento
Cerniera
Di
vaso
Borsa
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
Visita l'URL sopra per ottenere un filevasoBorsa, eccolaCernieralato servervasoBorsa
NO.
2
fare un passo
:
Attraverso la riga di comando, inserisci il seguente comando per iniziare
Server ZipKin
java -jar zipkin-server-2.12.9-exec.jar
NO.
3
Passaggio: accesso tramite browser
http://localhost:9411
accesso

3.3 CernieraIntegrazione del cliente
Client ZipKin e
Investigatore
L'integrazione è molto semplice, basta aggiungere le sue dipendenze e la configurazione nel microservizio.
NO.
1
Passaggio: aggiungere dipendenze su ciascun microservizio
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
NO.
2
Passaggio: aggiungi configurazione
base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
NO.
3
fare un passo
:
Accedi all'interfaccia del microservizio
http://localhost:7000/order-serv/order/prod/1
NO.
4
fare un passo
:
accesso
cerniera
Di
Interfaccia utente
interfaccia, effetto di osservazione

NO.
5
Passo: Cliccare su uno dei record per osservare il percorso dettagliato di una visita.

4 CernieraPersistenza dei dati
Zipkin Server salverà le informazioni sui dati di tracciamento in memoria per impostazione predefinita, ma questo metodo non è adatto per ambienti di produzione.
Zipkin supporta la persistenza dei dati di tracciamento
il mio sql
banca dati o
ricerca elastica
mezzo.
4.1 utilizzoil mio sqlImplementare la persistenza dei dati
NO.
1
fare un passo
:
creare
il mio sql
ambiente dei dati
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` );

NO.
2
fare un passo
:
all'avvio
Server ZipKin
Quando
,
Specificare i dati da salvare
il mio sql
Informazione
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 utilizzoricerca elasticaImplementare la persistenza dei dati
NO.
1
fare un passo
:
scaricamento
ricerca elastica
Link per scaricare:
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4
NO.
2
fare un passo
:
avviare
ricerca elastica
Visita: localhost:9200
Se hai bisogno di visualizzazione, puoi installare Kibana
NO.
3
fare un passo
:
all'avvio
Server ZipKin
Quando si specificano i dati da salvare
ricerca elastica
Informazione
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200
Per quanto riguarda l’utilizzo visuale di elasticsearch si può fare riferimento a:Installazione e utilizzo di Elasticsearch sotto Windows e installazione del blog kibana_windowskibanna-CSDN