Szczegółowa diagnostyka dla aplikacji internetowych i usług dzięki usłudze Application Insights
W tym artykule wyjaśniono, jak usługa Application Insights pasuje do cyklu DevOps.
Usługa Application Insights monitoruje uruchomioną aplikację internetową. Informuje o błędach i problemach z wydajnością oraz ułatwia analizowanie sposobu używania aplikacji przez klientów. Działa w przypadku aplikacji działających na platformach, takich jak ASP.NET, Java EE i Node.js. Jest on hostowany w chmurze lub lokalnie.
Ważne jest, aby monitorować nowoczesną aplikację podczas jej działania. Chcesz wykryć błędy przed wykonaniem przez klientów. Chcesz również odkryć i rozwiązać problemy z wydajnością, które spowalniają elementy lub powodują niedogodności dla użytkowników. Gdy system działa z zadowoleniem, chcesz również wiedzieć, co robią z nim użytkownicy. Czy na przykład używa ona najnowszej funkcji? Czy odniosą z tym sukces?
Nowoczesne aplikacje internetowe są opracowywane w cyklu ciągłego dostarczania:
- Wydanie nowej funkcji lub ulepszenia.
- Sprawdź, jak dobrze działa dla użytkowników.
- Zaplanuj kolejny przyrost rozwoju na podstawie tej wiedzy.
Kluczową częścią tego cyklu jest faza obserwacji. Usługa Application Insights udostępnia narzędzia do monitorowania aplikacji internetowej pod kątem wydajności i użycia.
Najważniejszym aspektem tego procesu jest diagnostyka i diagnostyka. Jeśli aplikacja ulegnie awarii, firma zostanie utracona. Podstawową rolą struktury monitorowania jest:
- Niezawodne wykrywanie błędów.
- Powiadom Cię natychmiast.
- Przedstawić informacje potrzebne do zdiagnozowania problemu.
Usługa Application Insights wykonuje te zadania.
Błędy w systemach internetowych zwykle wynikają z problemów z konfiguracją lub nieprawidłowych interakcji między ich wieloma składnikami. Pierwszym zadaniem podczas rozwiązywania problemu z wydarzeniem w witrynie na żywo jest zidentyfikowanie lokalizacji problemu. Który składnik lub relacja jest przyczyną?
W prostszej epoce program komputerowy działał na jednym komputerze. Deweloperzy dokładnie przetestowali go przed wysyłką i po wysłaniu rzadko widzieli lub myśleli o tym ponownie. Przez wiele lat użytkownicy musieli pogodzić się z wszelkimi resztkami usterek.
Proces jest teraz znacznie inny. Aplikacja ma wiele różnych urządzeń do uruchomienia i może być trudna do zagwarantowania dokładnie takiego samego zachowania na każdym z nich. Hostowanie aplikacji w chmurze oznacza, że usterki można szybko naprawić. Ale oznacza to również ciągłą konkurencję i oczekiwanie na nowe funkcje w częstych odstępach czasu.
W tych warunkach jedynym sposobem utrzymania silnej kontroli nad liczbą usterek jest automatyczne testowanie jednostkowe. Nie można ręcznie ponownie przetestować wszystkiego w każdej dostawie. Test jednostkowy jest teraz wspólną częścią procesu kompilacji. Narzędzia, takie jak pomoc w chmurze Xamarin Test Cloud, zapewniając zautomatyzowane testowanie interfejsu użytkownika w wielu wersjach przeglądarki. Te systemy testowania pozwalają nam mieć nadzieję, że szybkość usterek znalezionych w aplikacji może być ograniczona do minimum.
Typowe aplikacje internetowe mają wiele składników na żywo. Wraz z klientem (w przeglądarce lub aplikacji urządzenia) i serwerem internetowym prawdopodobnie będzie znaczne przetwarzanie zaplecza. Być może zaplecze jest potokiem składników lub luźną kolekcją elementów współpracujących. Wiele z nich nie będzie w Twojej kontroli. Są to usługi zewnętrzne, od których zależysz.
W konfiguracjach takich jak te testy mogą być trudne i nieekonomiczne do testowania lub przewidywania każdego możliwego trybu awarii, innego niż w samym systemie na żywo.
Poniżej przedstawiono kilka pytań, które należy zadać podczas tworzenia systemu internetowego:
- Czy twoja aplikacja ulega awarii?
- Co dokładnie się stało? Jeśli żądanie zakończyło się niepowodzeniem, chcesz wiedzieć, jak się tam dotarło. Potrzebujesz śladu zdarzeń.
- Czy twoja aplikacja jest wystarczająco szybka? Jak długo trwa odpowiadanie na typowe żądania?
- Czy serwer może obsłużyć obciążenie? Kiedy częstotliwość żądań rośnie, czy czas odpowiedzi utrzymuje się na stałym poziomie?
- Jak szybko reagują zależności, takie jak interfejsy API REST, bazy danych i inne składniki wywoływane przez aplikację? W szczególności, jeśli system działa wolno, czy jest to składnik, czy otrzymujesz powolne odpowiedzi od kogoś innego?
- Czy twoja aplikacja jest w górę czy w dół? Czy można go zobaczyć z całego świata? Musisz wiedzieć, czy zatrzymuje się.
- Jaka jest główna przyczyna? Czy błąd w składniku lub zależności? Czy jest to problem z komunikacją?
- Ilu użytkowników dotyczy błąd? Jeśli masz więcej niż jeden problem do rozwiązania, co jest najważniejsze?
- Usługa Application Insights instrumentuje aplikację i wysyła dane telemetryczne dotyczące aplikacji podczas jej działania. Zestaw SDK usługi Application Insights można utworzyć w aplikacji lub zastosować instrumentację w czasie wykonywania. Pierwsza metoda jest bardziej elastyczna, ponieważ można dodać własne dane telemetryczne do zwykłych modułów.
- Dane telemetryczne są wysyłane do portalu usługi Application Insights, gdzie są przechowywane i przetwarzane. Chociaż usługa Application Insights jest hostowana na platformie Azure, może monitorować dowolne aplikacje internetowe, a nie tylko aplikacje platformy Azure.
- Dane telemetryczne są prezentowane w postaci wykresów i tabel zdarzeń.
Istnieją dwa główne typy danych telemetrycznych: zagregowane i nieprzetworzone wystąpienia.
- Dane wystąpienia mogą zawierać raport żądania otrzymanego przez aplikację internetową. Szczegóły żądania można znaleźć i sprawdzić za pomocą narzędzia wyszukiwania w portalu usługi Application Insights. Wystąpienie może zawierać dane, takie jak czas odpowiedzi aplikacji na żądanie i żądany adres URL oraz przybliżona lokalizacja klienta.
- Zagregowane dane obejmują liczbę zdarzeń na godzinę jednostkową, dzięki czemu można porównać częstotliwość żądań z czasem odpowiedzi. Zawiera również średnie metryk, takie jak czasy odpowiedzi na żądanie.
Główne kategorie danych to:
- Żądania do aplikacji (zwykle żądania HTTP) z danymi w adresie URL, czasie odpowiedzi i powodzeniu lub niepowodzeniu.
- Zależności, takie jak wywołania REST i SQL wykonywane przez aplikację, również z identyfikatorem URI, czasem odpowiedzi i powodzeniem.
- Wyjątki, w tym ślady stosu.
- Dane widoku strony pochodzące z przeglądarek użytkowników.
- Metryki, takie jak liczniki wydajności i metryki, które piszesz samodzielnie.
- Zdarzenia niestandardowe, których można użyć do śledzenia zdarzeń biznesowych.
- Ślady dzienników używane do debugowania.
Usługa internetowa Realu Madryt Football Club służy około 450 milionów fanów na całym świecie. Fani uzyskują do niego dostęp za pośrednictwem przeglądarek internetowych i aplikacji mobilnych klubu. Fani mogą rezerwować bilety, a także uzyskiwać dostęp do informacji i klipów wideo na temat wyników, graczy i nadchodzących gier. Mogą wyszukiwać za pomocą filtrów, takich jak liczba strzelonych bramek. Istnieją również linki do mediów społecznościowych. Środowisko użytkownika jest wysoce spersonalizowane i jest zaprojektowane jako dwukierunkowa komunikacja w celu zaangażowania fanów.
Rozwiązanie to system usług i aplikacji na platformie Azure. Skalowalność jest kluczowym wymaganiem. Ruch jest zmienny i może osiągać duże ilości podczas dopasowań i wokół niego.
Dla Realu Madryt ważne jest monitorowanie wydajności systemu. Usługa Application Insights zapewnia kompleksowy widok w całym systemie w celu zapewnienia niezawodnego i wysokiego poziomu usług.
Klub uzyskuje również dogłębne zrozumienie swoich fanów, jak to, gdzie są (tylko 3% są w Hiszpanii), jakie zainteresowanie mają w zawodnikach, historycznych wynikach i nadchodzących meczach, a także o tym, jak reagują na wyniki meczu.
Większość tych danych telemetrycznych jest automatycznie zbierana bez dodatkowego kodu, co upraszcza rozwiązanie i zmniejsza złożoność operacyjną. Dla Realu Madryt usługa Application Insights zajmuje się co miesiąc 3,8 miliarda punktów telemetrycznych.
Real Madryt używa modułu usługi Power BI do wyświetlania telemetrii.
Aktywna diagnostyka to ostatnia funkcja. Bez żadnej specjalnej konfiguracji usługa Application Insights automatycznie wykrywa i ostrzega o nietypowych wzrostach liczby niepowodzeń w aplikacji. Jest wystarczająco inteligentny, aby zignorować tło okazjonalnych awarii, a także wzrosty, które są po prostu proporcjonalne do wzrostu żądań.
Na przykład może wystąpić błąd w jednej z usług, od których zależysz. A może nowa wdrożona kompilacja nie działa dobrze. Dowiesz się o tym zaraz po zapoznaniu się z twoją pocztą e-mail. Istnieją również elementy webhook umożliwiające wyzwalanie innych aplikacji.
Inny aspekt tej funkcji wykonuje codzienną szczegółową analizę danych telemetrycznych, szukając nietypowych wzorców wydajności, które są trudne do odnalezienia. Na przykład może znaleźć niską wydajność skojarzoną z określonym obszarem geograficznym lub z określoną wersją przeglądarki.
W obu przypadkach alert informuje o wykrytych objawach. Udostępnia również dane potrzebne do zdiagnozowania problemu, takie jak odpowiednie raporty wyjątków.
Klient Samtec powiedział: "Podczas ostatniej migracji jednorazowej funkcji znaleźliśmy nieskalowanej bazy danych, która osiągała limity zasobów i powodowała przekroczenia limitu czasu. Alerty proaktywnego wykrywania pojawiły się dosłownie, ponieważ klasyfikacja problemu była bardzo zbliżona do czasu rzeczywistego, jak anonsowana. Ten alert w połączeniu z alertami platformy Azure pomógł nam niemal natychmiast rozwiązać ten problem. Łączny przestój <10 minut".
Wdrażanie najnowszej kompilacji może być niepokój. Jeśli występują jakiekolwiek problemy, chcesz wiedzieć o nich od razu, aby można było wycofać się w razie potrzeby. Strumień metryk na żywo zapewnia kluczowe metryki z opóźnieniem około jednej sekundy.
Umożliwia natychmiastowe sprawdzenie próbki wszelkich błędów lub wyjątków.
Mapa aplikacji automatycznie odnajduje topologię aplikacji. Zawiera on informacje o wydajności na mapie, aby umożliwić łatwe identyfikowanie wąskich gardeł wydajności i problematycznych przepływów w środowisku rozproszonym. Za pomocą mapy aplikacji można odnajdywać zależności aplikacji w usługach platformy Azure.
Problem można sklasyfikować, sprawdzając, czy jest związany z kodem, czy jest związany z zależnością. W jednym miejscu możesz przejść do szczegółów powiązanego środowiska diagnostyki. Na przykład aplikacja może zakończyć się niepowodzeniem z powodu obniżenia wydajności w warstwie SQL. Za pomocą mapy aplikacji możesz natychmiast zobaczyć ją i przejść do szczegółów interfejsu doradcy indeksu SQL lub analizy zapytań.
Usługa Log Analytics umożliwia pisanie dowolnych zapytań w zaawansowanym języku przypominającym język SQL. Diagnozowanie całego stosu aplikacji staje się łatwe w miarę łączenia się z różnymi perspektywami. Następnie możesz zadać odpowiednie pytania, aby skorelować wydajność usługi z metrykami biznesowymi i środowiskiem klienta.
Możesz wykonywać zapytania dotyczące wszystkich wystąpień telemetrii i danych pierwotnych metryk przechowywanych w portalu. Język obejmuje operacje filtrowania, sprzężenia, agregacji i innych operacji. Pola można obliczyć i przeprowadzić analizę statystyczną. Dostępne są wizualizacje tabelaryczne i graficzne.
Na przykład łatwo jest:
- Segmentuj dane wydajności żądań aplikacji według warstw klientów, aby zrozumieć ich środowisko.
- Wyszukaj określone kody błędów lub niestandardowe nazwy zdarzeń podczas badania witryn na żywo.
- Przejdź do szczegółów użycia aplikacji określonych klientów, aby dowiedzieć się, w jaki sposób funkcje są uzyskiwane i wdrażane.
- Śledź sesje i czasy odpowiedzi dla określonych użytkowników, aby umożliwić zespołom pomocy technicznej i zespołom operacyjnym zapewnienie natychmiastowej obsługi klienta.
- Określanie często używanych funkcji aplikacji w celu udzielenia odpowiedzi na pytania dotyczące priorytetyzacji funkcji.
Nazwa sieci rozproszonej klienta powiedziała: "Usługa Application Insights dostarczyła nam brakującej części równania, aby móc w razie potrzeby łączyć, sortować, wykonywać zapytania i filtrować dane. Umożliwienie naszemu zespołowi używania własnej pomysłowości i doświadczenia w znajdowaniu danych za pomocą zaawansowanego języka zapytań pozwoliło nam znaleźć szczegółowe informacje i rozwiązać problemy, o których nawet nie wiedzieliśmy. Wiele interesujących odpowiedzi pochodzi z pytań rozpoczynających się od "Zastanawiam się, czy...".
Usługa Application Insights integruje się z narzędziami programistycznymi.
Programy Visual Studio i Eclipse mają narzędzia do konfigurowania poprawnych pakietów zestawu SDK dla opracowywanych projektów. Istnieje polecenie menu umożliwiające dodanie usługi Application Insights.
Jeśli używasz struktury rejestrowania śledzenia, takiej jak Log4N, NLog lub System.Diagnostics.Trace, możesz wysłać dzienniki do usługi Application Insights wraz z innymi danymi telemetrycznymi, aby można było łatwo skorelować ślady z żądaniami, wywołaniami zależności i wyjątkami.
Podczas opracowywania i debugowania funkcji można wyświetlać i przeszukiwać dane telemetryczne bezpośrednio w programie Visual Studio. Możesz użyć tych samych obiektów wyszukiwania, co w portalu internetowym.
Gdy usługa Application Insights rejestruje wyjątek, możesz wyświetlić punkt danych w programie Visual Studio i przejść bezpośrednio do odpowiedniego kodu.
Podczas debugowania można zachować dane telemetryczne na komputerze deweloperskim. Można go wyświetlić w programie Visual Studio bez wysyłania go do portalu. Ta opcja lokalna pozwala uniknąć mieszania debugowania z telemetrią produkcyjną.
Po wyświetleniu alertu usługa Application Insights może automatycznie utworzyć element roboczy w systemie śledzenia pracy.