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.
Table of Contents
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.
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:
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.
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.