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 Honeycomb dostępne pod adresem: https://ui.eu1.honeycomb.io/. Narzędzie to posłuży w tym wypadku do odbierania danych śledzenia diagnostycznego (traces).

Kliknij zamieszczony link, aby przejść na stronę logowania do narzędzia. Jeżeli nie posiadasz jeszcze konta, utwórz je, klikając przycisk Sign up for free today (Zarejestruj się za darmo) [istnieje także możliwość zalogowania się za pomocą konta Google (przycisk Login with Google)].

 

Aby utworzyć konto, kliknij przycisk Sign up for free today.

 

UWAGA: narzędzie umożliwia wybranie jednego z dwóch regionów: Unii Europejskiej (European Union) lub Ameryki Północnej (North America). Warto pamiętać, że każdy region posiada inny adres punktu końcowego (endpointa) (dla UE jest to: https://api.eu1.honeycomb.io/v1/traces, natomiast dla Ameryki Północnej: https://api.honeycomb.io/v1/traces), co ma wpływ na konfigurację pliku otlpsettings.json omawianą w dalszej części artykułu. Poniżej opisano konfigurację dla regionu Unii Europejskiej.

 

Przycisk umożliwiający wybór regionu dla narzędzia Honeycomb

 

Po naciśnięciu przycisku Sign up for free today na nowo otwartej stronie podaj swoje imię (pole First name) i nazwisko (Last name), a także adres e-mail [Email address (work)], i naciśnij przycisk Sign up.

 

 

Po wprowadzeniu wspomnianych danych i kliknięciu przycisku na podany adres e-mail przesłana zostanie wiadomość z linkiem aktywującym konto, który należy kliknąć.

 

Wiadomość e-mail zawierająca link aktywujący konto w usłudze Honeycomb

 

Kliknięcie linku otwiera stronę umożliwiającą zdefiniowanie hasła do konta. (Hasło musi posiadać od 12 do 72 znaków, zawierać co najmniej dwa słowa oraz liczbę lub znak specjalny).

 

 

Po wprowadzeniu hasła oraz naciśnięciu przycisku Continue przystąp do tworzenia zespołu. Jego nazwa (pole Team name) jest domyślnie uzupełniana w oparciu o podany adres e-mail, konieczne jest jednak podanie zajmowanego stanowiska (Your occupation). [Uzupełnienie pola How did you first hear about Honeycomb? (Jak dowiedziałeś się o Honeycomb?) nie jest wymagane]. Po wprowadzeniu informacji naciśnij przycisk Create Team (Utwórz zespół).

 

 

Po utworzeniu zespołu następuje przekierowanie na stronę główną narzędzia. W górnej części okna wyświetlany jest komunikat informujący o oczekiwaniu na przesyłanie danych.

 

 

UWAGA: po utworzeniu konta do odbierania danych użytkownik ma możliwość wykorzystania domyślnie utworzonego środowiska testowego (test). Warto jednak pamiętać, że możliwe jest także utworzenie własnego środowiska, klikając kolejno ENVIRONMENTManage environmentsCreate environment. W artykule zaprezentowano konfigurację z użyciem domyślnego środowiska „test”.

 

 

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 znajdź węzeł Tracing umożliwiający przesyłanie danych śledzenia diagnostycznego (traces).  W węźle cząstkowym Exporters zawiera on już dwa dodane obiekty Jaeger i Otlp. Poniżej obiektu Otlp dodaj nowy, wklejając następujące wiersze (pamiętaj przy tym, aby do klamry zamykającej obiektu Otlp dodać przecinek):

 

"HoneyComb": {

   "Enabled": false,

   "Endpoint": "https://api.eu1.honeycomb.io/v1/traces",

   "Headers": "x-honeycomb-team=[your-api-key]",

   "Protocol": "http"

}

 

Następnie w nowo wstawionym obiekcie ciąg [your-api-key] (widoczny w nagłówku Headers) zastąp kluczem API. Klucz ten jest dostępny na stronie głównej narzędzia Honeycomb.

 

Klucz API dostępny na głównej stronie narzędzia Honeycomb

 

Następnie pamiętaj, aby zarówno w węźle Honeycomb, jak i węzłach nadrzędnych w stosunku do niego (tj. Otlp i Tracing), ustawić wartość „true” dla parametru Enabled. Poprawną konfigurację pliku przedstawia załączony poniżej zrzut ekranu.

 

Poprawna konfiguracja pliku otlpsettings.json

 

Zapisz zmiany i zrestartuj usługi IIS (Internet Information Services).

Po kilku chwilach usługa Honeycomb powinna zacząć odbierać dane z platformy WEBCON BPS (warto przy tym wykonać kilka operacji w Portalu, aby dane zaczęły spływać szybciej).

 

Strona główna narzędzia Honeycomb odbierającego dane z platformy WEBCON BPS

 

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.