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.
Innehållsförteckning
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.