Komma igång med Grafana Tempo

Låt oss lära oss grunderna i Grafana Tempo, en distribuerad spårningsbackend.

Distribuerad spårning är sättet att få finkornig information om systemets prestanda. Det är ett sätt att visualisera livscykeln för en förfrågan som passerar genom applikationen. Applikationen kan bestå av flera tjänster som finns på en enda nod eller fördelade över noder.

Så genom att använda distribuerad spårning kan du få en konsoliderad bild av alla tjänster. Och Grafana Tempo handlar om det.

Vad är Grafana Tempo?

Det fanns några stora uppdateringar från Grafana Labs på ObservabilityCon-konferensen i år, och Grafana Tempo var en av dem. Grafana Labs har lagt till ytterligare ett projekt, ”Grafana Tempo”, till deras portfölj med öppen källkod.

Grafana Tempo är en distribuerad spårningsbackend med öppen källkod som är mycket skalbar och enkel att använda. Tempo är helt kompatibelt med andra spårningsprotokoll som Zipkin, Jaeger, OpenTelemetry och OpenCensus. För närvarande stöder den Tempo-dataupptäckningsmotorn i Loki, övervakningsplattformar som Prometheus och Grafana. Grafana 7.3+ erbjuder en sömlös upplevelse mellan Grafana och Tempo.

Varför använda Tempo?

Tempo används för att korrelera mätvärdena, spåren och loggarna. Det finns situationer där en användare får samma typ av fel flera gånger. Om jag vill förstå vad som händer måste jag titta på de exakta spåren. Men på grund av nedsampling skulle en del värdefull information som jag kanske letar efter ha gått vilse. Med Tempo behöver vi nu inte nedsampla distribuerad spårningsdata. Vi kan lagra hela spåret i objektlagring som S3 eller GCS, vilket gör Tempo mycket kostnadseffektivt.

Dessutom möjliggör Tempo dig för snabbare felsökning/felsökning genom att du snabbt kan gå från mätvärden till relevanta spår av de specifika loggarna som har registrerat några problem.

Nedan finns de konfigurationsalternativ som används i Tempo.

  • Distributör: Dessa används för att konfigurera mottagningsalternativ för att ta emot spann och sedan skicka dem till intagarna.
  • Ingester: Dessa används för att skapa partier av spår och skickar dem till TempoDB för lagring.
  • Compactor: Den strömmar block från lagringen som S3 eller GCS, kombinerar dem och skriver tillbaka dem till lagringen.
  • Lagring: Detta används för att konfigurera TempoDB. Du måste nämna lagringsbackend-namnet (S3 eller GCS) med andra parametrar i den här konfigurationen.
  • Medlemslista: Den används för koordinering mellan Tempo-komponenter.
  • Autentisering/server: Tempo använder Weaveworks/Common server. Den används för att ställa in serverkonfigurationer.

Tempo arkitektur

Diagrammet ovan visar arbetsarkitekturen för Grafana Tempo.

För det första tar distributören emot spann i olika format från Zipkin, Jaeger, OpenTelemetry, OpenCensus och skickar dessa spann till intagarna genom att hasha spårnings-ID:t. Ingester skapar sedan partier av spår som kallas block.

Sedan skickar den dessa block till backend-lagringen (S3/GCS). När du har ett spårnings-ID som du vill felsöka använder du Grafana UI och lägger spårnings-ID:t i sökfältet. Nu är querier ansvarig för att hämta informationen från antingen inmatnings- eller objektlagring om spårnings-ID:t du angav.

För det första kontrollerar den om spårnings-ID:t finns i inmataren; om den inte hittar den, kontrollerar den sedan lagringsbackend. Den använder en enkel HTTP-slutpunkt för att exponera spåren. Samtidigt tar komprimatorn blocken från lagret, kombinerar dem och skickar tillbaka dem till lagret för att minska antalet block i lagret.

Ställ in Tempo med Docker

I det här avsnittet kommer jag att ställa in Grafana Tempo steg-för-steg med Docker. För det första behöver du en Tempo-backend, så ställ in ett dockningsnätverk.

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

Ladda ner Tempo-konfigurationsfilen.

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

Nedan är listan över protokollalternativ du får:

Protokoll
Hamn
Öppna Telemetri
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411

Använd tempokonfigurationsfilen och kör en dockningsbehållare. Här väljer jag Jaeger – Thrift Compact-format (port 6831) för att skicka spåren.

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

Nu måste du köra en Tempo-frågebehållare. Så först, ladda ner tempofrågans konfigurationsfil.

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

Använd konfigurationsfilen för tempofrågan och kör en dockningsbehållare.

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

Nu kommer Jaeger-gränssnittet att vara tillgängligt på http://localhost:16686, som visas nedan.

I sökfältet kan du lägga till spårnings-ID från en logg som du vill felsöka, så genererar spåren åt dig.

Köra en demoapplikation på Tempo

Det är dags att köra ett demoexempel från Grafana Tempo. Jag kommer att köra ett docker-compose-exempel, så om du försöker samma sak måste du ha docker-compose installerat på din maskin.

Ladda ner Grafana Tempo zip-filen: https://github.com/grafana/tempo

Extrahera den i hemmappen och gå till docker-compose-katalogen. Du hittar flera exempel på docker-compose; Jag använder exemplet där en applikations data lagras lokalt.

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

Kör kommandot nedan för att starta stacken.

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

Du kan se, det har startat behållare för Grafana, Loki, Tempo, Tempo-query och 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

Du kan också gå till din webbläsare och kontrollera om Grafana, Jaeger UI, Prometheus körs.

Nu genererar syntetisk lastgenerator som körs inuti en container spår-ID som den sätter in i tempot. Kör kommandot nedan så kan du se loggarna.

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

Det här är spårnings-id:erna som du måste skicka för att generera spår.

Jag kopierar ett av spårnings-id:erna och lägger det i Jaeger UI-sökfältet.

Du kan se att det framgångsrikt har genererat spåren relaterade till spårnings-id:t jag angav.

Slutsats

Så det handlade om Grafana Tempo. Gå vidare och börja använda Tempo för att generera spår för att förstå mätvärdena och problemen i dina loggar i detalj.

Allt fångas i Tempo, och du kommer inte att missa någon detalj på grund av nedsampling, som brukade ske tidigare. Tempo är enkelt för en utvecklare eller ett produktionsteam att förstå grundorsaken till de fel eller varningar som kan uppstå i loggarna.