Ćwiczenie — tworzenie modelu kondycji aplikacji

Ukończone

Firma Contoso Shoes potrzebuje sposobu wykrywania, diagnozowania i przewidywania problemów w tej architekturze. Chcesz utworzyć model kondycji, który jest wymierny za pomocą stanu kondycji zastosowanego do przepływów użytkownika i systemu. Celem jest zidentyfikowanie potencjalnych punktów awarii, zanim spowodują awarię.

Bieżący stan i problem

Do tej pory dodano interfejs API sprawdzania kondycji i utworzono funkcje wieloregionowe w architekturze. Nie ma jednak możliwości uzyskania wglądu w złożoną topologię obejmującą przepływy użytkowników i systemu. Należy wypełnić tę lukę, aby zespół SRE mógł szybko identyfikować i rozwiązywać problemy.

W niedawnym zdarzeniu zespół nie mógł zobaczyć kaskadowego wpływu problemu wynikającego ze składnika interfejsu API wpływającego na jego zależności platformy. W rozwiązywaniu problemów było dużo czasu, ponieważ nie można od razu zauważyć składnika w złej kondycji. Ostatecznie nieefektywność ta doprowadziła do dłuższych przestojów, co spowodowało utratę finansową firmy.

Specyfikacja

  • Zaprojektuj model kondycji, który pokazuje relację między wszystkimi składnikami architektury, w tym składnikami aplikacji i zależnościami platformy. Uwzględnianie elementów istniejących w przepływie żądania, w tym bramy, obliczeń, baz danych, magazynu, pamięci podręcznych itd. Obejmują również składniki, które zwykle istnieją poza przepływem żądania. Na przykład artefakty Open Container Initiative (OCI), magazyny wpisów tajnych, usługi konfiguracji i inne. Wszystkie usługi platformy Azure muszą być skonfigurowane do wysyłania danych diagnostycznych.

  • Dodaj ujednolicony ujście danych w architekturze na potrzeby zbierania danych z różnych źródeł.

  • Zdefiniuj ogólny stan kondycji na podstawie zagregowanych dzienników historycznych i metryk. Reprezentuje stan w jednym z trzech stanów kondycji: w złej kondycji, obniżonej wydajności i dobrej kondycji.

  • Wizualizowanie stanu kondycji wszystkich składników w hierarchii reprezentującej wszystkie przepływy.

Aby rozpocząć projektowanie, zalecamy wykonanie następujących kroków:

Ważne

Modelowanie kondycji to kompleksowe ćwiczenie. Podejście w tej sekcji ma pomóc w rozpoczęciu pracy. Rozbudowane stosowanie modelu do wszystkich przepływów funkcjonalnych i niefunkcjonalnych w projekcie o krytycznym znaczeniu w celu uzyskania całościowego widoku systemu.

1 — Rozpoczynanie modelowania kondycji

To ćwiczenie jest teoretyczne. Modelowanie kondycji w działaniu projektowania najwyższego poziomu, w którym potrzebna będzie kompleksowa lista składników używanych w architekturze. Ta lista powinna zawierać wszystkie składniki aplikacji i usługi platformy Azure.

Umieść te składniki na grafie zależności, który pokazuje hierarchiczny widok rozwiązania. Warstwa górna zawiera przepływy użytkownika, które śledzą żądania od użytkownika końcowego do witryny internetowej i przepływa na poziomie interfejsu API aplikacji. Warstwa dolna zawiera przepływy systemowe z usług platformy Azure. Mapuj również zależności między zasobami platformy Azure.

Wykres powinien wyglądać mniej więcej tak:

Diagram przedstawiający wykres zależności dla modelu kondycji.

Sprawdzanie postępu: kondycja aplikacji warstwowej

2 — Definiowanie wyników kondycji

Dla każdego składnika zbierz metryki i progi metryk, a następnie określ wartość, w której składnik powinien być uznawany za w dobrej kondycji, obniżonej wydajności i złej kondycji. Ta decyzja powinna mieć wpływ na oczekiwaną wydajność i niefunkcjonalne wymagania biznesowe. Kategoryzuj metryki jako:

  • Metryki aplikacji: punkty danych z kodu aplikacji, takie jak liczba wyjątków.

  • Metryki usługi: punkty danych z usług platformy Azure, takie jak używane jednostki DTU (Database Transaction Units).

  • Metryki rozwiązania: punkty danych na poziomie rozwiązania, takie jak czas kompleksowego przetwarzania żądania.

Oto przykład dla usług aplikacja systemu Azure:

App Services Kondycja
Czas < odpowiedzi 200 ms — błędy
< serwera HTTP 2
Pokazuje stan zielonej kondycji.
Czas < odpowiedzi 500 ms — błędy
< serwera HTTP 2
Pokazuje obniżony stan żółty.
Czas > odpowiedzi 500 ms — błędy
> serwera HTTP 2
Pokazuje stan czerwony w złej kondycji

3 — Definiowanie ogólnego stanu kondycji

Dla każdego przepływu użytkownika i systemu zdefiniuj ogólny stan. Należy zagregować stan kondycji poszczególnych składników, które uczestniczą w tym przepływie.

Załóżmy, że przepływ systemu składa się ze składnika aplikacji, planu usługi aplikacja systemu Azure i usługi App Services.

interfejs API Plan usługi App Service App Services Kondycja
Maksymalne opóźnienie < 30 ms Procesor CPU % < 70%
długości < kolejki HTTP 5
Czas < odpowiedzi 200 ms — błędy
< serwera HTTP 2
Stan dobrej kondycji złożony pokazany jako zielony.
Maksymalne opóźnienie < 30 ms Procesor CPU % < 90%
długości < kolejki HTTP 5
Czas < odpowiedzi 500 ms — błędy
< serwera HTTP 2
Stan obniżonej wydajności złożonej jest wyświetlany jako żółty.
Maksymalne opóźnienie > 30 ms Procesor CPU % > 90%
długości > kolejki HTTP 5
Czas > odpowiedzi 500 ms — błędy
> serwera HTTP 2
Stan złej kondycji złożonej jest wyświetlany jako czerwony.

Wynik kondycji przepływu użytkownika powinien być reprezentowany przez najniższy wynik we wszystkich zamapowanych składnikach. W przypadku przepływów systemowych zastosuj odpowiednie wagi na podstawie krytycznego działania firmy. Między dwoma przepływami należy określić priorytety przepływów użytkowników o znaczeniu finansowym lub przepływach użytkowników przeznaczonych dla klientów.

Sprawdzanie postępu: Przykład — model kondycji warstwowej

4 — Zbieranie danych monitorowania

Potrzebny będzie ujednolicony ujście danych w każdym regionie, który zbiera dzienniki i metryki dla wszystkich usług aplikacji i platform wdrożonych w ramach sygnatury regionalnej. Potrzebujesz innego ujścia do przechowywania metryk emitowanych z zasobów globalnych, takich jak Azure Front Door i Cosmos DB.

Diagram przedstawiający zbieranie danych z różnych usług aplikacji i platform.

Wybór technologi

  • aplikacja systemu Azure Insights: służy do zbierania wszystkich danych telemetrycznych aplikacji.
  • Dzienniki usługi Azure Monitor: zbiera dane wysyłane przez usługę Application Insights i metryki platformy dla usług platformy Azure.
  • Azure Log Analytics: służy jako centralne narzędzie do analizowania dzienników i metryk ze wszystkich składników aplikacji i infrastruktury.

Sprawdzanie postępu: Ujednolicony ujście danych na potrzeby skorelowanej analizy

5 — Konfigurowanie zapytań dotyczących danych monitorowania

język zapytań Kusto (KQL) jest dobrze zintegrowana z usługą Log Analytics. Zaimplementuj niestandardowe zapytania KQL jako funkcje w celu pobrania danych z usługi Azure Monitor.

Przechowuj zapytania niestandardowe w repozytorium kodu, aby były importowane i stosowane automatycznie w ramach potoków ciągłej integracji/ciągłego dostarczania (CI/CD).

6 — Wizualizowanie stanu kondycji

Wykres zależności można wizualizować przy użyciu wyników kondycji z reprezentacją światła ruchu. Użyj narzędzi, takich jak pulpity nawigacyjne platformy Azure, skoroszyty monitora lub narzędzie Grafana. Oto przykład:

Diagram przedstawiający przykładowy wynik kondycji na wykresie zależności.

Sprawdzanie postępu: Wizualizacja

7 — Konfigurowanie alertów dotyczących zmian stanu

Pulpity nawigacyjne z alertami powinny być używane do natychmiastowego zwracania uwagi na problemy.

Jeśli stan kondycji składnika zmieni się na Obniżona lub Zła kondycja, operator powinien zostać natychmiast powiadomiony. Ustaw alerty w węźle głównym, ponieważ każda zmiana w tym węźle wskazuje stan złej kondycji w podstawowych przepływach lub zasobach użytkownika.

Sprawdzanie postępu: Alerty

Sprawdź swoją pracę

Obejrzyj ten pokaz na temat monitorowania i modelowania kondycji. Czy wszystkie aspekty zostały omówione w projekcie?

  • Czy masz ujednolicony ujście danych do skorelowanej analizy?
  • Czy uwzględniono dzienniki aplikacji, metryki platformy i punkty danych rozwiązania?
  • Czy skonfigurowaliśmy pulpity nawigacyjne w celu wizualizacji stanu kondycji wszystkich składników?
  • Czy rozważano punkty awarii w każdej usłudze (lub jej części), które mogłyby spowodować awarię lub uniemożliwić skalowanie, wdrażanie, monitorowanie?
  • Czy rozważasz użycie pakietów zapytań do przechwytywania kluczowych zapytań, które mogłyby pomóc w szybszym klasyfikowaniu problemów?
  • Czy interfejs API sprawdzania kondycji był przydatny w tym modelu? Czy musisz zmienić ten interfejs API, aby lepiej pasował do modelu kondycji?

Test wiedzy

1.

Co należy uwzględnić w wyniku kondycji, który reprezentuje ogólny stan kondycji aplikacji?

2.

Które z tych usług platformy Azure można używać jako ujednoliconego ujścia danych na potrzeby telemetrii i analizy?