Почетак рада са Графана Темпом

Upoznajmo osnove Grafana Tempo, distribuiranog pozadinskog sistema za praćenje.

Distribuirano praćenje je metoda za dobijanje detaljnih informacija o performansama sistema. To je način vizualizacije životnog ciklusa zahteva koji prolazi kroz aplikaciju. Aplikacija se može sastojati od više servisa prisutnih na jednom čvoru ili distribuiranih preko različitih čvorova.

Dakle, korišćenjem distribuiranog praćenja, možete dobiti objedinjeni pregled svih usluga. A Grafana Tempo je sve o tome.

Šta je Grafana Tempo?

Bilo je nekoliko značajnih novosti od Grafana Labsa na konferenciji ObservabilityCon ove godine, a Grafana Tempo je bila jedna od njih. Grafana Labs je dodao još jedan projekat, „Grafana Tempo“, svom portfoliju otvorenog koda.

Grafana Tempo je open-source distribuirani pozadinski sistem za praćenje koji je veoma skalabilan i jednostavan za upotrebu. Tempo je u potpunosti kompatibilan sa drugim protokolima za praćenje kao što su Zipkin, Jaeger, OpenTelemetry i OpenCensus. Trenutno podržava Tempo mehanizam za otkrivanje podataka u Lokiju, platforme za praćenje kao što su Prometheus i Grafana. Grafana 7.3+ nudi besprekorno iskustvo između Grafane i Tempa.

Zašto koristiti Tempo?

Tempo se koristi za povezivanje metrika, tragova i logova. Postoje situacije u kojima korisnik dobija istu vrstu greške više puta. Ako želite razumeti šta se dešava, potrebno je pogledati tačne tragove. Ali, usled smanjenja uzorkovanja, neke vredne informacije koje ste možda tražili bi se izgubile. Sa Tempom, sada ne moramo da smanjujemo uzorkovanje distribuiranih podataka praćenja. Možemo da uskladištimo kompletan trag u skladištu objekata kao što je S3 ili GCS, čineći Tempo veoma isplativim.

Takođe, Tempo vam omogućava brže otklanjanje grešaka i rešavanje problema tako što omogućava brzi prelazak sa metrike na relevantne tragove specifičnih logova koji su zabeležili neke probleme.

Ispod su opcije konfiguracije koje se koriste u Tempu.

  • Distributer: Koriste se za konfigurisanje opcija prijema za primanje opsega, a zatim ih šalju ingesterima.
  • Ingester: Oni se koriste za kreiranje grupa tragova i šalju ih u TempoDB za skladištenje.
  • Kompaktor: Čita blokove iz skladišta kao što su S3 ili GCS, kombinuje ih i zapisuje nazad u skladište.
  • Skladištenje: Ovo se koristi za konfigurisanje TempoDB-a. Morate navesti ime pozadinske memorije (S3 ili GCS) sa drugim parametrima u ovoj konfiguraciji.
  • Lista članova: Koristi se za koordinaciju između Tempo komponenti.
  • Autentifikacija/Server: Tempo koristi Weaveworks/Common server. Koristi se za podešavanje konfiguracije servera.

Tempo Arhitektura

Gornji dijagram prikazuje radnu arhitekturu Grafana Tempa.

Prvo, distributer prima opsege u različitim formatima od Zipkin, Jaeger, OpenTelemetry, OpenCensus i šalje ove opsege ingesterima heširanjem ID-a praćenja. Ingester zatim stvara grupe tragova koji se nazivaju blokovi.

Zatim šalje te blokove u pozadinsko skladište (S3/GCS). Kada imate ID praćenja koji želite da rešite, koristićete Grafana UI i uneti ID praćenja u traku za pretragu. Sada je upitnik odgovoran za dobijanje detalja bilo iz ingestera ili objektnog skladišta o ID-u praćenja koji ste uneli.

Prvo, proverava da li je taj ID traga prisutan u ingesteru; ako ga ne pronađe, onda proverava pozadinsku memoriju. Koristi jednostavnu HTTP krajnju tačku da izloži tragove. U međuvremenu, kompaktor uzima blokove iz skladišta, kombinuje ih i šalje nazad u skladište kako bi smanjio broj blokova u skladištu.

Podesite Tempo koristeći Docker

U ovom odeljku ću podesiti Grafana Tempo korak po korak koristeći Docker. Prvo, potreban vam je Tempo back-end, pa postavite docker mrežu.

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

Preuzmite konfiguracioni fajl za Tempo.

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

Ispod je lista opcija protokola koje dobijate:

Protokol Luka
Open Telemetry 55680
Jaeger – Thrift Compact 6831
Jaeger – Thrift Binary 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

Koristeći konfiguracioni fajl tempa, pokrenite docker kontejner. Ovde biram Jaeger – Thrift Compact format (port 6831) za slanje tragova.

[[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

Sada morate da pokrenete Tempo upitni kontejner. Dakle, prvo preuzmite konfiguracioni fajl tempo upita.

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

Koristeći konfiguracioni fajl tempo upita, pokrenite docker kontejner.

[[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

Sada će Jaeger UI biti dostupan na http://localhost:16686, kao što je prikazano ispod.

U traku za pretragu možete dodati ID traga iz loga koji želite da rešite i on će generisati tragove za vas.

Pokretanje demo aplikacije na Tempu

Vreme je da pokrenemo demo primer koji je dao Grafana Tempo. Pokrenuću primer docker-compose, tako da, ako pokušavate isto, morate imati instaliran docker-compose na vašoj mašini.

Preuzmite zip fajl Grafana Tempo: https://github.com/grafana/tempo

Raspakujte ga u početnu fasciklu i idite u direktorijum docker-compose. Naći ćete više primera docker-compose; koristim primer gde se podaci aplikacije čuvaju lokalno.

[[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

Pokrenite naredbu ispod da biste pokrenuli stek.

[[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

Vidite, pokrenuo je kontejnere za Grafanu, 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

Takođe možete da odete u svoj pretraživač i proverite da li su Grafana, Jaeger UI i Prometheus pokrenuti.

Sada sintetički-load-generator koji radi unutar kontejnera generiše ID-ove traga koje stavlja u tempo. Pokrenite naredbu ispod i možete da vidite logove.

[[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 

Ovo su ID-ovi tragova koje morate proslediti da biste generisali tragove.

Kopiram jedan od ID-ova praćenja i unosim ga u traku za pretragu korisničkog interfejsa Jaegera.

Možete videti da je uspešno generisao tragove u vezi sa ID-om traga koji sam naveo.

Zaključak

Dakle, to je bilo sve o Grafani Tempu. Samo napred i počnite da koristite Tempo za generisanje tragova da biste detaljno razumeli metrike i probleme u vašim logovima.

Sve se snima u Tempu i nećete propustiti nijedan detalj zbog smanjenja uzorkovanja, što se dešavalo ranije. Tempo je jednostavan za programere ili proizvodni tim da razumeju osnovni uzrok grešaka ili upozorenja koja se mogu pojaviti u logovima.