Kom godt i gang med Grafana Tempo

Lad os lære det grundlæggende i Grafana Tempo, en distribueret sporings-backend.

Distribueret sporing er vejen til at få finmasket information om systemets ydeevne. Det er en måde at visualisere livscyklussen for en anmodning, der passerer gennem applikationen. Applikationen kan bestå af flere tjenester til stede på en enkelt knude eller fordelt på tværs af knudepunkter.

Så ved at bruge distribueret sporing kan du få et samlet overblik over alle tjenesterne. Og Grafana Tempo handler om det.

Hvad er Grafana Tempo?

Der var nogle store opdateringer fra Grafana Labs på ObservabilityCon-konferencen i år, og Grafana Tempo var en af ​​dem. Grafana Labs har tilføjet endnu et projekt, “Grafana Tempo”, til deres open source-portefølje.

Grafana Tempo er en open source distribueret sporingsbackend, der er meget skalerbar og nem at bruge. Tempo er fuldstændig kompatibel med andre sporingsprotokoller såsom Zipkin, Jaeger, OpenTelemetry og OpenCensus. I øjeblikket understøtter den Tempo-dataopdagelsesmotoren i Loki, overvågningsplatforme som Prometheus og Grafana. Grafana 7.3+ tilbyder en problemfri oplevelse mellem Grafana og Tempo.

Hvorfor bruge Tempo?

Tempo bruges til at korrelere metrik, spor og logfiler. Der er situationer, hvor en bruger får den samme type fejl flere gange. Hvis jeg vil forstå, hvad der sker, bliver jeg nødt til at se på de nøjagtige spor. Men på grund af downsampling ville nogle værdifulde oplysninger, som jeg måske leder efter, være gået tabt. Med Tempo behøver vi nu ikke downsample distribuerede sporingsdata. Vi kan gemme hele sporet i objektlager som S3 eller GCS, hvilket gør Tempo meget omkostningseffektivt.

Tempo giver dig også mulighed for hurtigere debugging/fejlfinding ved hurtigt at tillade dig at flytte fra metrikker til de relevante spor af de specifikke logfiler, der har registreret nogle problemer.

  Sådan overfører du videoer til en iPad

Nedenfor er de konfigurationsmuligheder, der bruges i Tempo.

  • Distributør: Disse bruges til at konfigurere modtagemuligheder til at modtage spænd og derefter sende dem til indtagerne.
  • Indlæser: Disse bruges til at oprette partier af spor og sender dem til TempoDB til opbevaring.
  • Kompaktor: Den streamer blokke fra lageret, såsom S3 eller GCS, kombinerer dem og skriver dem tilbage til lageret.
  • Lager: Dette bruges til at konfigurere TempoDB. Du skal nævne lagerbackend-navnet (S3 eller GCS) med andre parametre i denne konfiguration.
  • Medlemsliste: Den bruges til koordinering mellem Tempo-komponenter.
  • Autentificering/Server: Tempo bruger Weaveworks/Common server. Det bruges til at indstille serverkonfigurationer.

Tempo arkitektur

Ovenstående diagram viser arbejdsarkitekturen i Grafana Tempo.

For det første modtager distributøren spænd i forskellige formater fra Zipkin, Jaeger, OpenTelemetry, OpenCensus og sender disse spænd til indlæsere ved at hashe sporings-id’et. Ingester opretter derefter partier af spor, som kaldes blokke.

Derefter sender den disse blokke til backend-lageret (S3/GCS). Når du har et sporings-id, som du vil fejlfinde, skal du bruge Grafana UI og sætte sporings-id’et i søgefeltet. Nu er querier ansvarlig for at hente detaljerne fra enten indlæser eller objektlager om det sporings-id, du har indtastet.

For det første tjekker den, om dette spor-id er til stede i indtageren; hvis den ikke finder den, tjekker den derefter lagerbackend. Den bruger et simpelt HTTP-endepunkt til at afsløre sporene. I mellemtiden tager komprimatoren blokkene fra lageret, kombinerer dem og sender dem tilbage til lageret for at reducere antallet af blokke i lageret.

Indstil Tempo ved hjælp af Docker

I dette afsnit vil jeg konfigurere Grafana Tempo trin-for-trin ved hjælp af Docker. For det første har du brug for en Tempo-backend, så opret et docker-netværk.

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

Download Tempo-konfigurationsfilen.

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

Nedenfor er listen over protokolindstillinger, du får:

  Sådan bruger du en Zoom-mødekode til at deltage i et møde

Protokol
Havn
Åbn Telemetri
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binær
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411

Brug tempokonfigurationsfilen til at køre en docker-container. Her vælger jeg Jaeger – Thrift Compact-format (port 6831) til at sende sporene.

[[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 skal du køre en Tempo-forespørgselscontainer. Så download først tempoforespørgselskonfigurationsfilen.

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

Kør en docker-container ved hjælp af tempoforespørgselskonfigurationsfilen.

[[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 vil Jaeger UI være tilgængelig på http://localhost:16686, som vist nedenfor.

I søgefeltet kan du tilføje sporings-id’et fra en log, som du vil fejlfinde, og det vil generere sporene for dig.

Kørsel af en demoapplikation på Tempo

Det er tid til at køre et demoeksempel givet af Grafana Tempo. Jeg vil køre et docker-compose eksempel, så hvis du prøver det samme, skal du have docker-compose installeret på din maskine.

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

Udpak det i hjemmemappen og gå til docker-compose-mappen. Du vil finde flere eksempler på docker-compose; Jeg bruger eksemplet, hvor en applikations data gemmes 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 kommandoen nedenfor for at starte stakken.

[[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 startet containere til Grafana, Loki, Tempo, Tempo-query og 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 også gå til din browser og kontrollere, om Grafana, Jaeger UI, Prometheus kører.

  Sådan får du et billigt SSL-certifikat fra SSLS.COM [+ 7 Alternatives]

Nu genererer syntetisk-load-generator, der kører inde i en container, spor-id’er, som den sætter i tempo. Kør kommandoen nedenfor, og du kan se logfilerne.

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

Dette er de sporings-id’er, som du skal sende for at generere spor.

Jeg kopierer et af sporings-id’erne og sætter det i Jaeger UI-søgelinjen.

Du kan se, at det med succes har genereret sporene relateret til det sporings-id, jeg har angivet.

Konklusion

Så det var alt om Grafana Tempo. Gå videre og begynd at bruge Tempo til at generere spor for at forstå metrik og problemer i dine logfiler i detaljer.

Alt bliver fanget i Tempo, og du vil ikke gå glip af nogen detaljer på grund af downsampling, som plejede at ske tidligere. Tempo er ligetil for en udvikler eller et produktionsteam at forstå årsagen til de fejl eller advarsler, der kan opstå i logfilerne.