Začínáme s Grafana Tempo

Pojďme se naučit základy Grafana Tempo, distribuovaného trasovacího backendu.

Distribuované trasování je způsob, jak získat jemné informace o výkonu systému. Je to způsob, jak vizualizovat životní cyklus požadavku procházejícího aplikací. Aplikace by se mohla skládat z více služeb přítomných na jednom uzlu nebo distribuovaných mezi uzly.

Takže pomocí distribuovaného trasování můžete získat konsolidovaný pohled na všechny služby. A o tom je Grafana Tempo.

Co je Grafana Tempo?

Letos na konferenci ObservabilityCon došlo k několika významným aktualizacím od Grafana Labs a Grafana Tempo byla jednou z nich. Grafana Labs přidala do svého open source portfolia ještě jeden projekt, „Grafana Tempo“.

Grafana Tempo je open-source distribuovaný trasovací backend, který je vysoce škálovatelný a snadno použitelný. Tempo je zcela kompatibilní s jinými protokoly sledování, jako jsou Zipkin, Jaeger, OpenTelemetry a OpenCensus. V současné době podporuje nástroj pro zjišťování dat Tempo v Loki, monitorovací platformy jako Prometheus a Grafana. Grafana 7.3+ nabízí bezproblémový zážitek mezi Grafanou a Tempem.

Proč používat Tempo?

Tempo se používá ke korelaci metrik, tras a protokolů. Existují situace, kdy uživatel dostane stejný druh chyby vícekrát. Pokud chci pochopit, co se děje, budu se muset podívat na přesné stopy. Ale kvůli převzorkování by se některé cenné informace, které bych možná hledal, ztratily. S Tempo nyní nepotřebujeme převzorkovat distribuovaná data sledování. Můžeme uložit kompletní trasování v objektovém úložišti, jako je S3 nebo GCS, díky čemuž je Tempo velmi nákladově efektivní.

Tempo vám také umožňuje rychlejší ladění/odstraňování problémů tím, že vám umožňuje rychle přejít od metrik k relevantním stopám konkrétních protokolů, které zaznamenaly nějaké problémy.

  12 spolehlivých e-mailových hostingových služeb pro malé i velké firmy

Níže jsou uvedeny možnosti konfigurace používané v Tempo.

  • Distributor: Používají se ke konfiguraci možností příjmu pro příjem spanů a jejich následné odeslání příjemcům.
  • Ingester: Používají se k vytváření dávek tras a odesílá je do TempoDB k uložení.
  • Compactor: Streamuje bloky z úložiště, jako je S3 nebo GCS, kombinuje je a zapisuje zpět do úložiště.
  • Úložiště: Používá se ke konfiguraci TempoDB. V této konfiguraci musíte uvést název backendu úložiště (S3 nebo GCS) s dalšími parametry.
  • Seznam členů: Používá se pro koordinaci mezi komponenty Tempo.
  • Autentizace/Server: Tempo používá Weaveworks/Common server. Slouží k nastavení konfigurace serveru.

Tempo architektura

Výše uvedený diagram ukazuje funkční architekturu Grafana Tempo.

Za prvé, distributor přijímá rozpětí v různých formátech od Zipkin, Jaeger, OpenTelemetry, OpenCensus a odesílá tyto rozpětí příjemcům pomocí hashování ID trasování. Ingester pak vytváří dávky stop, které se nazývají bloky.

Poté tyto bloky odešle do backendového úložiště (S3/GCS). Když máte trasovací ID, které chcete řešit, použijete Grafana UI a umístíte trasovací ID do vyhledávacího pole. Nyní je dotazovač zodpovědný za získání podrobností o vámi zadaném ID trasování z ingesteru nebo objektového úložiště.

Nejprve zkontroluje, zda je toto trasovací ID přítomno v ingesteru; pokud jej nenajde, zkontroluje backend úložiště. K odhalení tras používá jednoduchý koncový bod HTTP. Mezitím kompaktor odebírá bloky ze skladu, kombinuje je a posílá je zpět do úložiště, aby se snížil počet bloků ve skladu.

Nastavení Tempo pomocí Dockeru

V této části nastavím Grafana Tempo krok za krokem pomocí Dockeru. Za prvé, potřebujete backend Tempo, takže nastavte dockerovou síť.

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

Stáhněte si konfigurační soubor Tempo.

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

Níže je uveden seznam možností protokolu, které získáte:

  Proč aplikace mizí z App Store a Play Store?

Protokol
Přístav
Otevřete telemetrii
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411

Pomocí konfiguračního souboru tempa spusťte kontejner dockeru. Tady si vybírám Jáger – Formát Thrift Compact (port 6831) pro odesílání tras.

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

Nyní musíte spustit kontejner dotazu Tempo. Nejprve si tedy stáhněte konfigurační soubor dotazu na tempo.

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

Pomocí konfiguračního souboru dotazu na tempo spusťte kontejner dockeru.

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

Nyní bude uživatelské rozhraní Jaeger přístupné na adrese http://localhost:16686, jak je uvedeno níže.

Do vyhledávacího pole můžete přidat ID trasování z protokolu, který chcete odstraňovat, a vygeneruje trasování za vás.

Spuštění ukázkové aplikace na Tempo

Je čas spustit ukázkový příklad, který uvádí Grafana Tempo. Spustím příklad docker-compose, takže pokud zkoušíte totéž, musíte mít na svém počítači nainstalováno docker-compose.

Stáhněte si zip soubor Grafana Tempo: https://github.com/grafana/tempo

Rozbalte jej do domovské složky a přejděte do adresáře docker-compose. Najdete zde několik příkladů docker-compose; Používám příklad, kde jsou data aplikace uložena lokálně.

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

Spuštěním příkazu níže spusťte zásobník.

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

Můžete vidět, že spustil kontejnery pro Grafana, Loki, Tempo, Tempo-query a 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

Můžete také přejít do svého prohlížeče a ověřit, zda běží Grafana, Jaeger UI, Prometheus.

  Jak nahrát více souborů do Dropboxu najednou pomocí iPhone nebo iPad

Syntetický-load-generátor běžící uvnitř kontejneru nyní generuje ID trasování, které vkládá do tempa. Spusťte níže uvedený příkaz a můžete zobrazit protokoly.

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

Toto jsou ID trasování, která musíte předat, abyste mohli generovat trasování.

Kopíruji jedno z ID trasování a vkládám ho do vyhledávacího panelu uživatelského rozhraní Jaeger.

Můžete vidět, že úspěšně vygeneroval trasování související s ID trasování, které jsem poskytl.

Závěr

Takže to bylo o Grafana Tempo vše. Pokračujte a začněte používat Tempo ke generování tras, abyste podrobně porozuměli metrikám a problémům ve vašich protokolech.

Všechno je zachyceno v Tempu a díky downsamplingu, ke kterému dříve docházelo, nepřijdete o žádný detail. Tempo je pro vývojářský nebo produkční tým jednoduché, aby pochopil hlavní příčinu chyb nebo varování, které se mohou v protokolech objevit.