Pierwsze kroki z Grafana Tempo

Opublikowany: 2021-04-19

Nauczmy się podstaw Grafana Tempo, rozproszonego zaplecza śledzenia.

Śledzenie rozproszone to sposób na uzyskanie szczegółowych informacji o wydajności systemu. Jest to sposób na wizualizację cyklu życia żądania przechodzącego przez aplikację. Aplikacja może składać się z wielu usług obecnych w jednym węźle lub rozproszonych między węzłami.

Tak więc, korzystając z rozproszonego śledzenia, możesz uzyskać skonsolidowany widok wszystkich usług. I właśnie o to chodzi w Grafana Tempo.

Co to jest tempo Grafana?

Na tegorocznej konferencji ObservabilityCon pojawiło się kilka ważnych aktualizacji z Grafana Labs, a Grafana Tempo było jednym z nich. Grafana Labs dodało jeszcze jeden projekt, „Grafana Tempo”, do swojego portfolio open source.

Grafana Tempo to rozproszony backend śledzący typu open source, który jest wysoce skalowalny i łatwy w użyciu. Tempo jest w pełni kompatybilne z innymi protokołami śledzenia, takimi jak Zipkin, Jaeger, OpenTelemetry i OpenCensus. Obecnie obsługuje silnik wykrywania danych Tempo w Loki, monitorując platformy takie jak Prometheus i Grafana. Grafana 7.3+ oferuje płynne działanie między Grafaną a Tempo.

Dlaczego warto korzystać z Tempo?

Tempo służy do korelowania metryk, śladów i dzienników. Istnieją sytuacje, w których użytkownik wielokrotnie otrzymuje ten sam rodzaj błędu. Jeśli chcę zrozumieć, co się dzieje, będę musiał przyjrzeć się dokładnym śladom. Ale z powodu downsamplingu niektóre cenne informacje, których mógłbym szukać, zostałyby utracone. Dzięki Tempo nie musimy teraz próbkować w dół rozproszonych danych śledzenia. Możemy przechowywać kompletny ślad w obiektowej pamięci masowej, takiej jak S3 lub GCS, dzięki czemu Tempo jest bardzo opłacalne.

Ponadto Tempo umożliwia szybsze debugowanie/rozwiązywanie problemów, umożliwiając szybkie przejście od metryk do odpowiednich śladów określonych dzienników, w których odnotowano pewne problemy.

Poniżej znajdują się opcje konfiguracyjne używane w Tempo.

  • Dystrybutor : służą do konfigurowania opcji odbierania w celu odbierania zakresów, a następnie wysyłania ich do podmiotów przetwarzających.
  • Ingester : są używane do tworzenia partii śladów i wysyłania ich do TempoDB w celu przechowywania.
  • Kompaktor : przesyła strumieniowo bloki z pamięci masowej, takiej jak S3 lub GCS, łączy je i zapisuje z powrotem w pamięci masowej.
  • Przechowywanie : służy do konfigurowania TempoDB. W tej konfiguracji musisz podać nazwę zaplecza pamięci (S3 lub GCS) wraz z innymi parametrami.
  • Lista członków : Służy do koordynacji między komponentami Tempo.
  • Uwierzytelnianie/serwer : Tempo używa serwera Weaveworks/Common. Służy do ustawiania konfiguracji serwera.

Architektura Tempo

architektura tempa

Powyższy diagram przedstawia działającą architekturę Grafana Tempo.

Po pierwsze, dystrybutor otrzymuje spas w różnych formatach od Zipkin, Jaeger, OpenTelemetry, OpenCensus i wysyła te spans do podmiotów przetwarzających, haszując identyfikator śledzenia. Ingester następnie tworzy partie śladów, które nazywane są blokami.

Następnie wysyła te bloki do pamięci wewnętrznej (S3/GCS). Gdy masz identyfikator śledzenia, który chcesz rozwiązać, użyjesz interfejsu użytkownika Grafana i umieścisz identyfikator śledzenia w pasku wyszukiwania. Teraz kwerenda jest odpowiedzialna za pobranie szczegółów z pamięci przetwarzania lub magazynu obiektów na temat wprowadzonego identyfikatora śledzenia.

Po pierwsze, sprawdza, czy ten identyfikator śledzenia jest obecny w przetwarzaniu; jeśli go nie znajdzie, sprawdza zaplecze pamięci masowej. Używa prostego punktu końcowego HTTP do ujawnienia śladów. W międzyczasie zagęszczarka pobiera bloki z magazynu, łączy je i odsyła z powrotem do magazynu, aby zmniejszyć liczbę bloków w magazynie.

Skonfiguruj tempo za pomocą Dockera

W tej sekcji krok po kroku skonfiguruję Grafana Tempo za pomocą Dockera. Po pierwsze, potrzebujesz zaplecza Tempo, więc skonfiguruj sieć dockera.

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

Pobierz plik konfiguracyjny Tempo.

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

Poniżej znajduje się lista dostępnych opcji protokołu:

Protokół Port
Otwórz telemetrię 55680
Jaeger – Thrift Compact 6831
Jaeger – Oszczędny Binary 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

Korzystając z pliku konfiguracyjnego tempa, uruchom kontener dockera. Tutaj wybieram format Jaeger – Thrift Compact (port 6831) do wysyłania śladów.

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

Teraz musisz uruchomić kontener zapytań Tempo. Więc najpierw pobierz plik konfiguracyjny zapytania tempa.

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

Korzystając z pliku konfiguracyjnego zapytania tempa, uruchom kontener dockera.

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

Teraz interfejs użytkownika Jaegera będzie dostępny pod adresem http://localhost:16686 , jak pokazano poniżej.

jaeger ui - geekflare

Na pasku wyszukiwania możesz dodać identyfikator śledzenia z dziennika, który chcesz rozwiązać, i wygeneruje on dla Ciebie ślady.

traceid - nowy

Uruchamianie aplikacji demonstracyjnej na Tempo

Czas uruchomić przykład demo podany przez Grafana Tempo. Uruchomię przykład docker-compose, więc jeśli próbujesz tego samego, musisz mieć zainstalowany docker-compose na swoim komputerze.

Pobierz plik zip Grafana Tempo: https://github.com/grafana/tempo

Wypakuj go do folderu domowego i przejdź do katalogu docker-compose. Znajdziesz wiele przykładów docker-compose; Używam przykładu, w którym dane aplikacji są przechowywane lokalnie.

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

Uruchom poniższe polecenie, aby uruchomić stos.

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

Jak widać, uruchomiono kontenery dla Grafana, Loki, Tempo, Tempo-query i 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

Możesz także przejść do przeglądarki i sprawdzić, czy Grafana, Jaeger UI, Prometheus są uruchomione.

grafana

prometeusz

Teraz generator obciążenia syntetycznego działający wewnątrz kontenera generuje identyfikatory śladów, które umieszcza w tempie. Uruchom poniższe polecenie, aby wyświetlić dzienniki.

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

Są to identyfikatory śladów, które należy przekazać, aby wygenerować ślady.

ślady nowe

Kopiuję jeden z identyfikatorów śledzenia i umieszczam go w pasku wyszukiwania Jaeger UI.

traceid

Widać, że pomyślnie wygenerował ślady związane z podanym przeze mnie identyfikatorem śledzenia.

Wniosek

Więc na tym polegało Grafana Tempo. Śmiało i zacznij używać Tempo do generowania śladów, aby szczegółowo zrozumieć metryki i problemy w dziennikach.

Wszystko jest rejestrowane w Tempo i nie przegapisz żadnego szczegółu z powodu downsamplingu, który miał miejsce wcześniej. Tempo jest proste dla programistów lub zespołu produkcyjnego, aby zrozumieć podstawową przyczynę błędów lub ostrzeżeń, które mogą wystąpić w dziennikach.