Alerty: błędy oparte na logach dotyczące tematów Pub/Sub

1. Wprowadzenie

Ostatnia aktualizacja: 21 czerwca 2023 r.

Alerty dotyczące dostępności opartych na logach

Alerty oparte na logach mogą być używane do określania dostępności aplikacji przez monitorowanie określonych zdarzeń lub wzorców w logach*. Dzięki powiadomieniom o przerwach w działaniu usługi lub innych problemach napotykanych przez użytkowników możesz podjąć działania mające na celu zminimalizowanie tego negatywnego wpływu na użytkowników i klientów.

Kontrole dostępności podają ogólne informacje o dostępności, jednak trafniejsze może być użycie komunikatów o błędach pochodzących z logów jako wskaźników konkretnych typów niedostępności i określenia odsetka użytkowników, których dotyczy dany problem.

Błędy mogą mieć wiele przyczyn – od błędów użytkownika po konserwację i aktualizacje systemów, a nawet czynniki zewnętrzne, takie jak zła pogoda. Najważniejsze w ostrzeganiu ostrzeżenia nie jest przewidywanie wszystkich możliwych przyczyn, lecz wybranie kilku kluczowych objawów, które mogą posłużyć za punkt wyjścia do rozwiązania problemu.

Tematy Pub/Sub jako kanał powiadomień o alertach

Temat Pub/Sub może być używany jako kanał powiadomień Google Cloud Monitoring do wysyłania alertów do subskrypcji Pub/Sub. Pozwala to zintegrować alerty Cloud Monitoring z innymi systemami, w tym z usługami powiadomień innych firm.

Aby użyć tematu Pub/Sub jako kanału powiadomień, musisz najpierw utworzyć temat Pub/Sub i subskrypcję Pub/Sub. Następnie musisz utworzyć kanał powiadomień Cloud Monitoring, w którym miejscem docelowym będzie temat Pub/Sub.

Po uruchomieniu alertu Cloud Monitoring wyśle wiadomość do tematu Pub/Sub. Subskrybent subskrypcji Pub/Sub może następnie przetworzyć wiadomość i podjąć odpowiednie działanie.

Co utworzysz

W ramach tego ćwiczenia w Codelabs dowiesz się, jak wdrożyć aplikację, utworzyć temat Pub/Sub oraz utworzyć oparty na logach alert, który sprawdza błędy w konkretnej części aplikacji i wykorzystuje temat Pub/Sub jako kanał powiadomień.

Czego się nauczysz

  • Jak utworzyć temat Pub/Sub
  • Jak utworzyć alert oparty na logach

To ćwiczenia w Codelabs dotyczą tworzenia alertów dotyczących błędów. Nieistotne koncepcje i kod aplikacji zostały zamaskowane. Można je po prostu skopiować i wkleić.

Czego potrzebujesz

  • Konto Google Cloud z uprawnieniami do:
  • Wdrażanie aplikacji Cloud Run
  • Tworzenie tematów Pub/Sub
  • Tworzenie alertów

2. Przygotowanie

Wybierz lub utwórz projekt Google Cloud

Aby wybrać istniejący projekt, skorzystaj z menu:

b35bf95b8bf3d5d8.png

Aby utworzyć nowy projekt w Google Cloud, wykonaj te czynności:

  1. Otwórz konsolę Google Cloud Platform.
  2. Kliknij przycisk Utwórz projekt.
  3. Wpisz nazwę projektu.
  4. Wybierz konto rozliczeniowe dla projektu.
  5. Kliknij przycisk Utwórz.

Twój projekt zostanie utworzony i przejdziesz do panelu projektu. Następnie możesz zacząć korzystać z usług Google Cloud.

Oto dodatkowe informacje o każdym z tych kroków:

  • Nazwa: nazwa projektu musi być niepowtarzalna w obrębie organizacji.
  • Konto rozliczeniowe: możesz użyć istniejącego konta rozliczeniowego lub utworzyć nowe.
  • Tworzenie: po wpisaniu wszystkich wymaganych informacji kliknij przycisk Utwórz, aby utworzyć projekt.

Więcej informacji znajdziesz w dokumentacji Google Cloud dotyczącej tworzenia projektów.

3. Wdrażanie aplikacji API

Czego dotyczy przykładowa aplikacja lub interfejs API?

Nasza aplikacja to prosta aplikacja Inventory API, która udostępnia punkt końcowy interfejsu API REST z kilkoma operacjami w celu wyświetlania listy elementów asortymentu i pobierania określonej liczby zasobów.

Po wdrożeniu interfejsu API, zakładając, że jest on hostowany pod adresem https://<jakiśhost>, możemy uzyskać dostęp do jego punktów końcowych w następujący sposób:

https://<somehost>/inventory

Spowoduje to wyświetlenie listy wszystkich produktów, które mają dostępne poziomy asortymentu.

https://<somehost>/inventory/{productid}

Dzięki temu uzyskasz pojedynczy rekord z identyfikatorem produktu oraz dostępnym poziomem asortymentu dla tego produktu.

Zwracane dane odpowiedzi są w formacie JSON.

Uwaga: ta aplikacja interfejsu API służy wyłącznie do celów demonstracyjnych i nie przedstawia bezpiecznej ani niezawodnej implementacji interfejsu API. Chodzi o to, aby mieć do dyspozycji szybką aplikację do poznania głównego celu modułu, czyli Google Cloud Operations.

Przykładowe dane i żądanie/odpowiedź interfejsu API

Dla uproszczenia aplikacja nie korzysta z bazy danych w backendzie. Zawiera on 3 przykładowe identyfikatory produktów i ich dostępne poziomy asortymentu.

Identyfikator produktu

Poziom lokalnego asortymentu

I-1

10

I-2

20

I-3

30

Przykładowe żądanie i odpowiedź do interfejsu API znajdziesz poniżej:

Żądanie do interfejsu API

Odpowiedź interfejsu API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Klonowanie repozytorium

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:

bce75f34b2c53987.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

f6ef2b5f13479f3a.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.

Skonfiguruj gcloud

W Cloud Shell ustaw identyfikator projektu i zapisz go jako zmienną PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

Teraz uruchom to polecenie:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Spowoduje to utworzenie w nim folderu cloud-code-sample-repository.

(Opcjonalnie) Uruchamianie aplikacji w Cloud Shell

Aby uruchomić aplikację lokalnie, wykonaj te czynności:

  1. W terminalu przejdź do wersji interfejsu API w języku Python za pomocą tego polecenia:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. W terminalu wpisz to polecenie (w chwili pisania do Cloud Shell zainstalowany jest Python 3.9.x i będziemy korzystać z wersji domyślnej. Jeśli chcesz uruchomić ją lokalnie na laptopie, możesz użyć Pythona 3.8 lub nowszego:

$ python app.py

  1. Aby lokalnie uruchomić serwer Pythona, możesz uruchomić poniższe polecenie.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Kliknij Podgląd na porcie 8080. 5. Otworzy się okno przeglądarki. Wyświetli się błąd 404, a to nie problem. Zmodyfikuj URL i zadbaj o to, aby po nazwie hosta pojawiał się tylko ciąg /inventory.

Na przykład: na moim komputerze wygląda to tak:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Pojawi się lista pozycji asortymentu, jak wyjaśniliśmy wcześniej:

709d57ee2f0137e4.png

  1. Aby zatrzymać serwer teraz, przejdź do terminala i naciśnij klawisze Ctrl+C.

Wdrażanie aplikacji

Teraz wdrożymy tę aplikację API w Cloud Run. W procesie wdrażania kodu w Cloud Run trzeba było skorzystać z klienta wiersza poleceń gcloud.

W terminalu wpisz to polecenie gcloud:

$ gcloud run deploy --source .

Zada Ci to kilka pytań. Poniżej znajdziesz niektóre z nich:

  1. Nazwa usługi (python-flask-api): użyj tej wartości domyślnej lub wybierz coś w rodzaju my-inventory-api
  2. Interfejs API [run.googleapis.com] nie został włączony w projekcie [613162942481]. Czy chcesz włączyć tę funkcję i spróbować ponownie (zajmie to kilka minut)? (y/N)? T
  3. Określ region: wybierz 31 (us-west-1)
  4. W projekcie [613162942481] nie włączono interfejsu API [artifactregister.googleapis.com]. Czy chcesz włączyć tę funkcję i spróbować ponownie (zajmie to kilka minut)? (y/N)? T
  5. Wdrożenie ze źródła wymaga repozytorium Dockera w Artifact Registry do przechowywania utworzonych kontenerów. Zostanie utworzone repozytorium o nazwie [cloud-run-source-deploy] w regionie [us-west1].
  6. Czy chcesz kontynuować (T/n)? T
  7. Zezwolić na nieuwierzytelnione wywołania [my-inventory-api] (y/N)? T

W końcu spowoduje to uruchomienie procesu pobierania kodu źródłowego, skonteneryzowania go, wypchnięcia do Artifact Registry, a następnie wdrożenia usługi i wersji Cloud Run. Prosimy o cierpliwość (może to potrwać 3–4 minuty). Proces powinien się zakończyć wraz z wyświetlanym adresem URL usługi.

Przykładowe uruchomienie:

87ba8dbf88e8cfa4.png

Testowanie aplikacji

Po wdrożeniu aplikacji w Cloud Run możesz uzyskać dostęp do aplikacji API w ten sposób:

  1. Zapisz adres URL usługi z poprzedniego kroku. Na przykład w mojej konfiguracji jest on wyświetlany jako https://my-inventory-api-bt2r5243dq-uw.a.run.app. Nazwijmy go <SERVICE_URL>.
  2. Otwórz przeglądarkę i otwórz te 3 adresy URL punktów końcowych interfejsu API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Powinna ona być zgodna ze specyfikacją, którą przedstawiliśmy we wcześniejszej sekcji z przykładowymi żądaniami i odpowiedziami do interfejsu API.

Pobieranie szczegółów usługi z Cloud Run

Wdrożyliśmy naszą usługę API w Cloud Run – bezserwerowym środowisku obliczeniowym. Usługę Cloud Run możemy w każdej chwili otworzyć w konsoli Google Cloud.

W menu głównym otwórz Cloud Run. Spowoduje to wyświetlenie listy usług uruchomionych w Cloud Run. Powinna być widoczna wdrożona przed chwilą usługa. W zależności od wybranej nazwy powinna wyświetlić się nazwa podobna do tej:

2633965c4bc957cc.png

Kliknij nazwę usługi, aby wyświetlić szczegóły. Szczegóły przykładu znajdziesz poniżej:

33042ae64322ce07.png

Zwróć uwagę na adres URL, który jest tylko adresem URL usługi, który możesz wpisać w przeglądarce i uzyskać dostęp do wdrożonego właśnie interfejsu Inventory API. Sprawdź Wskaźniki i inne informacje.

Zacznijmy teraz od Google Cloud Operations Suite.

4. Utwórz temat Pub/Sub, aby otrzymywać powiadomienie o alertach

Aby utworzyć temat Pub/Sub, możesz wykonać te czynności w konsoli Google Cloud:

  1. W polu wyszukiwania wyszukaj Pub/Sub i przejdź do Pub/Sub. 935028bd8f6328ef.png
  2. Kliknij kartę Tematy, jeśli nie jest ona jeszcze otwarta. 7fd8bf91386a88fd.png
  3. Kliknij przycisk Utwórz temat. cd9d197f9023c41b.png
  4. Wpisz rozpoznawalną nazwę tematu.

173f313b4a3c4934.png

  1. Kliknij przycisk Utwórz. ca9a02477da21a44.png
  2. Skopiuj Nazwę tematu, korzystając z ikony kopiowania. Będzie Ci on potrzebny w następnej sekcji.

20848252ee83df93.png

5. Utwórz zasadę tworzenia alertów dla błędów

Badanie logów błędów

Aby wyświetlić logi błędów aplikacji:

Kliknij kartę Logging (Logowanie).

Wyświetli się interfejs logów, w którym możesz zaznaczyć lub odznaczyć różne zasoby (projekt, zasoby Google Cloud, nazwy usług itp.) oraz poziomy logów, aby filtrować komunikaty logu według potrzeb.

6605b68395185b89.png

Symulowanie kilku nieprawidłowych żądań do usługi asortymentu, podając identyfikatory produktów, które nie należą do I-1, I-2 ani I-3. Na przykład: nieprawidłowe żądanie:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Jeśli w zapytaniu podany zostanie nieprawidłowy identyfikator produktu, będziemy teraz wyszukiwać wszystkie ostrzeżenia wygenerowane przez nasz interfejs API.

Tworzenie niestandardowej zasady tworzenia alertów opartej na logach dla błędów

Załóżmy, że chcemy wystrzegać się wyświetlenia bardzo konkretnego komunikatu o błędzie w części aplikacji. Powiedz, jeśli zauważysz dużą liczbę błędów podczas wyszukiwania identyfikatorów produktów. Ten problem jest objawem wielu możliwych problemów (nieprawidłowego linku, niespójności w bazie danych lub bota wyliczającego naszą witrynę). Trudno byłoby sobie wyobrazić każdą potencjalną przyczynę, ale aplikacja, która wysyła tę wiadomość nawet raz, stanowi problem ogólny, o którym chcemy wiedzieć. Aby móc wysyłać alerty na ten temat, musimy utworzyć zasadę na podstawie danych z naszych dzienników błędów.

  1. W polu zapytania wstaw następujące parametry zapytania:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "OSTRZEŻENIE w aplikacji: odebrano żądanie asortymentu dla nieprawidłowego identyfikatora produktu"

Powinna wyglądać mniej więcej tak:

f672154cfebf0051.png

  1. Kliknij Uruchom zapytanie. Zostaną wyświetlone wszystkie przesłane prośby i których dotyczy ten problem.

77c190e3a2fab6bf.png

  1. Aby przekonwertować powyższe informacje w alert, po prawej stronie kliknij przycisk Utwórz alert w eksploratorze logów tuż pod polem zapytania:

4cd3fcf142189376.png

  1. Spowoduje to wyświetlenie formularza umożliwiającego utworzenie zasad tworzenia alertów na podstawie logów.

b82446854bad87fc.png

  1. Użyj wstępnego zapytania o logi, które mają zostać uwzględnione w alercie:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. Ustaw częstotliwość powiadomień i czas trwania incydentu. Na potrzeby tego przykładu możesz użyć minimalnej wartości dla każdego z tych atrybutów:

bb3d96448ec998a1.png

  1. I ostatnia sprawa – „Kogo powiadamiać?” wybierz utworzony wcześniej kanał powiadomień Pub/Sub:

3593c48c29d4b76c.png

  1. Kliknij Zapisz. Aby wyświetlić zasady tworzenia alertów i nimi zarządzać, otwórz stronę Alerty w sekcji Zasady: ca08ea380fb37c91.png

6. Gratulacje

Gratulacje! Udało Ci się skonfigurować kontrolę dostępności tak, aby wysyłała alerty do Pub/Sub.