Zapoznajmy się z fundamentami Grafana Tempo, zdecentralizowanego systemu do śledzenia procesów.
Śledzenie rozproszone jest techniką pozwalającą na dogłębne analizowanie efektywności działania systemów. Umożliwia wizualizację ścieżki, jaką pokonuje żądanie w ramach aplikacji. Taka aplikacja może składać się z wielu usług, które funkcjonują na jednym serwerze lub są rozproszone na różnych maszynach.
Dzięki śledzeniu rozproszonemu, zyskujemy ujednolicony obraz wszystkich tych usług. To właśnie jest esencją Grafana Tempo.
Czym jest Grafana Tempo?
Podczas tegorocznej konferencji ObservabilityCon, Grafana Labs zaprezentowała szereg istotnych nowości, w tym Grafana Tempo. Ten projekt dołączył do grona otwartych rozwiązań oferowanych przez Grafana Labs.
Grafana Tempo to otwarte oprogramowanie do rozproszonego śledzenia, które wyróżnia się wysoką skalowalnością i łatwością obsługi. Jest w pełni kompatybilne z innymi protokołami śledzenia, takimi jak Zipkin, Jaeger, OpenTelemetry i OpenCensus. Współpracuje z silnikiem wyszukiwania danych Tempo w Loki oraz z platformami monitorującymi, takimi jak Prometheus i Grafana. Wersje Grafana 7.3 i wyższe oferują bezproblemową integrację z Tempo.
Dlaczego warto wybrać Tempo?
Tempo ułatwia korelowanie metryk, śladów i logów. W sytuacjach, gdy użytkownik napotyka na ten sam rodzaj błędu, dokładne ślady zdarzeń są kluczowe do zrozumienia problemu. Tradycyjne metody downsamplingu mogą jednak prowadzić do utraty cennych informacji. Tempo rozwiązuje ten problem, umożliwiając przechowywanie kompletnych śladów w obiektowej pamięci masowej, jak S3 czy GCS, co sprawia, że jest to rozwiązanie ekonomiczne.
Dodatkowo, Tempo przyspiesza proces debugowania i rozwiązywania problemów, umożliwiając błyskawiczne przejście od metryk do odpowiadających im śladów i logów, które zarejestrowały określone problemy.
Poniżej przedstawione są opcje konfiguracyjne dostępne w Tempo:
- Dystrybutor: Służy do ustawiania opcji odbioru zakresów, które następnie są przesyłane do modułów przetwarzających.
- Ingester: Odpowiedzialny za tworzenie partii śladów i ich przesyłanie do bazy danych TempoDB w celu przechowywania.
- Compactor: Przetwarza bloki danych z magazynu (S3, GCS), łączy je i zapisuje z powrotem, optymalizując przestrzeń dyskową.
- Przechowywanie: Służy do konfiguracji bazy danych TempoDB. Wymaga podania nazwy magazynu (S3 lub GCS) oraz dodatkowych parametrów.
- Lista członków: Umożliwia koordynację między różnymi komponentami Tempo.
- Uwierzytelnianie/serwer: Tempo korzysta z serwera Weaveworks/Common. Służy do konfiguracji serwera.
Architektura Tempo
Powyższy schemat prezentuje architekturę działania Grafana Tempo.
Na początku, dystrybutor otrzymuje zakresy w różnych formatach (Zipkin, Jaeger, OpenTelemetry, OpenCensus) i przekazuje je dalej, haszując identyfikator śledzenia. Ingester grupuje ślady w pakiety, zwane blokami.
Następnie bloki te są przesyłane do magazynu (S3/GCS). Gdy zachodzi potrzeba rozwiązania problemu związanego z konkretnym identyfikatorem śledzenia, interfejs Grafana umożliwia jego wprowadzenie w pasku wyszukiwania. Querier pobiera wtedy szczegółowe dane śledzenia z magazynu.
W pierwszej kolejności sprawdzana jest obecność identyfikatora w procesie przetwarzania. Jeśli nie zostanie tam odnaleziony, poszukiwania przenoszą się do magazynu. Do udostępniania śladów używany jest prosty punkt końcowy HTTP. Równocześnie kompaktor pobiera bloki z magazynu, scala je i zapisuje z powrotem, redukując liczbę bloków w magazynie.
Konfiguracja Tempo za pomocą Dockera
W tym fragmencie pokażemy, jak krok po kroku skonfigurować Grafana Tempo przy użyciu Dockera. Zacznijmy od utworzenia sieci dockerowej dla zaplecza Tempo.
docker network create docker-tempo
Pobierz teraz plik konfiguracyjny Tempo.
curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml
Poniżej znajduje się zestawienie dostępnych protokołów:
Protokół
Port
OpenTelemetry
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411
Uruchom kontener Dockera, korzystając z pobranego pliku konfiguracyjnego. W tym przykładzie użyjemy formatu Jaeger – Thrift Compact (port 6831) do przesyłania śladów.
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 trzeba uruchomić kontener zapytań Tempo. Najpierw pobierz plik konfiguracyjny.
curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml
Na podstawie pobranego pliku konfiguracyjnego, uruchom kontener Dockera.
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
Interfejs użytkownika Jaeger będzie dostępny pod adresem http://localhost:16686.
W pasku wyszukiwania można wprowadzić identyfikator śledzenia z dziennika, który chcemy zbadać, a system wygeneruje dane śledzenia.
Uruchomienie aplikacji demonstracyjnej w Tempo
Przejdźmy teraz do demonstracyjnej aplikacji dostarczonej przez Grafana Tempo. Uruchomimy przykład za pomocą Docker Compose, więc konieczna jest instalacja Dockera na komputerze.
Pobierz plik ZIP z Grafana Tempo: https://github.com/grafana/tempo
Rozpakuj pobrany plik do swojego katalogu domowego i przejdź do folderu docker-compose. Znajdziesz tam szereg przykładowych plików docker-compose. Użyjemy przykładu z lokalnym przechowywaniem danych.
cd tempo-master/example/docker-compose/ ls
Uruchom stos za pomocą poniższego polecenia.
docker-compose up -d
W efekcie uruchomione zostaną kontenery dla Grafana, Loki, Tempo, Tempo-query oraz Prometheus.
docker ps
Możesz również otworzyć przeglądarkę i sprawdzić działanie Grafana, Jaeger UI i Prometheus.
Generator obciążenia generuje identyfikatory śledzenia, które są przesyłane do Tempo. Aby wyświetlić logi, użyj poniższego polecenia.
docker-compose logs -f synthetic-load-generator
Logi te zawierają identyfikatory śledzenia potrzebne do wygenerowania śladów.
Skopiuj jeden z identyfikatorów śledzenia i umieść go w pasku wyszukiwania Jaeger UI.
System pomyślnie wygeneruje ślady powiązane z podanym identyfikatorem.
Podsumowanie
To wszystko, co warto wiedzieć o Grafana Tempo. Zachęcamy do eksperymentowania z Tempo w celu generowania śladów i dogłębnego analizowania metryk oraz problemów w logach.
Tempo rejestruje wszystkie dane, eliminując ryzyko utraty szczegółów związane z downsamplingiem. Dzięki temu, zespoły programistyczne mogą skuteczniej diagnozować przyczyny błędów i ostrzeżeń w logach.
newsblog.pl