1. Einführung
Zuletzt aktualisiert:21. Juni 2023
Verfügbarkeitsbenachrichtigungen bei logbasierten Fehlern
Logbasierte Benachrichtigungen können verwendet werden, um die Verfügbarkeit einer Anwendung zu ermitteln. Dazu werden bestimmte Ereignisse oder Muster in den Logs überwacht.* Wenn Sie über Ausfälle oder andere Probleme der Nutzer informiert werden, können Sie Maßnahmen ergreifen, um die Auswirkungen auf Ihre Nutzer und Kunden zu minimieren.
Während Verfügbarkeitsdiagnosen einen allgemeinen Überblick über die Verfügbarkeit liefern, ist es möglicherweise genauer, aus Logs abgeleitete Fehlermeldungen als Indikatoren für spezifischere Arten der Nichtverfügbarkeit zu verwenden und um ein Gefühl dafür zu bekommen, bei welchem Anteil der Nutzer ein Problem auftritt.
Fehler können verschiedene Ursachen haben, von Nutzerfehlern über Systemwartungen bis hin zu Upgrades und sogar systematischen Faktoren wie schlechtem Wetter. Der Schlüssel zu Benachrichtigungen besteht darin, nicht alle möglichen Ursachen vorherzusehen, sondern einige wichtige Symptome auszuwählen, die als Ausgangspunkt für die Fehlerbehebung dienen können.
Pub/Sub-Themen als Kanal für Benachrichtigungen
Ein Pub/Sub-Thema kann als Google Cloud Monitoring-Benachrichtigungskanal verwendet werden, um Benachrichtigungen an ein Pub/Sub-Abo zu senden. So können Sie Cloud Monitoring-Benachrichtigungen in andere Systeme einbinden, einschließlich Benachrichtigungsdiensten von Drittanbietern.
Wenn Sie ein Pub/Sub-Thema als Benachrichtigungskanal verwenden möchten, müssen Sie zuerst ein Pub/Sub-Thema und ein Pub/Sub-Abo erstellen. Anschließend müssen Sie einen Cloud Monitoring-Benachrichtigungskanal erstellen, der das Pub/Sub-Thema als Ziel verwendet.
Wenn eine Benachrichtigung ausgelöst wird, sendet Cloud Monitoring eine Nachricht an das Pub/Sub-Thema. Der Abonnent des Pub/Sub-Abos kann die Nachricht dann verarbeiten und entsprechende Maßnahmen ergreifen.
Inhalt
In diesem Codelab stellen Sie eine Anwendung bereit, erstellen ein Pub/Sub-Thema und erstellen eine logbasierte Benachrichtigung, die in einem bestimmten Teil der Anwendung auf Fehler prüft und das Pub/Sub-Thema als Benachrichtigungskanal verwendet.
Aufgaben in diesem Lab
- Pub/Sub-Thema erstellen
- Logbasierte Benachrichtigung erstellen
In diesem Codelab geht es vor allem darum, eine Benachrichtigung für Fehler zu erstellen. Nicht relevante Konzepte und Anwendungscode werden nicht berücksichtigt und können einfach kopiert und eingefügt werden.
Voraussetzungen
- Ein Google Cloud-Konto mit Berechtigungen für Folgendes:
- Cloud Run-Anwendungen bereitstellen
- Pub/Sub-Themen erstellen
- Benachrichtigungen erstellen
2. Einrichtung
Google Cloud-Projekt auswählen oder erstellen
Wählen Sie über das Drop-down-Menü ein vorhandenes Projekt aus:
So erstellen Sie ein neues Projekt in Google Cloud:
- Rufen Sie die Google Cloud Platform Console auf.
- Klicken Sie auf die Schaltfläche Projekt erstellen.
- Geben Sie einen Namen für Ihr Projekt an.
- Wählen Sie ein Rechnungskonto für Ihr Projekt aus.
- Klicken Sie auf Erstellen.
Ihr Projekt wird erstellt und Sie werden zum Projekt-Dashboard weitergeleitet. Von dort aus können Sie Google Cloud-Dienste verwenden.
Weitere Informationen zu den einzelnen Schritten:
- Name:Der Name des Projekts darf innerhalb Ihrer Organisation nur einmal vorkommen.
- Rechnungskonto:Sie können ein vorhandenes Rechnungskonto verwenden oder ein neues erstellen.
- Erstellen:Wenn Sie alle erforderlichen Informationen eingegeben haben, klicken Sie auf Erstellen, um Ihr Projekt zu erstellen.
Weitere Informationen finden Sie in der Google Cloud-Dokumentation zum Erstellen von Projekten.
3. API-Anwendung bereitstellen
Worum geht es bei der Beispielanwendung oder API?
Bei unserer Anwendung handelt es sich um eine einfache Inventar-API-Anwendung, die einen REST API-Endpunkt mit einigen Vorgängen zur Auflistung der Inventarartikel und zum Abrufen bestimmter Artikelinventarzahlen bereitstellt.
Sobald wir die API bereitstellen und davon ausgehen, dass sie auf https://<somehost> gehostet wird, können wir wie folgt auf die API-Endpunkte zugreifen:
https://<somehost>/inventory
Daraufhin werden alle Produktartikel mit den verfügbaren Inventarebenen angezeigt.
https://<somehost>/inventory/{productid}
Dadurch erhalten Sie einen einzigen Datensatz mit der productid und dem verfügbaren Lagerbestand für dieses Produkt.
Die zurückgegebenen Antwortdaten haben das JSON-Format.
Hinweis: Diese API-Anwendung dient nur zu Demozwecken und stellt keine sichere und robuste API-Implementierung dar. Es soll uns eine schnelle Anwendung zur Verfügung stehen, mit der wir den Hauptzweck des Labs, nämlich Google Cloud Operations, näher kennenlernen können.
Beispieldaten und API-Anfrage/-Antwort
Aus Gründen der Einfachheit wird die Anwendung nicht durch eine Datenbank am Back-End betrieben. Es enthält drei Beispiel-Produkt-IDs und die entsprechenden Inventarebenen.
Produkt-ID | Aktueller Bestand |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Im Folgenden finden Sie ein Beispiel für eine API-Anfrage und eine API-Antwort:
API-Anfrage | API-Antwort |
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} |
Repository klonen
Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:
Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:
Diese virtuelle Maschine verfügt über alle Entwicklungstools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.
gcloud einrichten
Legen Sie in Cloud Shell Ihre Projekt-ID fest und speichern Sie sie als Variable PROJECT_ID.
PROJECT_ID=[YOUR-PROJECT-ID]
gcloud
config
set
project
$PROJECT_ID
Führen Sie nun den folgenden Befehl aus:
$
git
clone
https://github.com/rominirani/cloud-code-sample-repository.git
In diesem Ordner wird ein Ordner mit dem Namen cloud-code-sample-repository erstellt.
(Optional) Anwendung in Cloud Shell ausführen
So können Sie die Anwendung lokal ausführen:
- Rufen Sie im Terminal mit dem folgenden Befehl die Python-Version der API auf:
$
cd
cloud-code-sample-repository
$
cd
python-flask-api
- Geben Sie im Terminal den folgenden Befehl ein. Zum Zeitpunkt der Erstellung dieses Dokuments ist Python 3.9.x in Cloud Shell installiert und wir verwenden die Standardversion. Wenn Sie es lokal auf Ihrem Laptop ausführen möchten, können Sie Python ab Version 3.8 verwenden:
$
python
app.py
- Mit dem folgenden Befehl können Sie den Python-Server lokal starten.
Klicken Sie auf „Preview“ (Vorschau auf Port 8080). 5. Dadurch wird ein Browserfenster geöffnet. Sie erhalten einen 404-Fehler und das ist in Ordnung. Ändern Sie die URL so, dass „/inventory“ nach dem Hostnamen angezeigt wird.
Beispiel: auf meinem Computer sieht, sie so aus:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
Dadurch wird die Liste der Inventarelemente wie zuvor erläutert angezeigt:
- Sie können den Server jetzt beenden, indem Sie zum Terminal wechseln und Strg + C drücken.
Anwendung bereitstellen
Diese API-Anwendung wird jetzt in Cloud Run bereitgestellt. Dazu wurde der gcloud-Befehlszeilenclient verwendet, um den Befehl zum Bereitstellen des Codes in Cloud Run auszuführen.
Geben Sie im Terminal den folgenden gcloud-Befehl ein:
$ gcloud run deploy --source .
Dabei werden Ihnen mehrere Fragen gestellt. Einige der Punkte sind unten aufgeführt:
- Dienstname (python-flask-api): Wählen Sie entweder diesen Standardwert oder einen Wert wie „my-inventory-api“ aus.
- Die API [run.googleapis.com] ist im Projekt [613162942481] nicht aktiviert. Möchtest du die Funktion aktivieren und es noch einmal versuchen (dies kann einige Minuten dauern)? (j/N)? Ja
- Bitte geben Sie eine Region an: Wählen Sie 31 (us-west-1) aus
- Die API [ArtifactRegistry.googleapis.com] ist im Projekt [613162942481] nicht aktiviert. Möchtest du die Funktion aktivieren und es noch einmal versuchen (dies kann einige Minuten dauern)? (j/N)? Ja
- Für die Bereitstellung aus der Quelle ist ein Artifact Registry-Docker-Repository erforderlich, um erstellte Container zu speichern. Ein Repository mit dem Namen [cloud-run-source-deploy] in der Region [us-west1] wird erstellt.
- Do you want to continue (Y/n)? Ja
- Nicht authentifizierte Aufrufe für [my-inventory-api] (y/N) zulassen? Ja
Dadurch wird der Prozess gestartet, in dem der Quellcode übernommen, containerisiert, per Push in Artifact Registry übertragen und dann Cloud Run-Dienst und -Überarbeitung bereitgestellt wird. Sie sollten bei diesem Vorgang geduldig sein (der Vorgang kann 3–4 Minuten dauern) und der Vorgang wird mit der angezeigten Service-URL abgeschlossen.
Hier ein Beispiel für eine Ausführung:
Anwendung testen
Nachdem die Anwendung in Cloud Run bereitgestellt wurde, können Sie so auf die API-Anwendung zugreifen:
- Notieren Sie sich die Service-URL aus dem vorherigen Schritt. In meiner Einrichtung wird sie beispielsweise als
https://my-inventory-api-bt2r5243dq-uw.a.run.app
angezeigt. Nennen wir sie<SERVICE_URL>
. - Öffnen Sie einen Browser und greifen Sie auf die folgenden drei URLs für die API-Endpunkte zu:
<SERVICE_URL>/inventory
<SERVICE_URL>/inventory/I-1
<SERVICE_URL>/inventory/I-100
Sie sollte den Spezifikationen entsprechen, die wir in einem vorherigen Abschnitt mit Beispiel-API-Anfrage und -Antwort bereitgestellt haben.
Dienstdetails aus Cloud Run abrufen
Wir haben unseren API-Dienst in Cloud Run bereitgestellt, einer serverlosen Computing-Umgebung. Wir können den Cloud Run-Dienst jederzeit über die Google Cloud Console aufrufen.
Gehen Sie vom Hauptmenü zu Cloud Run. Daraufhin wird die Liste der Dienste angezeigt, die Sie in Cloud Run ausgeführt haben. Sie sollten den Dienst sehen, den Sie gerade bereitgestellt haben. Je nach ausgewähltem Namen sollte Folgendes angezeigt werden:
Klicken Sie auf den Dienstnamen, um die Details aufzurufen. Hier die Beispieldetails:
Beachten Sie die URL, die nichts anderes als die Dienst-URL ist, die Sie in den Browser eingeben und auf die gerade bereitgestellte Inventar-API zugreifen können. Sehen Sie sich Messwerte und andere Details an.
Beginnen wir jetzt mit der Google Cloud Operations Suite.
4. Pub/Sub-Thema erstellen, um die Benachrichtigung zu erhalten
In der Google Cloud Console können Sie so vorgehen, um ein Pub/Sub-Thema zu erstellen:
- Suchen Sie im Suchfeld nach Pub/Sub und gehen Sie zu Pub/Sub.
- Klicken Sie auf den Tab Themen, sofern Sie dies noch nicht getan haben.
- Klicken Sie auf die Schaltfläche Thema erstellen.
- Geben Sie einen aussagekräftigen Namen für Ihr Thema ein.
- Klicken Sie auf Erstellen.
- Kopieren Sie den Namen des Themas mithilfe der Symbolschaltfläche „Kopieren“. Sie benötigen ihn für den nächsten Abschnitt.
5. Benachrichtigungsrichtlinie für Fehler erstellen
Fehlerlogs untersuchen
So rufen Sie die Fehlerlogs für die Anwendung auf:
Klicken Sie auf den Tab Logging.
Dadurch wird eine Protokolloberfläche angezeigt, in der Sie verschiedene Ressourcen (Projekt, Google Cloud-Ressource, Dienstnamen usw.) sowie Logebenen auswählen bzw. die Auswahl aufheben können, um die Logeinträge nach Bedarf zu filtern.
Simulieren Sie einige ungültige Anfragen an den Inventardienst, indem Sie Produkt-IDs angeben, die keine I-1, I-2 oder I-3 sind. Beispiel: ist eine falsche Anforderung:
https://<SERVICE_URL>/inventory/I-999
Wenn in der Abfrage eine falsche Produkt-ID angegeben wird, wird jetzt nach allen WARNING-Meldungen gesucht, die von unserer API generiert wurden.
Benutzerdefinierte logbasierte Benachrichtigungsrichtlinie für Fehler erstellen
Angenommen, wir möchten auf das Auftreten einer sehr spezifischen Fehlermeldung für einen Teil der Anwendung achten. Angenommen, wir bemerken eine hohe Anzahl an Fehlern bei der Suche nach Produkt-IDs. Dieses Problem ist ein Symptom vieler möglicher Probleme, z. B. ein fehlerhafter Link, eine Datenbankinkonsistenz oder ein Bot, der unsere Website aufzählt. Auch wenn es schwierig oder unmöglich ist, sich jede mögliche Ursache vorzustellen, ist die Anwendung, die diese Nachricht auch nur einmal sendet, ein übergeordnetes Problem, über das wir uns informieren möchten. Um darauf hinzuweisen, müssen wir eine Richtlinie erstellen, die auf den Daten in unseren Fehlerlogs basiert.
- Geben Sie in das Abfragefeld die folgenden Abfrageparameter ein:
resource.type="cloud_run_revision"
textPayload =~ "WARNUNG in App: Inventaranforderung wegen falscher Produkt-ID erhalten"
Die Ausgabe sollte ungefähr so aussehen:
- Klicken Sie auf „Abfrage ausführen“. Daraufhin werden alle eingegangenen Anfragen mit diesem Problem angezeigt.
- Um den obigen Code in eine Benachrichtigung umzuwandeln, klicken Sie im Log-Explorer rechts unter dem Abfragefeld auf die Schaltfläche Benachrichtigung erstellen:
- Daraufhin wird das Formular zum Erstellen einer logbasierten Benachrichtigungsrichtlinie angezeigt.
- Verwenden Sie die erste Abfrage für Logs, die in die Benachrichtigung aufgenommen werden sollen:
resource.type="cloud_run_revision"
textPayload
=~
"WARNING
in
app:
Received
inventory
request
for
incorrect
productid"
- Legen Sie die Benachrichtigungshäufigkeit und die Dauer des Vorfalls fest. Für dieses Beispiel können Sie jeweils die Mindestwerte verwenden:
- Zuletzt für die Frage „Wer soll benachrichtigt werden?“ Wählen Sie den Pub/Sub-Benachrichtigungskanal aus, den Sie zuvor erstellt haben:
- Klicken Sie auf Speichern. Rufen Sie zum Aufrufen und Verwalten der Benachrichtigungsrichtlinie die Seite Benachrichtigungen auf und prüfen Sie unter „Richtlinien“ Folgendes:
6. Glückwunsch
Die Verfügbarkeitsdiagnose wurde so konfiguriert, dass Benachrichtigungen an Pub/Sub gesendet werden.