Zanurzmy się w temat OpenTelemetry – uniwersalnego standardu zbierania danych telemetrycznych, który nie jest zależny od konkretnych dostawców.
Dla każdego programisty kluczowym wyzwaniem jest zapewnienie przejrzystości działania aplikacji poprzez właściwe gromadzenie danych telemetrycznych. Słownik definiuje telemetrię jako dziedzinę zajmującą się zbieraniem informacji o obiektach znajdujących się na odległość i przekazywaniem ich drogą elektroniczną.
Przykładowo, jedno kliknięcie użytkownika na stronie internetowej inicjuje szereg żądań i ścieżek, które wędrują przez różne sieci, mikroserwisy i bazy danych.
OpenTelemetry to platforma służąca do obserwacji, a konkretnie zbiór starannie dobranych komponentów, które można stosować razem lub osobno. Co istotne, twórcy popularnych frameworków i bibliotek otrzymali teraz standardową metodę rejestrowania danych telemetrycznych. Dzięki temu użytkownicy końcowi mogą z łatwością zaglądać do wnętrza tych frameworków i bibliotek, zyskując wgląd w ich działanie.
Aby w pełni pojąć istotę OpenTelemetry, należy najpierw zgłębić koncepcję śledzenia rozproszonego.
Czym jest śledzenie rozproszone?
Wraz ze wzrostem złożoności naszych aplikacji oraz liczby usług zaangażowanych w obsługę użytkowników i realizację transakcji, coraz bardziej istotne staje się zrozumienie przepływu żądań przez poszczególne usługi i ich wkładu w ogólne opóźnienie. Właśnie tym zajmuje się śledzenie rozproszone. Rejestruje opóźnienia żądań użytkowników oraz czas potrzebny każdej mikrousłudze na drodze odpowiedzi.
W odpowiedzi na żądanie użytkownika generowany jest ślad, czyli kompletny zestaw informacji opisujących, w jaki sposób system reaguje na to żądanie. Ślady składają się z zakresów, a każdy zakres reprezentuje określoną parę żądanie-odpowiedź zaangażowaną w obsługę danego żądania. Zakres nadrzędny opisuje opóźnienie odczuwane przez użytkownika końcowego. Zakres podrzędny natomiast pozwala zrozumieć, jak konkretna usługa w systemie rozproszonym została wywołana i jak odpowiedziała, wraz z informacjami o opóźnieniu.
Co to jest OpenTelemetry?
OpenTelemetry to projekt open source, rozwijany pod auspicjami CNCF, który oferuje standardowy sposób generowania danych telemetrycznych. Powstał w wyniku połączenia projektów OpenTracing, który definiował standard generowania danych śledzenia oraz OpenCensus, który standaryzował generowanie danych metryk.
OpenTelemetry dostarcza pojedynczy zestaw API, agentów, usług kolektora oraz bibliotek umożliwiających przechwytywanie rozproszonych śladów i metryk z aplikacji. Standaryzuje sposób zbierania danych telemetrycznych i przesyłania ich do wybranego przez nas zaplecza. Dzięki temu zyskujemy niezależność od konkretnego dostawcy i elastyczność w zmianie zaplecza bez konieczności ponownej instrumentacji kodu.
Możemy więc instrumentować aplikacje za pomocą agenta niezależnego od dostawcy, a metryki i ślady kierować na przykład do Datadog. W przypadku zmiany dostawcy (np. z Datadog na Dynatrace) nie musimy modyfikować kodu aplikacji.
Celem projektu OpenTelemetry jest udostępnienie jednego zestawu bibliotek API oraz agentów, które pozwolą na przechwytywanie metryk i rozproszonych śladów z aplikacji, niezależnie od języka i platformy. Projekt obejmuje również opcjonalną usługę kolektora i posiada dedykowane repozytorium specyfikacji. Warto podkreślić, że OpenTelemetry nie jest alternatywą dla Jaeger czy Prometeus, które pełnią funkcję back-endów do obserwacji. OpenTelemetry ułatwia jednak eksport danych do tych back-endów (zarówno open-source, jak i komercyjnych).
Główne korzyści oferowane przez OpenTelemetry:
- Standaryzacja zbierania danych telemetrycznych, co ułatwia zmianę dostawców.
- Niezależna od dostawcy, otwarta konwencja semantyczna dla procesu gromadzenia danych.
- Kolektor, który może działać jako agent, brama lub w inny sposób.
- Obsługa wielu formatów propagacji kontekstu, ułatwiająca migrację.
- Kompletne rozwiązanie do generowania, emitowania, zbierania, przetwarzania i eksportowania danych telemetrycznych.
- Możliwość równoległego przesyłania danych do wielu miejsc docelowych z pełną kontrolą nad tym procesem.
Komponenty OpenTelemetry
Oto kluczowe elementy OpenTelemetry:
- Proto: Służy do definiowania kolektorów, bibliotek instrumentacji itp. w postaci typów interfejsów niezależnych od języka.
- Kolektor: Odpowiada za odbieranie, przetwarzanie i eksportowanie danych telemetrycznych. Implementacja kolektora jest niezależna od dostawcy. Domyślnie dane telemetryczne są eksportowane przez biblioteki instrumentacji właśnie do kolektora.
- Specyfikacja: Opisuje wymagania i oczekiwania dotyczące implementacji w różnych językach, obejmując API, SDK i dane. API generuje dane telemetryczne, a możliwości przetwarzania i eksportowania są dostarczane przez SDK. Dane mają konwencje semantyczne, które pozwalają na obsługę różnych dostawców bez konieczności modyfikowania kodu.
- Biblioteki instrumentacji: Dostępne w wielu językach w ramach projektu OpenTelemetry. Zapewniają one możliwość obserwacji innych bibliotek, aby wszystkie aplikacje mogły być obserwowane za pomocą wywołań API OpenTelemetry.
Architektura OpenTelemetry
Zdjęcie z New Relic
OpenTelemetry składa się z trzech głównych elementów:
- API do instrumentacji aplikacji, bibliotek i platform.
- SDK, które implementuje API.
- Opcjonalny kolektor, który może pozyskiwać, agregować i eksportować dane telemetryczne.
API ma na celu umożliwienie tworzenia instrumentacji dla bibliotek i kodu aplikacji. Składa się z czterech głównych sekcji: śledzenie, liczniki, wspólny kontekst i konwencje semantyczne.
- Tracer API obsługuje tworzenie, dodawanie adnotacji i zamykanie zakresów.
- Interfejs API miernika obejmuje wiele instrumentów metrycznych, np. obserwatorów, rejestratory wartości, liczniki.
- Kontekst zakresu można śledzić i wykonywać za pomocą interfejsu API kontekstu, propagując ten kontekst w obrębie i poza systemem.
- Konwencje semantyczne zawierają wytyczne i zasady dotyczące nazewnictwa, np. nazw przęseł, atrybutów, etykiet i instrumentów metrycznych, zapewniając spójność między różnymi implementacjami językowymi i zewnętrznymi narzędziami.
Współdzielony kontekst jest zaimplementowany między modułami śledzącym i miernikiem, umożliwiając zapisywanie metryk (które nie są obserwatorami) w kontekście zakresu wykonywania. Umożliwia to SDK przechwytywanie przykładowych zakresów dla wartości metryk. Kontekst można dostosować za pomocą propagatorów, które umożliwiają propagowanie kontekstu zakresu do i z systemu, co jest kluczowe dla rozproszonego śledzenia.
Kolektor jest istotnym elementem architektury OpenTelemetry. Jest to samodzielna usługa, która może odbierać, przetwarzać i eksportować dane telemetryczne z różnych źródeł, w tym OpenCensus, Zipkin, Jaeger i OpenTelemetry. Za pomocą kolektorów można eksportować zakresy i metryki do wielu dostawców i systemów telemetrycznych open source.
Architektura OpenTelemetry oferuje kompletne rozwiązanie telemetryczne, które można dostosować do indywidualnych potrzeb za pomocą punktów rozszerzeń.
Jak działa OpenTelemetry?
W każdej usłudze wdrożenia instaluje się klienta OpenTelemetry, którym jest SDK z interfejsem API. Struktury i biblioteki aplikacji korzystają z tego API do opisywania wykonywanej pracy. SDK eksportuje zebrane dane do usługi przesyłania danych, zwanej Kolektorem.
OpenTelemetry ma własny protokół danych – OTLP. Kolektor może jednak tłumaczyć OTLP na różne formaty, w tym Zipkin, Jaeger i Prometeusz. OpenTelemetry nie dostarcza własnego zaplecza ani narzędzia analitycznego, ponieważ jego celem jest standaryzacja opisu działania systemów w chmurze, a nie ujednolicanie sposobu analizy danych. Ma on usprawnić rozwój nowych narzędzi analitycznych bez konieczności przebudowy całego ekosystemu oprogramowania telemetrycznego.
W przypadku przesyłania dużej ilości danych system musi uwzględniać wiele kwestii. OpenTelemetry zapewnia elastyczność, obsługując różne formaty propagacji kontekstu. Oznacza to, że w ramach standardu można dokonywać wyborów. Jeśli więc stosuje się format kontekstu śledzenia w3c lub propagację b3, różne standardy w ramach standardu umożliwiają łączenie kropek między usługami.
Podsumowanie
OpenTelemetry gromadzi różne dane, w tym rozproszone metryki śledzenia i informacje o zasobach systemowych. Zamiast traktować je jako osobne sygnały, OpenTelemetry łączy je, zapewniając indeksowanie i kontekst, co umożliwia ich agregację i indeksowanie na zapleczu.
Oprócz gromadzenia danych OpenTelemetry umożliwia ich przetwarzanie i potokowanie, oferując narzędzia do zmiany formatów danych, manipulowania nimi oraz budowania solidnych potoków telemetrycznych.
To wszystko na temat OpenTelemetry. Zachęcamy do wypróbowania tego narzędzia.
newsblog.pl