Pierwsze kroki z Grafana Tempo
Opublikowany: 2021-04-19Nauczmy 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

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-tempoPobierz plik konfiguracyjny Tempo.
[[email protected] ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yamlPoniż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.yamlTeraz 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.yamlKorzystają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.yamlTeraz interfejs użytkownika Jaegera 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ć, i wygeneruje on dla Ciebie ślady.

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.pngUruchom 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 ... doneJak 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_1Możesz także przejść do przeglądarki i sprawdzić, czy Grafana, Jaeger UI, Prometheus są uruchomione.


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_1Są to identyfikatory śladów, które należy przekazać, aby wygenerować ślady.

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

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.
