Grunderna i Grafana Tempo: En distribuerad spårningsbackend
Låt oss utforska grunderna i Grafana Tempo, en distribuerad backend för spårning. Denna teknik ger detaljerad insikt i ett systems prestanda genom att visualisera en förfrågnings livscykel. En applikation kan bestå av flera tjänster, antingen samlokaliserade på en enda nod eller spridda över flera.
Genom att använda distribuerad spårning får du en helhetsbild av alla tjänster, och det är precis vad Grafana Tempo erbjuder.
Vad är Grafana Tempo?
Grafana Labs presenterade flera betydande uppdateringar på ObservabilityCon-konferensen i år, och Grafana Tempo var en av dem. De har lagt till ”Grafana Tempo” till sin portfölj av projekt med öppen källkod.
Grafana Tempo är en öppen källkod, distribuerad spårningsbackend som utmärker sig i skalbarhet och användarvänlighet. Tempo är kompatibelt med flera spårningsprotokoll, inklusive Zipkin, Jaeger, OpenTelemetry och OpenCensus. För närvarande stöder det Tempos dataupptäcktsmotor i Loki, övervakningsplattformar som Prometheus och Grafana. Grafana 7.3+ erbjuder en smidig integration mellan Grafana och Tempo.
Varför använda Tempo?
Tempo används för att korrelera mätvärden, spår och loggar. Användare kan ibland stöta på samma typ av fel upprepade gånger. För att förstå vad som händer kan man behöva analysera de exakta spåren. Tidigare kunde värdefull information gå förlorad genom nedsampling. Med Tempo behövs inte nedsampling av distribuerad spårningsdata längre. Hela spåret kan lagras i objektlagring som S3 eller GCS, vilket gör Tempo kostnadseffektivt.
Tempo underlättar även snabbare felsökning genom att snabbt koppla mätvärden till relevanta spår av specifika loggar som indikerar problem.
Nedan listas konfigurationsalternativ som används i Tempo:
- Distributör: Konfigurerar mottagningsalternativ för att ta emot span och skicka dem till mottagarna.
- Ingester: Skapar spårbatches och skickar dem till TempoDB för lagring.
- Compactor: Strömmar block från lagring (S3 eller GCS), kombinerar dem och skriver tillbaka dem.
- Lagring: Konfigurerar TempoDB, inklusive backend-namn (S3 eller GCS) och andra parametrar.
- Medlemslista: Används för koordinering mellan Tempo-komponenter.
- Autentisering/server: Använder Weaveworks/Common server för serverkonfigurationer.
Tempo Arkitektur
Den grundläggande arbetsarkitekturen för Grafana Tempo kan beskrivas på följande sätt:
Först mottar distributören span i olika format från Zipkin, Jaeger, OpenTelemetry, OpenCensus och vidarebefordrar dessa span till mottagarna genom att hasha spårnings-ID:n. Ingesters grupperar sedan dessa span i spårbatches, kallade block.
Därefter lagras dessa block i backend-lagringen (S3/GCS). För att felsöka ett spårnings-ID används Grafana UI, där spårnings-ID:t matas in i sökfältet. Frågeverktyget ansvarar för att hämta informationen från antingen mottagaren eller objektlagringen, baserat på det angivna spårnings-ID:t.
Först kontrollerar verktyget om spårnings-ID:t finns i mottagaren. Om inte, så söker den i backend-lagringen. En enkel HTTP-slutpunkt används för att exponera spåren. Samtidigt hämtar komprimatorn block från lagringen, kombinerar dem och returnerar dem till lagringen, vilket minskar antalet block.
Installera Tempo med Docker
Låt oss gå igenom hur du steg-för-steg installerar Grafana Tempo med Docker. Först behöver du en Tempo-backend, så vi skapar ett dockningsnätverk:
docker network create docker-tempo
Hämta Tempos konfigurationsfil:
curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml
Följande protokollalternativ finns tillgängliga:
Protokoll | Port |
Open Telemetry | 55680 |
Jaeger – Thrift Compact | 6831 |
Jaeger – Thrift Binary | 6832 |
Jaeger – Thrift HTTP | 14268 |
Jaeger – GRPC | 14250 |
Zipkin | 9411 |
Med hjälp av konfigurationsfilen startas en Docker-container. Här använder vi Jaeger – Thrift Compact-format (port 6831) för att skicka spår:
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 behöver vi köra en Tempo-query-container. Ladda först ner konfigurationsfilen för tempo-query:
curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml
Använd konfigurationsfilen för tempo-query och starta en Docker-container:
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 är Jaeger-gränssnittet tillgängligt på http://localhost:16686.
I sökfältet kan du ange ett spårnings-ID från en logg du vill felsöka, och spåren genereras.
Köra en demoapplikation på Tempo
Nu är det dags att köra ett demoexempel från Grafana Tempo. Vi kommer att använda ett docker-compose-exempel. Om du ska testa detta, se till att du har docker-compose installerat på din maskin.
Ladda ner Grafana Tempo zip-filen från https://github.com/grafana/tempo.
Extrahera den i hemmappen och navigera till docker-compose-katalogen. Det finns flera exempel på docker-compose. Vi använder exemplet där en applikationsdata lagras lokalt.
cd tempo-master/example/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.
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
Detta startar containers för Grafana, Loki, Tempo, Tempo-query och Prometheus.
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 även gå till din webbläsare och kontrollera att Grafana, Jaeger UI och Prometheus körs.
Den syntetiska lastgeneratorn som körs i en container genererar spår-ID som den matar in i Tempo. Visa loggarna genom att köra kommandot nedan:
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
Detta är spårnings-ID:n som används för att generera spår.
Kopiera ett av spårnings-ID:na och ange det i Jaegers UI sökfält.
Du kan se att spåren relaterade till det angivna spårnings-ID:t har genererats.
Slutsats
Detta är en introduktion till Grafana Tempo. Ta nu chansen att använda Tempo för att generera spår och få en djupare förståelse för mätvärdena och problemen i dina loggar.
Tempo fångar all information, vilket gör att ingen detalj går förlorad på grund av nedsampling. Tempo ger utvecklare och produktionsteam möjlighet att förstå grundorsakerna till de fel eller varningar som kan dyka upp i loggarna.