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.