1. Wprowadzenie
Ostatnia aktualizacja: 21 czerwca 2023 r.
Alerty o błędach w logach dotyczących dostępności
Alerty oparte na logach mogą służyć do określania dostępności aplikacji przez monitorowanie określonych zdarzeń lub wzorców w logach*. Dzięki powiadomieniom o awariach i innych problemach, które mogą mieć wpływ na użytkowników, możesz podjąć działania, aby zminimalizować ich wpływ na użytkowników i klientów.
Kontrole dostępności zapewniają ogólny obraz dostępności, ale dokładniejsze mogą być komunikaty o błędach pochodzące z logów, które wskazują bardziej szczegółowe rodzaje niedostępności i pomagają określić, jaka część użytkowników ma 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. W przypadku alertów nie chodzi o przewidywanie wszystkich możliwych przyczyn, ale o wybranie kilku kluczowych problemów, które mogą stanowić punkt wyjścia do rozwiązywania problemów.
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. Umożliwia to integrację alertów 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, który używa tematu Pub/Sub jako miejsca docelowego.
Gdy alert zostanie wywołany, Cloud Monitoring wyśle wiadomość do tematu Pub/Sub. Subskrybent subskrypcji Pub/Sub może następnie przetworzyć wiadomość i podjąć odpowiednie działania.
Co utworzysz
W tym ćwiczeniu wdrożysz aplikację, utworzysz temat Pub/Sub i utworzysz alert oparty na logach, który sprawdza błędy w określonej części aplikacji i używa tematu Pub/Sub jako kanału powiadomień.
Czego się nauczysz
- Jak utworzyć temat Pub/Sub
- Jak utworzyć alert oparty na logach
To ćwiczenie koncentruje się na tworzeniu alertu o błędach. 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. Przygotowania
Wybieranie lub tworzenie projektu Google Cloud
Aby wybrać istniejący projekt, użyj menu:

Aby utworzyć nowy projekt w Google Cloud, wykonaj te czynności:
- Otwórz konsolę Google Cloud Platform.
- Kliknij przycisk Utwórz projekt.
- Wpisz nazwę projektu.
- Wybierz konto rozliczeniowe projektu.
- Kliknij przycisk Utwórz.
Projekt zostanie utworzony i wyświetli się jego panel. Następnie możesz zacząć korzystać z usług Google Cloud.
Oto dodatkowe informacje o poszczególnych krokach:
- Nazwa: nazwa projektu musi być unikalna w obrębie organizacji.
- Konto rozliczeniowe: możesz użyć istniejącego konta rozliczeniowego lub utworzyć nowe.
- Utwórz: 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 służącymi do wyświetlania listy produktów i pobierania liczby produktów w magazynie.
Po wdrożeniu interfejsu API i przy założeniu, że jest on hostowany pod adresem https://<somehost>, możemy uzyskać dostęp do jego punktów końcowych w ten sposób:
https://<somehost>/inventory
Wyświetli to listę wszystkich produktów z poziomami zapasów.
https://<somehost>/inventory/{productid}
Spowoduje to utworzenie pojedynczego rekordu z identyfikatorem produktu i poziomem zapasów dostępnych dla tego produktu.
Zwrócone dane odpowiedzi są w formacie JSON.
Uwaga: ta aplikacja interfejsu API służy wyłącznie do celów demonstracyjnych i nie stanowi bezpiecznej ani niezawodnej implementacji interfejsu API. Ma to być szybka aplikacja, która pozwoli nam poznać główny cel tego modułu, czyli operacje w Google Cloud.
Przykładowe dane oraz żądanie i odpowiedź interfejsu API
Aplikacja nie jest oparta na bazie danych w backendzie, aby uprościć jej działanie. Zawiera 3 przykładowe identyfikatory produktów i ich poziomy zapasów.
Identyfikator produktu | Poziom zapasów |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Przykładowe żądanie do interfejsu API i odpowiedź są widoczne poniżej:
Żądanie do interfejsu API | Odpowiedź interfejsu API |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -1} |
Klonowanie repozytorium
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

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

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce.
Konfigurowanie 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
W tym folderze zostanie utworzony folder o nazwie cloud-code-sample-repository.
(Opcjonalnie) Uruchom aplikację w Cloud Shell
Aby uruchomić aplikację lokalnie, wykonaj te czynności:
- W terminalu przejdź do wersji interfejsu API w języku Python, wpisując to polecenie:
$ cd cloud-code-sample-repository
$ cd python-flask-api
- W terminalu wpisz to polecenie (w momencie pisania tego artykułu w Cloud Shell jest zainstalowany Python 3.9.x, więc użyjemy wersji domyślnej): Jeśli planujesz uruchomić go lokalnie na laptopie, możesz użyć Pythona 3.8 lub nowszego:
$ python app.py
- Aby uruchomić serwer Pythona lokalnie, możesz wykonać to polecenie.

Kliknij Podejrzyj na porcie 8080. 5. Otworzy się okno przeglądarki. Pojawi się błąd 404, ale to nic złego. Zmodyfikuj adres URL, aby po nazwie hosta zawierał tylko /inventory.
Na przykład na moim komputerze wygląda to tak:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
Wyświetli to listę produktów w asortymencie, jak opisano wcześniej:

- Możesz teraz zatrzymać serwer, przechodząc do terminala i naciskając Ctrl-C.
Wdrażanie aplikacji
Teraz wdrożymy tę aplikację API w Cloud Run. W tym procesie użyto klienta wiersza poleceń gcloud do uruchomienia polecenia wdrażającego kod w usłudze Cloud Run.
W terminalu wpisz to polecenie gcloud:
$ gcloud run deploy --source .
Zadamy Ci kilka pytań. Niektóre z nich znajdziesz poniżej:
- Nazwa usługi (python-flask-api): możesz użyć tej domyślnej nazwy lub wybrać inną, np. my-inventory-api.
- Interfejs API [run.googleapis.com] nie jest włączony w projekcie [613162942481]. Czy chcesz włączyć i spróbować ponownie (może to potrwać kilka minut)? (y/N)? T
- Podaj region: wybierz 31 (us-west-1)
- Interfejs API [artifactregistry.googleapis.com] nie jest włączony w projekcie [613162942481]. Czy chcesz włączyć i spróbować ponownie (może to potrwać kilka minut)? (y/N)? T
- Wdrażanie z kodu źródłowego wymaga repozytorium Dockera w Artifact Registry do przechowywania skompilowanych kontenerów. W regionie [us-west1] zostanie utworzone repozytorium o nazwie [cloud-run-source-deploy].
- Czy chcesz kontynuować (T/n)? T
- Zezwalać na nieuwierzytelnione wywołania [my-inventory-api] (T/N)? T
W końcu rozpocznie się proces pobierania kodu źródłowego, umieszczania go w kontenerze, przesyłania do Artifact Registry, a następnie wdrażania usługi i wersji Cloud Run. Zachowaj cierpliwość (proces może potrwać 3–4 minuty). Po jego zakończeniu zobaczysz adres URL usługi.
Przykładowe uruchomienie pokazano poniżej:

Testowanie aplikacji
Po wdrożeniu aplikacji w Cloud Run możesz uzyskać do niej dostęp w ten sposób:
- Zapisz adres URL usługi z poprzedniego kroku. Na przykład w moim przypadku jest to
https://my-inventory-api-bt2r5243dq-uw.a.run.app. Nazwijmy to<SERVICE_URL>. - Otwórz przeglądarkę i uzyskaj dostęp do tych 3 adresów URL punktów końcowych interfejsu API:
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
Powinno być zgodne ze specyfikacjami, które podaliśmy w poprzedniej sekcji z przykładowym żądaniem do interfejsu API i przykładową odpowiedzią.
Pobieranie szczegółów usługi z Cloud Run
Wdrożyliśmy naszą usługę API w Cloud Run, bezserwerowym środowisku obliczeniowym. W dowolnym momencie możemy otworzyć usługę Cloud Run w konsoli Google Cloud.
W menu głównym otwórz Cloud Run. Wyświetli się lista usług działających w Cloud Run. Powinna być widoczna wdrożona przed chwilą usługa. W zależności od wybranej nazwy powinien pojawić się ekran podobny do tego:

Kliknij nazwę usługi, aby wyświetlić szczegóły. Szczegóły próbki są widoczne poniżej:

Zwróć uwagę na adres URL, który jest po prostu adresem URL usługi. Możesz go wpisać w przeglądarce i uzyskać dostęp do interfejsu Inventory API, który właśnie wdrożyliśmy. Sprawdź dane i inne szczegóły.
Zacznijmy od pakietu operacyjnego Google Cloud.
4. Tworzenie tematu Pub/Sub do odbierania powiadomień o alercie
Aby utworzyć temat Pub/Sub, wykonaj te czynności w konsoli Google Cloud:
- W polu wyszukiwania wpisz Pub/Sub i otwórz Pub/Sub.

- Jeśli nie jesteś jeszcze na karcie Tematy, kliknij ją.

- Kliknij przycisk Utwórz temat.

- Wpisz rozpoznawalną nazwę tematu.

- Kliknij przycisk Utwórz.

- Skopiuj nazwę tematu, klikając przycisk z ikoną kopiowania. Będzie Ci potrzebny w następnej sekcji.

5. Tworzenie zasad tworzenia alertów dotyczących błędów
Przeglądanie logów błędów
Aby wyświetlić logi błędów aplikacji:
Kliknij kartę Logowanie.
Wyświetli się interfejs logów, w którym możesz wybrać lub odznaczyć różne zasoby (projekt, zasób Google Cloud, nazwy usług itp.) wraz z poziomami logów, aby w razie potrzeby filtrować wiadomości logów.

Symuluj kilka nieprawidłowych żądań do usługi Inventory Service, podając identyfikatory produktów, które nie są równe I-1, I-2 ani I-3. Na przykład nieprawidłowe żądanie to:
https://<SERVICE_URL>/inventory/I-999
Teraz będziemy wyszukiwać wszystkie OSTRZEŻENIA wygenerowane przez nasz interfejs API, gdy w zapytaniu podano nieprawidłowy identyfikator produktu.
Tworzenie niestandardowej zasady tworzenia alertów opartej na logach w przypadku błędów
Załóżmy, że chcemy zwracać uwagę na występowanie bardzo konkretnego komunikatu o błędzie w części aplikacji. Na przykład jeśli zauważymy dużą liczbę błędów podczas wyszukiwania identyfikatorów produktów. Ten problem jest objawem wielu możliwych przyczyn (nieprawidłowy link, niespójność bazy danych lub bot indeksujący naszą witrynę). Trudno lub wręcz niemożliwe jest wyobrażenie sobie wszystkich potencjalnych przyczyn, ale aplikacja wysyłająca tę wiadomość nawet raz to poważny problem, o którym chcemy wiedzieć. Aby otrzymywać alerty o tym błędzie, musimy utworzyć zasadę na podstawie danych z naszych logów błędów.
- W polu Zapytanie wstaw te parametry zapytania:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
Powinna wyglądać mniej więcej tak:

- Kliknij Uruchom zapytanie. Wyświetlą się wszystkie przesłane prośby i te, których dotyczy ten problem.

- Aby przekształcić powyższe w alert, kliknij przycisk Utwórz alert, który znajduje się w eksploratorze logów tuż pod polem zapytania po prawej stronie:

- Wyświetli się formularz tworzenia zasad tworzenia alertów opartych na logach.

- Użyj początkowego zapytania dotyczącego logów, które mają być uwzględnione w alercie:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

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

- Na koniec w sekcji „Kto ma otrzymywać powiadomienia?” wybierz utworzony wcześniej kanał powiadomień Pub/Sub:

- Kliknij Zapisz. Aby wyświetlić zasadę tworzenia alertów i nią zarządzać, otwórz stronę Alerty i sprawdź sekcję Zasady:

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