Pierwsze kroki z Grafana Tempo

Poznajmy podstawy Grafana Tempo, rozproszonego zaplecza śledzenia.

Rozproszone śledzenie 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 w węzłach.

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

Co to jest Grafana Tempo?

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

Grafana Tempo to rozproszone zaplecze śledzące o otwartym kodzie źródłowym, które jest wysoce skalowalne i łatwe 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, platformy monitorujące takie jak Prometheus i Grafana. Grafana 7.3+ oferuje bezproblemowe korzystanie z Grafana i Tempo.

Dlaczego warto używać 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, muszę przyjrzeć się dokładnym śladom. Ale z powodu downsamplingu niektóre cenne informacje, których być może szukałem, zostałyby utracone. Dzięki Tempo nie musimy teraz zmniejszać próbkowania rozproszonych danych śledzenia. Możemy przechowywać cały ś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, które zarejestrowały pewne problemy.

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

  • Dystrybutor: Służą do konfigurowania opcji odbierania w celu otrzymywania zakresów, a następnie wysyłania ich do podmiotów przetwarzających.
  • Ingester: Służą do tworzenia partii śladów i wysyłania ich do TempoDB w celu przechowywania.
  • Compactor: Przesyła strumieniowo bloki z magazynu, takiego jak S3 lub GCS, łączy je i zapisuje z powrotem do magazynu.
  • Przechowywanie: służy do konfigurowania TempoDB. Musisz podać nazwę zaplecza magazynu (S3 lub GCS) wraz z innymi parametrami w tej konfiguracji.
  • 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 tempa

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

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

Następnie wysyła te bloki do magazynu zaplecza (S3/GCS). Gdy masz identyfikator śledzenia, z którym chcesz rozwiązać problem, użyjesz interfejsu użytkownika Grafana i umieścisz identyfikator śledzenia w pasku wyszukiwania. Teraz querier jest odpowiedzialny za pobranie szczegółowych informacji o wprowadzonym identyfikatorze śledzenia z pamięci masowej lub obiektowej.

Najpierw sprawdza, czy ten identyfikator śledzenia jest obecny w przetwarzaniu; jeśli go nie znajdzie, sprawdza zaplecze magazynu. Używa prostego punktu końcowego HTTP do ujawnienia śladów. Tymczasem kompaktor 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 skonfiguruję Grafana Tempo krok po kroku za pomocą Dockera. Po pierwsze, potrzebujesz zaplecza Tempo, więc skonfiguruj sieć dokerów.

[[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łów:

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

Korzystając z pliku konfiguracyjnego tempa, uruchom kontener dokera. Tutaj wybieram Jaeger – Format 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. 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 dokera.

[[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 Jaeger będzie dostępny pod adresem http://localhost:16686, jak pokazano poniżej.

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

Uruchamianie aplikacji demonstracyjnej w Tempo

Czas uruchomić przykład demo podany przez Grafana Tempo. Uruchomię przykład tworzenia dokerów, więc jeśli próbujesz tego samego, musisz mieć zainstalowane dokowanie 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ć, uruchomił 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 działają Grafana, Jaeger UI, Prometheus.

Teraz syntetyczny generator obciążenia działający w kontenerze generuje identyfikatory śledzenia, 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 śledzenia, które należy przekazać, aby wygenerować ślady.

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

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

Wniosek

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

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