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.
Spis treści:
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.