Noțiuni introductive cu Grafana Tempo

Publicat: 2021-04-19

Să învățăm elementele fundamentale ale Grafana Tempo, un backend de urmărire distribuit.

Urmărirea distribuită este modalitatea de a obține informații detaliate despre performanța sistemului. Este o modalitate de a vizualiza ciclul de viață al unei cereri care trece prin aplicație. Aplicația poate consta din mai multe servicii prezente pe un singur nod sau distribuite între noduri.

Deci, folosind urmărirea distribuită, puteți obține o vedere consolidată a tuturor serviciilor. Și Grafana Tempo este totul despre asta.

Ce este Grafana Tempo?

Au existat câteva actualizări majore de la Grafana Labs la conferința ObservabilityCon din acest an, iar Grafana Tempo a fost una dintre ele. Grafana Labs a adăugat încă un proiect, „Grafana Tempo”, în portofoliul lor open-source.

Grafana Tempo este un backend de urmărire distribuit cu sursă deschisă, foarte scalabil și ușor de utilizat. Tempo este complet compatibil cu alte protocoale de urmărire, cum ar fi Zipkin, Jaeger, OpenTelemetry și OpenCensus. În prezent, acceptă motorul de descoperire a datelor Tempo în Loki, platforme de monitorizare precum Prometheus și Grafana. Grafana 7.3+ oferă o experiență perfectă între Grafana și Tempo.

De ce să folosiți Tempo?

Tempo este folosit pentru a corela valorile, urmele și jurnalele. Există situații în care un utilizator primește același tip de eroare de mai multe ori. Dacă vreau să înțeleg ce se întâmplă, va trebui să mă uit la urmele exacte. Dar din cauza reducerii eșantionării, unele informații valoroase pe care aș putea să le caut s-ar fi pierdut. Cu Tempo, acum nu trebuie să eșantionăm datele de urmărire distribuite. Putem stoca urma completă în stocarea obiectelor precum S3 sau GCS, făcând Tempo foarte eficient din punct de vedere al costurilor.

De asemenea, Tempo vă permite o depanare/depanare mai rapidă, permițându-vă să treceți rapid de la valori la urmele relevante ale jurnalelor specifice care au înregistrat unele probleme.

Mai jos sunt opțiunile de configurare utilizate în Tempo.

  • Distribuitor : Acestea sunt folosite pentru a configura opțiunile de primire pentru a primi intervale și apoi pentru a le trimite către ingeratori.
  • Ingester : Acestea sunt folosite pentru a crea loturi de urme și le trimite la TempoDB pentru stocare.
  • Compactor : transmite în flux blocuri din stocare, cum ar fi S3 sau GCS, le combină și le scrie înapoi în stocare.
  • Stocare : Acesta este folosit pentru a configura TempoDB. Trebuie să menționați numele backend-ului de stocare (S3 sau GCS) cu alți parametri în această configurație.
  • Listă de membri : este folosit pentru coordonarea între componentele Tempo.
  • Autentificare/Server : Tempo utilizează serverul Weaveworks/Common. Este folosit pentru a seta configurațiile serverului.

Arhitectura Tempo

arhitectura tempo-ului

Diagrama de mai sus arată arhitectura de lucru a Grafana Tempo.

În primul rând, distribuitorul primește intervale în diferite formate de la Zipkin, Jaeger, OpenTelemetry, OpenCensus și trimite aceste intervale către ingeratori prin hashing ID-ul de urmărire. Ingester creează apoi loturi de urme care se numesc blocuri.

Apoi trimite acele blocuri la stocarea backend (S3/GCS). Când aveți un ID de urmărire pe care doriți să-l depanați, veți folosi Grafana UI și veți pune ID-ul de urmărire în bara de căutare. Acum, interogatorul este responsabil pentru obținerea detaliilor fie de la ingester, fie de la stocarea obiectelor despre ID-ul de urmărire pe care l-ați introdus.

În primul rând, verifică dacă acel ID de urmă este prezent în ingester; dacă nu îl găsește, apoi verifică backend-ul de stocare. Utilizează un punct final HTTP simplu pentru a expune urmele. Între timp, compactorul preia blocurile din depozit, le combină și le trimite înapoi la depozit pentru a reduce numărul de blocuri din depozit.

Configurați tempo folosind Docker

În această secțiune, voi configura Grafana Tempo pas cu pas folosind Docker. În primul rând, aveți nevoie de un backend Tempo, așa că configurați o rețea docker.

 [[email protected] ~]$ docker network create docker-tempo

Descărcați fișierul de configurare Tempo.

 [[email protected] ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml

Mai jos este lista de opțiuni de protocol pe care le obțineți:

Protocol Port
Deschideți Telemetria 55680
Jaeger – Thrift Compact 6831
Jaeger – Binar de economisire 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

Folosind fișierul de configurare tempo, rulați un container docker. Aici aleg formatul Jaeger – Thrift Compact (port 6831) pentru a trimite urmele.

 [[email protected] ~]$ docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo-local.yaml:/etc/tempo-local.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo-local.yaml

Acum trebuie să rulați un container de interogări Tempo. Deci, mai întâi, descărcați fișierul de configurare a interogării tempo.

 [[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

Folosind fișierul de configurare a interogării tempo, rulați un container docker.

 [[email protected] ~]$ docker run -d --rm -p 16686:16686 -v $(pwd)/tempo-query.yaml:/etc/tempo-query.yaml --network docker-tempo grafana/tempo-query:latest --grpc-storage-plugin.configuration-file=/etc/tempo-query.yaml

Acum, interfața de utilizare Jaeger va fi accesibilă la http://localhost:16686 , așa cum se arată mai jos.

jaeger ui - geekflare

În bara de căutare, puteți adăuga ID-ul de urmărire dintr-un jurnal pe care doriți să îl depanați și acesta va genera urmele pentru dvs.

traceid - nou

Rularea unei aplicații demonstrative pe Tempo

Este timpul să rulăm un exemplu demo dat de Grafana Tempo. Voi rula un exemplu de docker-compose, deci dacă încercați același lucru, trebuie să aveți instalat docker-compose pe mașina dvs.

Descărcați fișierul zip Grafana Tempo: https://github.com/grafana/tempo

Extrageți-l în folderul de acasă și accesați directorul docker-compose. Veți găsi mai multe exemple de docker-compose; Folosesc exemplul în care datele unei aplicații sunt stocate local.

 [[email protected] ~]$ cd tempo-master/example/docker-compose/ [[email protected] docker-compose]$ ls docker-compose.loki.yaml docker-compose.s3.minio.yaml docker-compose.yaml etc example-data readme.md tempo-link.png

Rulați comanda de mai jos pentru a porni stiva.

 [[email protected] docker-compose]$ docker-compose up -d Starting docker-compose_prometheus_1 ... done Starting docker-compose_tempo_1 ... done Starting docker-compose_grafana_1 ... done Starting docker-compose_tempo-query_1 ... done Starting docker-compose_synthetic-load-generator_1 ... done

Puteți vedea, a început containerele pentru Grafana, Loki, Tempo, Tempo-query și Prometheus.

 [[email protected] docker-compose]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84cd557ce07b grafana/tempo-query:latest "/go/bin/query-linux…" 10 minutes ago Up 4 seconds 0.0.0.0:16686->16686/tcp docker-compose_tempo-query_1 f7cd9cf460d9 omnition/synthetic-load-generator:1.0.25 "./start.sh" 10 minutes ago Up 4 seconds docker-compose_synthetic-load-generator_1 6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 "/run.sh" 10 minutes ago Up 6 seconds 0.0.0.0:3000->3000/tcp docker-compose_grafana_1 d8574ea25028 grafana/tempo:latest "/tempo -config.file…" 10 minutes ago Up 6 seconds 0.0.0.0:49173->3100/tcp, 0.0.0.0:49172->14268/tcp docker-compose_tempo_1 5f9e53b5a09c prom/prometheus:latest "/bin/prometheus --c…" 10 minutes ago Up 6 seconds 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1

De asemenea, puteți accesa browserul și verifica dacă Grafana, Jaeger UI, Prometheus rulează.

grafana

prometeu

Acum, generatorul de sarcină sintetică care rulează în interiorul unui container generează ID-uri de urmărire pe care le pune în tempo. Rulați comanda de mai jos și puteți vizualiza jurnalele.

 [[email protected] docker-compose]$ docker-compose logs -f synthetic-load-generator Attaching to docker-compose_synthetic-load-generator_1 synthetic-load-generator_1 | using params: --jaegerCollectorUrl http://tempo:14268 synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /product, 2880 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /cart, 14400 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /checkout, 480 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 17867942c5e161f2 for service frontend route /currency synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 3d9cc23c8129439f for service frontend route /shipping synthetic-load-generator_1

Acestea sunt ID-urile de urmărire pe care trebuie să le transmiteți pentru a genera urme.

urme noi

Copiez unul dintre ID-urile de urmărire și îl pun în bara de căutare Jaeger UI.

traceid

Puteți vedea că a generat cu succes urmele legate de ID-ul de urmărire pe care l-am furnizat.

Concluzie

Deci asta era totul despre Grafana Tempo. Continuați și începeți să utilizați Tempo pentru a genera urme pentru a înțelege în detaliu valorile și problemele din jurnalele dvs.

Totul este capturat în Tempo și nu veți pierde niciun detaliu din cauza reducerii eșantionării, care se întâmpla mai devreme. Tempo este simplu pentru un dezvoltator sau o echipă de producție să înțeleagă cauza principală a erorilor sau avertismentelor care ar putea apărea în jurnalele.