Condivisione della tecnologia

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
    signoreServer ricevuto) Il server riceve la richiesta e inizia a elaborarla, signorecs = Latenza di rete (tempo per la chiamata di servizio)
    ssInvia server) Il server ha completato l'elaborazione ed è pronto per essere inviato al client,ss - sr = Richiedi il tempo di elaborazione sul server
    cretinoCliente 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
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
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 RESTfulAPI 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 WebInterfaccia 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
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
NO. 2 Passaggio: aggiungi configurazione
  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 #采样的百分比
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
  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` );
NO. 2 fare un passo : all'avvio Server ZipKin Quando , Specificare i dati da salvare il mio sql Informazione
  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 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