Komme i gang med Grafana Tempo

La oss lære det grunnleggende om Grafana Tempo, en distribuert sporingsbackend.

Distribuert sporing er måten å få finmasket informasjon om systemytelse på. Det er en måte å visualisere livssyklusen til en forespørsel som går gjennom applikasjonen. Applikasjonen kan bestå av flere tjenester tilstede på en enkelt node eller fordelt på tvers av noder.

Så ved å bruke distribuert sporing kan du få en konsolidert oversikt over alle tjenestene. Og Grafana Tempo handler om det.

Hva er Grafana Tempo?

Det var noen store oppdateringer fra Grafana Labs på ObservabilityCon-konferansen i år, og Grafana Tempo var en av dem. Grafana Labs har lagt til et prosjekt til, «Grafana Tempo,» til deres åpen kildekode-portefølje.

Grafana Tempo er en åpen kildekode distribuert sporing backend som er svært skalerbar og enkel å bruke. Tempo er fullstendig kompatibel med andre sporingsprotokoller som Zipkin, Jaeger, OpenTelemetry og OpenCensus. For øyeblikket støtter den Tempo-dataoppdagingsmotoren i Loki, overvåkingsplattformer som Prometheus og Grafana. Grafana 7.3+ tilbyr en sømløs opplevelse mellom Grafana og Tempo.

Hvorfor bruke Tempo?

Tempo brukes til å korrelere metrikkene, sporene og loggene. Det er situasjoner der en bruker får samme type feil flere ganger. Hvis jeg vil forstå hva som skjer, må jeg se på de eksakte sporene. Men på grunn av nedsampling ville noe verdifull informasjon som jeg kanskje ser etter, ha gått tapt. Med Tempo trenger vi nå ikke nedsample distribuerte sporingsdata. Vi kan lagre hele sporet i objektlagring som S3 eller GCS, noe som gjør Tempo svært kostnadseffektivt.

Tempo gir deg også raskere feilsøking/feilsøking ved å raskt la deg gå fra beregninger til relevante spor av de spesifikke loggene som har registrert noen problemer.

  11 digitale markedsføringsverktøy for å øke engasjement og inntekter

Nedenfor er konfigurasjonsalternativene som brukes i Tempo.

  • Distributør: Disse brukes til å konfigurere mottaksalternativer for å motta spenn og deretter sende dem til inntakerne.
  • Ingester: Disse brukes til å lage grupper med spor og sender dem til TempoDB for lagring.
  • Kompaktor: Den strømmer blokker fra lagringen som S3 eller GCS, kombinerer dem og skriver dem tilbake til lagringen.
  • Lagring: Dette brukes til å konfigurere TempoDB. Du må nevne lagringsbackend-navnet (S3 eller GCS) med andre parametere i denne konfigurasjonen.
  • Medlemsliste: Den brukes til koordinering mellom Tempo-komponenter.
  • Autentisering/server: Tempo bruker Weaveworks/Common server. Den brukes til å angi serverkonfigurasjoner.

Tempo arkitektur

Diagrammet ovenfor viser arbeidsarkitekturen til Grafana Tempo.

For det første mottar distributøren spenn i forskjellige formater fra Zipkin, Jaeger, OpenTelemetry, OpenCensus og sender disse spennene til inntakere ved å hashe sporings-IDen. Ingester lager deretter grupper med spor som kalles blokker.

Deretter sender den disse blokkene til backend-lagringen (S3/GCS). Når du har en sporings-ID som du vil feilsøke, bruker du Grafana UI og legger sporings-IDen i søkefeltet. Nå er querier ansvarlig for å hente detaljene fra enten inntager eller objektlagring om sporings-IDen du skrev inn.

For det første sjekker den om denne sporings-ID-en er til stede i inntakeren; hvis den ikke finner den, sjekker den lagringsstøtten. Den bruker et enkelt HTTP-endepunkt for å avsløre sporene. I mellomtiden tar komprimatoren blokkene fra lageret, kombinerer dem og sender dem tilbake til lageret for å redusere antall blokker i lageret.

Sett opp Tempo ved hjelp av Docker

I denne delen vil jeg sette opp Grafana Tempo trinn-for-trinn ved hjelp av Docker. For det første trenger du en Tempo-backend, så sett opp et docker-nettverk.

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

Last ned Tempo-konfigurasjonsfilen.

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

Nedenfor er listen over protokollalternativer du får:

  Hvordan sende høykvalitetsbilder på nettet

Protokoll
Havn
Åpne Telemetri
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411

Bruk tempokonfigurasjonsfilen til å kjøre en docker-beholder. Her velger jeg Jaeger – Thrift Compact-format (port 6831) for å 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

Nå må du kjøre en Tempo-spørringsbeholder. Så først, last ned konfigurasjonsfilen for tempospørringen.

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

Bruk konfigurasjonsfilen for tempospørringen til å kjøre en docker-beholder.

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

Nå vil Jaeger-grensesnittet være tilgjengelig på http://localhost:16686, som vist nedenfor.

I søkefeltet kan du legge til sporings-ID fra en logg som du vil feilsøke, og den vil generere sporene for deg.

Kjøre en demoapplikasjon på Tempo

Det er på tide å kjøre et demoeksempel gitt av Grafana Tempo. Jeg vil kjøre et docker-compose eksempel, så hvis du prøver det samme, må du ha docker-compose installert på maskinen din.

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

Pakk den ut i hjemmemappen og gå til docker-compose-katalogen. Du vil finne flere eksempler på docker-compose; Jeg bruker eksempelet der en applikasjons data lagres 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

Kjør kommandoen nedenfor for å starte stabelen.

[[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, den har startet containere for 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 nettleseren din og bekrefte om Grafana, Jaeger UI, Prometheus kjører.

  10 dedikerte AMD-serverhosting for bedriftsapplikasjonene dine

Nå genererer syntetisk lastgenerator som kjører inne i en container sporings-IDer som den legger inn i tempo. Kjør kommandoen nedenfor, og du kan se loggene.

[[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 sporings-ID-ene du må sende for å generere spor.

Jeg kopierer en av sporings-ID-ene og legger den i søkefeltet i Jaeger UI.

Du kan se at den har generert sporene relatert til sporings-IDen jeg oppga.

Konklusjon

Så det var alt om Grafana Tempo. Gå videre og begynn å bruke Tempo for å generere spor for å forstå beregningene og problemene i loggene dine i detalj.

Alt blir fanget opp i Tempo, og du vil ikke gå glipp av noen detaljer på grunn av nedsampling, som pleide å skje tidligere. Tempo er enkelt for en utvikler eller et produksjonsteam å forstå årsaken til feilene eller advarslene som kan oppstå i loggene.