Să explorăm elementele de bază ale Grafana Tempo, o soluție backend pentru urmărirea distribuită.
Urmărirea distribuită oferă o perspectivă detaliată asupra performanței unui sistem. Permite vizualizarea parcursului unei solicitări prin întreaga aplicație, care poate include mai multe servicii, fie pe un singur server, fie răspândite pe mai multe.
Prin utilizarea urmăririi distribuite, obții o imagine unitară a tuturor serviciilor implicate. Exact aceasta este rațiunea de existență a Grafana Tempo.
Ce reprezintă Grafana Tempo?
La conferința ObservabilityCon din acest an, Grafana Labs a prezentat câteva actualizări semnificative, inclusiv lansarea Grafana Tempo. Astfel, Grafana Labs a adăugat un nou proiect, numit „Grafana Tempo”, în gama lor de produse open-source.
Grafana Tempo este o platformă backend de urmărire distribuită, open-source, caracterizată prin scalabilitate și ușurință de utilizare. Tempo este pe deplin compatibil cu diverse protocoale de urmărire, cum ar fi Zipkin, Jaeger, OpenTelemetry și OpenCensus. În prezent, platforma suportă motorul de descoperire a datelor Tempo în Loki, platforme de monitorizare precum Prometheus și Grafana. Grafana 7.3+ oferă o integrare perfectă între Grafana și Tempo.
De ce să alegi Tempo?
Tempo este util pentru a corela valori, urme și înregistrări de jurnal. Apare frecvent situația în care un utilizator întâmpină aceeași eroare repetat. Pentru a identifica cauza problemei, este necesar să se analizeze urmele specifice. Însă, din cauza reducerii eșantionării, informații valoroase pot fi omise. Cu Tempo, nu mai este necesară eșantionarea datelor de urmărire distribuite. Traseul complet poate fi stocat în spații de stocare ca S3 sau GCS, ceea ce face ca Tempo să fie o soluție economică.
Tempo permite o depanare mai rapidă, oferind posibilitatea de a comuta rapid de la valori la urmele relevante din jurnale care au consemnat anumite probleme.
Mai jos sunt prezentate opțiunile de configurare utilizate în Tempo:
- Distribuitor: Utilizează opțiunile de recepție pentru a colecta intervale și a le trimite către procesatorii de date (ingesteri).
- Ingester: Creează loturi de urme și le transmite către TempoDB pentru a fi stocate.
- Compactor: Prelucrarea fluxului de date din stocare (de exemplu, S3 sau GCS), combinarea acestora și rescrierea înapoi în stocare.
- Stocare: Configurează TempoDB. Aici trebuie specificat numele sistemului de stocare (S3 sau GCS), alături de alți parametri.
- Listă de membri: Coordonează interacțiunea dintre componentele Tempo.
- Autentificare/Server: Tempo utilizează serverul Weaveworks/Common. Este folosită pentru a configura setările serverului.
Arhitectura Tempo
Schema de mai sus ilustrează arhitectura de lucru a Grafana Tempo.
În primul rând, distribuitorul colectează intervale de date în diferite formate de la Zipkin, Jaeger, OpenTelemetry și OpenCensus, iar apoi le transmite către procesatorii de date (ingesteri) utilizând un sistem de hashing al ID-ului de urmărire. Ingesterii asamblează urmele în loturi, denumite blocuri.
Aceste blocuri sunt trimise către stocarea backend (S3/GCS). Pentru depanare, atunci când introduci un ID de urmărire în interfața Grafana, interogatorul este responsabil pentru a obține datele fie de la ingester, fie din stocarea obiectelor.
Inițial, verifică prezența ID-ului de urmărire în ingester; dacă nu îl găsește, caută în stocarea backend. Utilizează un endpoint HTTP simplu pentru a expune urmele. Între timp, compactorul colectează blocurile din stocare, le combină și le returnează în stocare pentru a reduce numărul total de blocuri.
Instalarea Tempo folosind Docker
În această secțiune, voi explica pas cu pas cum se instalează Grafana Tempo utilizând Docker. Pentru început, creează o rețea docker pentru a găzdui backend-ul Tempo.
[[email protected] ~]$ docker network create docker-tempo
Descarcă fișierul de configurare pentru Tempo.
[[email protected] ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml
Lista de protocoale suportate este următoarea:
Protocol
Port
Open Telemetry
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411
Utilizând fișierul de configurare, pornește un container docker. În acest exemplu, voi alege 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 este necesar să pornești un container pentru interogările Tempo. Pentru aceasta, descarcă fișierul de configurare corespunzător.
[[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml
Utilizând fișierul de configurare pentru interogări, pornește 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
Interfața Jaeger devine accesibilă la adresa http://localhost:16686, conform exemplului de mai jos.
În bara de căutare, introdu ID-ul de urmărire al jurnalului pe care dorești să îl analizezi, iar acesta va genera urmele corespunzătoare.
Testarea cu o Aplicație Demo pe Tempo
A sosit timpul să testăm Grafana Tempo cu o aplicație demo. Voi folosi un exemplu docker-compose. Pentru a urma același procedeu, asigură-te că ai docker-compose instalat pe sistem.
Descarcă fișierul zip Grafana Tempo de aici: https://github.com/grafana/tempo
Extrage arhiva în folderul tău personal și navighează la directorul docker-compose. Vei observa mai multe exemple de docker-compose; eu voi folosi exemplul unde datele aplicației 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
Rulează următoarea comandă pentru a porni setul de containere.
[[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
După cum poți vedea, au fost pornite 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
Poți accesa interfața web și verifica dacă Grafana, Jaeger UI, și Prometheus sunt operaționale.
În acest moment, generatorul de sarcină sintetică, rulează într-un container, creează ID-uri de urmărire și le trimite către Tempo. Rulează următoarea comandă pentru a 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 le vei utiliza pentru a genera urmele.
Copiază unul dintre aceste ID-uri și introdu-l în bara de căutare a interfeței Jaeger UI.
După cum poți vedea, a generat cu succes urmele asociate ID-ului de urmărire furnizat.
Concluzie
Acesta este un rezumat al Grafana Tempo. Începe să folosești Tempo pentru a genera urmele și a înțelege în detaliu valorile și problemele din jurnale.
În Tempo, totul este înregistrat, astfel că nu vei pierde niciun detaliu important din cauza reducerii eșantionării, cum se întâmpla anterior. Tempo facilitează identificarea cauzei principale a erorilor sau a avertismentelor care pot apărea în jurnale, simplificând procesul pentru dezvoltatori și echipele de producție.