OpenTelemetry w WEBCON BPS

Facebooktwitterpinterestlinkedinmail
Dotyczy wersji 2023 R1 i powyżej, autor: Łukasz Maciaszkiewicz

 

Wprowadzenie

W dzisiejszych dynamicznych i rozproszonych środowiskach aplikacyjnych monitorowanie i analiza są kluczowe dla zapewnienia wysokiej wydajności, niezawodności i optymalizacji aplikacji. Aby sprostać tym wyzwaniom, począwszy od wersji 2023 R1 w WEBCON BPS wprowadzono wsparcie dla OpenTelemetry – potężnego narzędzia, które ułatwia zbieranie danych diagnostycznych i metryk z systemów informatycznych.

Niniejszy artykuł ma na celu omówienie sposobu konfiguracji telemetrii opartej na standardzie OpenTelemetry w systemie WEBCON BPS dla Portalu oraz Serwisu.

Czym jest telemetria?

Telemetria to proces zbierania, przesyłania i analizowania danych diagnostycznych i operacyjnych z systemów informatycznych. W praktyce obejmuje ona monitorowanie i zbieranie danych z różnych komponentów systemów IT w celu uzyskania informacji na temat ich działania, wydajności, bezpieczeństwa i innych istotnych parametrów.

Telemetria zapewnia szereg korzyści, takich jak monitorowanie i diagnozowanie problemów w czasie rzeczywistym, optymalizowanie wydajności w oparciu o analizę danych i identyfikację wąskich gardeł oraz usprawnione planowanie pojemności i skalowalność. Ponadto daje ona możliwość zdalnego monitorowania i zarządzania systemami oraz podejmowania świadomych decyzji dotyczących utrzymania i optymalizacji infrastruktury IT.

Projekt OpenTelemetry

OpenTelemetry to otwarty projekt, który ma na celu standaryzację i ułatwienie monitorowania, analizowania i zarządzania systemami rozproszonymi. Jest to narzędzie, które zapewnia programistom możliwość zbierania, generowania i przesyłania danych telemetrycznych (takich jak metryki, dzienniki i dane diagnostyczne śledzenia) z aplikacji działających w różnych środowiskach.

Rozwiązanie to integruje się z różnymi technologiami i językami programowania, umożliwiając deweloperom zbieranie danych diagnostycznych z różnych źródeł, takich jak usługi chmurowe, serwery, kontenery i aplikacje rozproszone. Działa ono na zasadzie instrumentacji, tj. dodawania kodu do aplikacji w celu zbierania danych telemetrycznych.

Wraz z OpenTelemetry dostarczane jest jednolite API oraz biblioteki dla wielu języków programowania, co umożliwia deweloperom korzystanie z jednolitego zestawu narzędzi do monitorowania aplikacji w różnych środowiskach.

  • OpenTelemetry a WEBCON BPS

System WEBCON BPS często pełni rolę centralnego punktu integrującego rozmaite wykorzystywane w przedsiębiorstwie systemy IT. Dzięki wsparciu dla standardu OpenTelemetry osoby zarządzające systemem otrzymują dokładny wgląd w całość ruchu i przepływów przechodzących przez system. W rezultacie możliwe jest nie tylko monitorowanie danego przepływu, ale także dokładne prześledzenie wszystkich towarzyszących mu działań i operacji (w tym powiązanych z systemami zintegrowanymi z BPSem). Oprócz oczywistych korzyści z punktu widzenia diagnostyki i wykrywania błędów, administratorzy systemu zyskują w ten sposób ważne informacje w kwestiach związanych z wydajnością.

OpenTelemetry w WEBCON BPS – kwestie techniczne

W ujęciu technicznym wsparcie dla OpenTelemetry w systemie WEBCON BPS dotyczy segmentu Portalu oraz Serwisu. Udostępniono przy tym możliwość korzystania z dwóch filarów wspomnianego standardu, tj. danych śledzenia diagnostycznego (traces) oraz danych metrycznych (metrics) [obecnie WEBCON BPS nie wspiera dzienników (logs) w ramach narzędzia OpenTelemetry].

Oprócz protokołu OTLP (OpenTelemetry Protocol) stanowiącego część projektu OpenTelemetry, na potrzeby gromadzenia i przetwarzania danych śledzenia udostępniono możliwość korzystania z platformy Jaeger, natomiast do odbierania i analizowania danych metryk można korzystać z narzędzia Prometheus.

  • Plik otlpsettings.json

W systemie WEBCON BPS narzędzie OpenTelemetry jest konfigurowane osobno dla segmentu Portalu oraz Serwisu. Na potrzeby konfiguracji wykorzystywany jest plik otlpsettings.json. Plik ten można utworzyć, korzystając z dostępnego w katalogu głównym Portalu oraz Serwisu szablonu o nazwie otlpsettings.template.json. (Należy pamiętać, aby zmienić nazwę pliku, usuwając z niej człon „.template”). W obu przypadkach konfiguracja jest niemal identyczna, a jedyną różnicą między plikami Portalu a Serwisu jest inna nazwa węzła nadrzędnego, tj. odpowiednio App i Configuration).

Porównanie pliku otlpsettings.json Portalu (po prawej) i Serwisu (po lewej) – jedyną różnicą jest nazwa nadrzędnego węzła (czerwona ramka)

 

  • Wspierana instrumentacja

Jak wspomniano WEBCON BPS obsługuje dwa filary projektu OpenTelemetry, tj. Tracing (dane śledzenia diagnostycznego) oraz Metrics (dane metryczne). Zapewniono przy tym wsparcie dla szeregu modułów, które mogą zostać wykorzystane w ramach konfiguracji. Poniższe tabele zawierają informacje na temat wspieranej instrumentacji w przypadku obu z wymienionych filarów.

Tracing
Nazwa modułu Uwagi
ASP .NET Core Instrumentation
SqlClient W przypadku Portalu i Serwisu istnieje możliwość podglądu zapytań SQL
HttpClient
WCF Client Integracja z Serwisem

* W przypadku danych śledzenia diagnostycznego system WEBCON BPS standardowo wspiera eksport danych za pośrednictwem protokołu OTLP (konfiguracja zgodna z ustawieniami odbiorcy danych) oraz platformy Jaeger (adres punktu końcowego: http://[jaegerAddress]:14268/api/traces).

 

Metrics
Nazwa modułu Uwagi
ProcessInstrumentation
RuntimeInstrumentation Konfiguracja w polu „ProcessInstrumentation”
EventCountersInstrumentation Konfiguracja źródeł liczników zdarzeń (oddzielonych przecinkiem) w polu „EventSources”.
AspNetCoreInstrumentation Konfiguracja w polu „WebInstrumentation”
HttpClientInstrumentation Konfiguracja w polu „WebInstrumentation”

* Eksport danych metrycznych jest możliwy za pośrednictwem protokołu OTLP (konfiguracja zgodna z ustawieniami odbiorcy danych) oraz platformy Prometheus (domyślne ustawienie punktu końcowego: „/metrics”).

Konfiguracja

Pierwszym krokiem w procesie konfiguracji standardu OpenTelemetry jest ustawienie kolektora danych (komponentu odpowiedzialnego za odbieranie, przetwarzanie i przekazywanie danych telemetrycznych). W omawianym przykładzie wykorzystano do tego narzędzie Aspecto dostępne pod adresem: https://app.aspecto.io/user/login.

Kliknij zamieszczony link, aby otworzyć witrynę usługi, a następnie kliknij zakładkę Sign Up, aby utworzyć konto użytkownika. Konto można utworzyć, wykorzystując do tego celu istniejące konto w usłudze Google lub Microsoft bądź ręcznie wprowadzając adres e-mail (może być to adres e-mail w domenie WEBCON) i powiązane z nim hasło – w omawianym przykładzie wybrano drugi wariant.

W polu yours@example.com należy wpisać adres e-mail, zaś w polu your password hasło składające się z co najmniej 8 znaków, jednej dużej i małej litery oraz cyfry. Po wpisaniu wspomnianych danych zaznacz pole wyboru I agree to the Terms of Use and Privacy Policy i kliknij przycisk SIGN UP.

Okno usługi Aspecto umożliwiające utworzenie konta użytkownika

 

Po naciśnięciu wspomnianego przycisku wyświetlone zostanie okno informujące o pomyślnym zarejestrowaniu konta i przesłaniu potwierdzającej wiadomości na zarejestrowany adres e-mail.

 

Aby rozpocząć korzystanie z usługi, należy kliknąć przycisk Click to confirm your email address znajdujący się w przesłanej na skrzynkę odbiorczą wiadomości. Po jego naciśnięciu następuje ponowne przekierowanie do witryny Aspecto, gdzie można przystąpić do dalszej konfiguracji usługi.

Użytkownikowi wyświetlone zostanie okno powitalne zawierające dwa przyciski. Aby rozpocząć korzystanie z usługi należy wybrać przycisk Get Started.

 

W nowo otwartej witrynie wybierz opcję Yes, I’m collecting data with OpenTelemetry.

 

Po wybraniu wspomnianej opcji następuje przekierowanie do strony zawierającej dane konfiguracyjne. Z punktu widzenia konfiguracji usługi w systemie WEBCON BPS istotnymi danymi są informacje zawarte w wierszu endpoint oraz headers. Dane te należy zachować do wykorzystania w kolejnym kroku.

 

Aby skorzystać z nowo utworzonego konta, należy otworzyć plik otlpsettings.json znajdujący się w głównym katalogu Portalu oraz Serwisu. (Do edycji pliku można użyć dostępnego w systemie Windows programu Notatnik lub dowolnego edytora kodu źródłowego, np. Notepad++). Zważywszy, że konfiguracja wspomnianego pliku jest identyczna dla Portalu i Serwisu, w artykule prezentowana jest konfiguracja wyłącznie dla pliku Portalu (niemniej należy pamiętać, aby opisywane kroki wykonać także dla pliku Serwisu).

W pliku otlpsettings.json znajdują się węzły Metrics oraz Tracing zawierające węzeł cząstkowy Otlp. Dostępne są w nim wiersze Endpoint oraz Headers, do których należy przekopiować dane otrzymane w usłudze Aspecto. Należy przy tym pamiętać, aby dodać przedrostek „https://” w odniesieniu do punktu końcowego, zaś w przypadku wiersza headers zamienić dwukropek na znak równości i usunąć spację po prawej stronie. W omawianym przypadku kopiowane dane mają zatem następującą postać:

– endpoint: https://otelcol.aspecto.io:4317,

– headers: Authorization=b29ac31c-789a-4fd1-a389-d47bf854cdee.

Dodatkowo należy upewnić się, że w parametrze Enabled ustawiono wartość „true” w węzłach Otlp i Tracing oraz węzłach cząstkowych Otlp należących do węzła Exporters (odpowiednio w węzłach nadrzędnych Metrics i Tracing). Poprawną konfigurację pliku przedstawia załączony poniżej zrzut ekranu.

 

Po zapisaniu zmian w pliku na stronie internetowej Aspecto tekst Waiting for incoming traces zostanie zastąpiony po chwili tekstem Trace arrived successfully!. Ponadto aktywny staje się przycisk Continue – kliknij wspomniany przycisk.

 

Następuje przekierowanie do głównej strony narzędzia, która umożliwia zarządzanie odbieranymi danymi.

 

Warto zauważyć, że do obsługi danych śledzenia diagnostycznego istnieje możliwość użycia także innych narzędzi. Poniżej opisano przykładowe narzędzie Jaeger, które także można wykorzystać w tym celu. Ponadto w dalszej części opisano konfigurację narzędzia Prometheus i powiązanej z nim platformy Grafana służących do monitorowania i analizowania danych metrycznych.

  • Jaeger

Narzędzie Jaeger służy do monitorowania i analizowania ścieżek zapytań w systemach rozporoszonych. Jest to rozwiązanie darmowe, dostępne do pobrania pod następującym adresem: https://www.jaegertracing.io/download/.

Kliknij zamieszczony link, wybierz wersję narzędzia odpowiadającą systemowi operacyjnemu i pobierz plik. Jego zawartość należy wypakować do folderu „C:\Jaeger” (folder należy utworzyć, jeżeli nie istnieje).

W pliku otlpsettings.json do parametru Endpoint znajdującego się w węźle Exporters dodaj adres URL maszyny, na której zainstalowano narzędzie Jaeger, i zapisz zmiany (numer portu: 14268 pozostaje bez zmian). (Jeżeli narzędzie jest instalowane lokalnie, należy wpisać „localhost”). Dodatkowo w węźle Jaeger zmień wartość na „true”.

 

Po zapisaniu zmian w pliku przejdź do katalogu C:/Jaeger, gdzie zainstalowano narzędzie, a następnie otwórz konsolę Windows, wpisując w pasek adresu folderu komendę „cmd”. W oknie konsoli wpisz jaeger-all-in-one.exe.

 

Po uruchomieniu pliku status platformy Jaeger można podejrzeć, przechodząc pod następujący adres w przeglądarce: http://localhost:16686/.

 

  • Prometheus

Zasadniczym przeznaczeniem narzędzia Prometheus jest zbieranie, przechowywanie i analizowanie danych metrycznych dotyczących wydajności, stanu i innych parametrów systemów i aplikacji. Aby jednak zacząć korzystać z narzędzia, w pliku otlpsettings.json ustaw wartość „true” w parametrze Enabled w węzłąch cząstkowych Metrics (węzeł nadrzędny Otlp) oraz Prometheus (węzeł nadrzędny Exporters).

Kolejnym krokiem jest pobranie narzędzia. Można to zrobić, klikając link https://prometheus.io/download/, pamiętając przy tym, aby jego wersja odpowiadała posiadanemu systemowi operacyjnemu. Po pobraniu pliku jego zawartość rozpakuj w folderze „C:\Prometheus” (folder należy utworzyć, jeżeli nie istnieje). W folderze tym znajdź i otwórz plik prometheus.yml (ponownie można to zrobić za pomocą programu Notatnik lub edytora kodu, np. Notepad++) i dodaj sekcję z adresem i portem Portalu zgodnie z załączonym poniżej zrzutem. Należy przy tym pamiętać, aby zachować odpowiednie wcięcie i stosować wyłącznie spacje jako białe znaki.

 

Po zapisaniu zmian w pliku istnieje możliwość sprawdzenia statusu narzędzia. Aby to zrobić, podobnie jak w przypadku narzędzia Jaeger, przejdź do katalogu narzędzia Prometheus (C:\Prometheus) i w pasku adresu folderu wpisz „cmd”. W konsoli Windows wpisz polecenie „prometheus.exe”. Po uruchomieniu programu w oknie przeglądarki internetowej wklej: http://localhost:9090/targets. Wyświetlone zostanie następujące okno:

 

  • Grafana

Ostatnim krokiem jest skonfigurowanie narzędzia Grafana służącego w tym przypadku do wizualizacji i monitorowania danych metrycznych za pomocą interaktywnych i dynamicznych pulpitów nawigacyjnych (tzw. dashboardów).

Instalator narzędzia dostępny jest pod następującym adresem: https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1&platform=windows. Po pobraniu należy zainstalować oprogramowanie, upewniając się, że wybrany został komponent Run Grafana as a service.

 

Po zakończeniu instalacji otwórz przeglądarkę internetową, a następnie w pasku adresu wklej adres: http://localhost:3000/. Wyświetlona zostanie witryna narzędzia Grafana z oknem logowania. Domyślna nazwa użytkownika i hasło to „admin” (po zalogowaniu istnieje możliwość zmiany hasła).

 

Aby narzędzie mogło wizualizować i monitorować dane konieczne jest dodanie źródła danych. W tym celu kliknij kafelek DATA SOURCES znajdujący się w głównym oknie narzędzia.

 

W nowym oknie wybierz opcję Prometheus z listy dostępnych źródeł danych.

 

W oknie konfiguracji źródła danych Prometheus należy podać adres URL serwera narzędzia Prometheus (np. http://localhost:9090/). Pozostałe ustawienia są opcjonalne i mogą być modyfikowane przez użytkownika zgodnie z jego preferencjami.

 

Po wprowadzeniu zmian należy kliknąć przycisk Save & test znajdujący się w dolnej części strony. Poprawnie skonfigurowane źródło danych umożliwia tworzenie wykresów oraz generowanie pulpitów nawigacyjnych (dashboardów).

Dostępne miary i metryki

Konfigurując moduły ProcessInstrumentation, EventCountersInstrumentation oraz WebInstrumentation użytkownik może uzyskać dostęp do danych metrycznych udostępnianych przez środowisko bądź platformę ASP.NET.

W przypadku modułu ProcessInstrumentation przekazywane są dane metryczne udostępniane przez system, takie jak chociażby zużycie pamięci, operacje dyskowe, operacje sieciowe, liczba utworzonych wątków, czy obciążenie procesora.

Z kolei dostęp do listy liczników dla modułu EventCountersInstrumentation można uzyskać na przykład pod adresem: https://learn.microsoft.com/pl-pl/dotnet/core/diagnostics/available-counters. Należy przy tym pamiętać, że lista dostępnych metryk może ulec zmianie i ma ona charakter niewyczerpujący.

Wreszcie moduł WebInstrumentation umożliwia monitorowane i analizowanie:

  • żądań HTTP (np. czas odpowiedzi, liczba obsłużonych żądań na sekundę, kod odpowiedzi HTTP),
  • przepływu żądań (w jaki sposób żądania są przekazywane przez różne warstwy aplikacji, jakie operacje są wykonywane w ich obrębie oraz jakie są czasy odpowiedzi poszczególnych komponentów),
  • propagacji kontekstu (możliwość śledzenia przepływu informacji i mierzenia wydajności nawet w przypadku żądań, które przechodzą przez wiele serwisów i komponentów).

Ponadto WEBCON BPS udostępnia szereg własnych miar i metryk, które można wykorzystać do monitorowania systemu. Poniżej wymieniono wspomniane miary wraz z krótkim opisem:

Nazwa modułu Opis
webcon-workflow-form-path-transitions Liczba przejść ścieżką. Licznik uwzględnia każde rozpoczęte przejście ścieżką (bez względu na to, czy zakończyło się pozytywnie, czy błędem).
webcon-workflow-form-success-path-transitions Liczba pozytywnie zakończonych przejść ścieżką (nie są zliczane przejścia zakończone błędem).
webcon-workflow-form-open Liczba otwarć formularza.
webcon-workflow-form-elements-cache Liczba elementów znajdujących się obecnie w pamięci podręcznej. Do pamięci podręcznej dodawane są elementy w momencie otwarcia formularza i są one usuwane z tej pamięci w momencie przejścia ścieżką.
webcon-workflow-form-path-transitions-in-progress Liczba aktualnie trwających przejść ścieżką. W prawidłowo działającym systemie wielkość ta powinna być możliwie nieduża (prawidłowe przejście ścieżką może trwać do kilkuset milisekund). Miara może wzrosnąć w przypadku dużego obciążenia systemu (wiele  równoległych przejść ścieżką).
webcon-workflow-form-paths-transition-times Histogram czasów przejść ścieżką
webcon-workflow-portal-open Liczba otwarć Portalu. (Zliczane jest każde otwarcie Portalu w nowym oknie przeglądarki).

 

Podsumowanie

Opisana powyżej konfiguracja standardu OpenTelemetry pozwala na szybkie rozpoczęcie monitorowania i analizowania danych pochodzących z systemu WEBCON BPS oraz zintegrowanych z nim systemów. Dzięki temu osoba zarządzająca systemem zyskuje użyteczne narzędzie umożliwiające wgląd w dane niejednokrotnie niedostępne w inny sposób, a tym samym zyskuje możliwość ulepszania i rozwijania własnego systemu.