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.
Indholdsfortegnelse
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.
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:
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.
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.