Začínáme s Grafana Tempo

Photo of author

By etechblogcz

Pojďme prozkoumat základy Grafana Tempo, což je distribuovaný backend pro sledování tras.

Distribuované sledování tras představuje metodu, jak detailně monitorovat výkon systému. Umožňuje vizualizovat životní cyklus požadavku v rámci celé aplikace. Aplikace se může skládat z mnoha služeb, které mohou být umístěny na jednom serveru nebo distribuovány mezi různými servery.

Díky distribuovanému sledování získáte ucelený přehled o všech službách. A právě k tomu slouží Grafana Tempo.

Co je Grafana Tempo?

Na konferenci ObservabilityCon byly představeny významné novinky od Grafana Labs a Grafana Tempo byla jednou z nich. Grafana Labs tímto rozšířila své portfolio o další open-source projekt, a to „Grafana Tempo“.

Grafana Tempo je open-source distribuovaný trasovací backend s vysokou škálovatelností a snadným použitím. Je plně kompatibilní s jinými sledovacími protokoly, jako jsou Zipkin, Jaeger, OpenTelemetry a OpenCensus. V současnosti podporuje Tempo nástroje pro vyhledávání dat v Loki, platformy pro monitorování jako Prometheus a Grafana. Grafana 7.3 a novější verze nabízejí plynulou integraci mezi Grafanou a Tempem.

Proč používat Tempo?

Tempo se používá pro korelaci metrik, tras a logů. Často se stává, že uživatel opakovaně obdrží stejný typ chyby. Pokud chceme porozumět tomu, co se děje, potřebujeme se podívat na přesné trasy. Avšak z důvodu převzorkování se mohou některé důležité informace ztratit. S Tempem není nutné převzorkování distribuovaných dat sledování. Můžeme ukládat kompletní trasy do objektového úložiště, jako je S3 nebo GCS, což činí Tempo velmi nákladově efektivním.

Tempo také zrychluje ladění a odstraňování problémů díky možnosti rychlého přechodu od metrik k relevantním trasám a konkrétním logům, které zaznamenaly problémy.

Níže jsou uvedeny možnosti konfigurace používané v Tempu:

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

Architektura Tempo

Výše uvedený diagram znázorňuje funkční architekturu Grafana Tempo.

Distributor primárně přijímá rozpětí v různých formátech od Zipkin, Jaeger, OpenTelemetry, OpenCensus a odesílá tato rozpětí příjemcům pomocí hashování ID trasy. Následně Ingester vytváří dávky stop, které se nazývají bloky.

Tyto bloky jsou poté odeslány do backendového úložiště (S3/GCS). Pokud chcete dohledat konkrétní trasovací ID, použijete Grafana UI a ID trasy zadáte do vyhledávacího pole. Dotazovač je zodpovědný za získání detailů o zadaném ID trasy z ingesteru nebo z objektového úložiště.

Nejdříve se ověří, zda je trasovací ID přítomno v ingesteru, a pokud se tam nenajde, zkontroluje se backendové úložiště. K zobrazení tras se využívá jednoduchý HTTP koncový bod. Mezitím kompaktor stahuje bloky z úložiště, spojuje je a posílá zpět do úložiště, čímž snižuje počet bloků v úložišti.

Nastavení Tempo pomocí Dockeru

V této části si krok za krokem ukážeme nastavení Grafana Tempo za použití Dockeru. Nejprve potřebujeme backend Tempo, proto vytvoříme dockerovou síť.

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

Stáhneme si konfigurační soubor pro Tempo.

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

Níže naleznete seznam možností protokolu, které jsou k dispozici:

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

Pomocí konfiguračního souboru Tempo spustíme docker kontejner. Vybereme formát Jaeger – 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í je potřeba spustit kontejner pro dotazy na Tempo. Nejdříve si proto stáhněte konfigurační soubor pro dotazy na Tempo.

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

S pomocí konfiguračního souboru pro dotazy na Tempo spusťte docker kontejner.

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

Uživatelské rozhraní Jaeger bude dostupné na adrese http://localhost:16686, jak je zobrazeno níže.

Do vyhledávacího pole můžete vložit ID trasy z logu, kterou chcete odstraňovat, a vygeneruje se pro vás trasování.

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

Nyní je čas spustit ukázkovou aplikaci, která demonstruje Grafana Tempo. Spustíme příklad docker-compose, proto je nutné mít nainstalovaný docker-compose.

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

Rozbalte jej do vaší domovské složky a přejděte do adresáře docker-compose. Zde najdete několik příkladů docker-compose. My použijeme příklad, kde jsou data aplikace ukládána 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 níže uvedeného příkazu spustíte celý stack.

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

Vidíte, že se spustily kontejnery pro Grafanu, 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

V prohlížeči si také můžete ověřit, zda běží Grafana, Jaeger UI a Prometheus.

Syntetický generátor zátěže běžící uvnitř kontejneru nyní generuje ID tras, které vkládá do Tempo. Spuštěním příkazu níže si můžete zobrazit logy.

[[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 trasy, které potřebujete zadat pro vygenerování trasování.

Zkopírujeme jedno z ID tras a vložíme ho do vyhledávacího panelu Jaeger UI.

Vidíte, že se úspěšně vygenerovalo trasování související s ID, které bylo zadáno.

Závěr

Tímto jsme probrali základy Grafana Tempo. Nyní můžete začít s generováním tras a detailněji porozumět metrikám a problémům ve vašich logách.

V Tempu je zachyceno vše a díky tomu se již neztratí žádný detail způsobený downsamplingem. Tempo umožňuje vývojářským a produkčním týmům snadno porozumět hlavním příčinám chyb nebo varování, které se mohou v logách objevit.