Grafana Tempo: Distribuert sporing for effektiv feilsøking

Utforsk de grunnleggende funksjonene til Grafana Tempo

La oss fordype oss i den essensielle forståelsen av Grafana Tempo, et system for distribuert sporing.

Distribuert sporing gir mulighet for grundig innsikt i systemets ytelse. Det visualiserer livssyklusen til en forespørsel som beveger seg gjennom applikasjonen, som kan bestå av flere tjenester, enten på en enkelt node eller distribuert over flere noder.

Ved hjelp av distribuert sporing kan man få en samlet oversikt over alle tjenestene. Det er kjernen i hva Grafana Tempo tilbyr.

Hva er Grafana Tempo?

Grafana Labs presenterte flere viktige oppdateringer under ObservabilityCon-konferansen i år, og Grafana Tempo var en av dem. Grafana Labs har utvidet sin portefølje av åpen kildekode-prosjekter med «Grafana Tempo».

Grafana Tempo er et åpen kildekode-basert system for distribuert sporing. Det er svært skalerbart og lett å bruke. Tempo er fullstendig kompatibel med andre sporingsprotokoller, som Zipkin, Jaeger, OpenTelemetry og OpenCensus. For øyeblikket integreres det med Tempo-dataoppdagelsesmotoren i Loki, samt overvåkingsplattformer som Prometheus og Grafana. Grafana 7.3+ gir en sømløs opplevelse mellom Grafana og Tempo.

Hvorfor velge Tempo?

Tempo er et nyttig verktøy for å korrelere metrikker, spor og logger. Noen ganger kan brukere oppleve samme type feil gjentatte ganger. For å forstå hva som skjer, må man undersøke de spesifikke sporene. Men på grunn av nedsampling kan verdifull informasjon gå tapt. Med Tempo er det ikke lenger nødvendig å nedsample distribuerte sporingsdata. Man kan lagre hele sporet i objektlagring, som S3 eller GCS, noe som gjør Tempo svært kostnadseffektivt.

Tempo muliggjør også raskere feilsøking ved raskt å navigere fra beregninger til de relevante sporene i loggene der problemer er registrert.

Her er konfigurasjonsalternativene som brukes i Tempo:

  • Distributør: Konfigurerer mottak av spenn og sender dem videre til inntakere.
  • Ingester: Oppretter grupper av spor og sender dem til TempoDB for lagring.
  • Kompaktor: Strømmer blokker fra lagring som S3 eller GCS, kombinerer dem og lagrer dem tilbake.
  • Lagring: Konfigurerer TempoDB. Angi lagringsbackend (S3 eller GCS) og andre parametere her.
  • Medlemsliste: Brukes for koordinering mellom Tempo-komponenter.
  • Autentisering/server: Tempo bruker Weaveworks/Common server for serverkonfigurasjoner.

Arkitektur i Tempo

Diagrammet over illustrerer hvordan Grafana Tempo fungerer.

Distributøren mottar spenn i ulike formater fra Zipkin, Jaeger, OpenTelemetry og OpenCensus, og sender dem videre til inntakere ved å hashe sporings-ID-en. Inntakere grupperer deretter sporene i såkalte blokker.

Disse blokkene sendes til backend-lagring (S3/GCS). Ved feilsøking av en sporings-ID brukes Grafana-grensesnittet for å søke etter denne ID-en. Spørringsmodulen henter detaljer om sporings-ID-en fra enten inntakeren eller objektlagringen.

Først sjekkes inntakeren. Hvis sporings-ID-en ikke finnes der, sjekkes lagringsbackend. Sporene gjøres tilgjengelig via et enkelt HTTP-endepunkt. Samtidig henter komprimatoren blokker fra lageret, kombinerer dem og lagrer dem tilbake for å redusere antall blokker i lageret.

Konfigurer Tempo med Docker

Her vil vi veilede deg trinnvis i oppsettet av Grafana Tempo ved hjelp av Docker. Først trenger du en Tempo-backend, så opprett et Docker-nettverk.

docker network create docker-tempo

Last ned Tempo-konfigurasjonsfilen:

curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml

Her er en oversikt over de tilgjengelige protokollalternativene:

Protokoll Port
Open Telemetry 55680
Jaeger – Thrift Compact 6831
Jaeger – Thrift Binary 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

Bruk tempo-konfigurasjonsfilen til å starte en Docker-container. Her velger vi Jaeger – Thrift Compact-format (port 6831) for å sende sporene.

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 starte en Tempo-spørringscontainer. Last ned konfigurasjonsfilen for tempospørringen.

curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

Bruk den nedlastede konfigurasjonsfilen til å starte en Docker-container for spørringer.

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

Jaeger-grensesnittet er nå tilgjengelig på http://localhost:16686.

I søkefeltet kan du angi sporings-ID-er fra logger for feilsøking, og systemet vil generere tilhørende spor.

Kjør en demoapplikasjon på Tempo

Nå skal vi kjøre et demoeksempel levert av Grafana Tempo. Vi skal bruke en Docker Compose-eksempel, så pass på at du har 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 finner flere Docker Compose-eksempler. Vi bruker et eksempel der applikasjonsdata lagres 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

Kjør følgende kommando for å starte systemet.

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 ser at det er startet containere for Grafana, Loki, Tempo, Tempo-query og 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 også sjekke i nettleseren om Grafana, Jaeger UI og Prometheus kjører.

Den syntetiske lastgeneratoren, som kjører i en egen container, genererer sporings-ID-er som legges inn i Tempo. Se loggene ved å kjøre følgende kommando:

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 som brukes til å generere spor.

Kopier en av sporings-ID-ene og lim den inn i søkefeltet i Jaeger UI.

Du vil nå se sporene generert for den oppgitte sporings-ID-en.

Oppsummering

Dette gir deg en innføring i Grafana Tempo. Kom i gang med å bruke Tempo for å generere spor som gir detaljert innsikt i metrikker og loggproblemer.

Med Tempo blir alt fanget opp, og du unngår å miste detaljer på grunn av nedsampling, som tidligere var et problem. Tempo gjør det enklere for utviklere og driftsteam å identifisere årsakene til feil og advarsler i loggene.