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 ENVIRONMENT → Manage environments → Create 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.