1. Einführung
Zuletzt aktualisiert:21. Juni 2023
Benachrichtigungen bei logbasierten Fehlern für die Verfügbarkeit
Mit logbasierten Benachrichtigungen lässt sich die Verfügbarkeit einer Anwendung ermitteln, indem in den Logs nach bestimmten Ereignissen oder Mustern gesucht wird.* Wenn Sie über Ausfälle oder andere nutzerbezogene Probleme informiert werden, können Sie Maßnahmen ergreifen, um die Auswirkungen auf Ihre Nutzer und Kunden zu minimieren.
Uptime-Prüfungen geben zwar einen allgemeinen Überblick über die Verfügbarkeit, aber es kann genauer sein, Fehlermeldungen aus Protokollen als Indikatoren für spezifischere Arten von Nichtverfügbarkeit zu verwenden und herauszufinden, welcher Anteil der Nutzer ein Problem hat.
Fehler können aus einer Vielzahl von Gründen auftreten, von Nutzerfehlern über Systemwartung und ‑upgrades bis hin zu Faktoren, die außerhalb des Systems liegen, z. B. schlechtes Wetter. Bei Benachrichtigungen geht es nicht darum, alle möglichen Ursachen zu antizipieren, sondern einige wichtige Symptome auszuwählen, die als Ausgangspunkt für die Fehlerbehebung dienen können.
Pub/Sub-Themen als Benachrichtigungskanal 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 Ihre Cloud Monitoring-Benachrichtigungen in andere Systeme einbinden, einschließlich Benachrichtigungsdienste 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.
Umfang
In diesem Codelab stellen Sie eine App bereit, erstellen ein Pub/Sub-Thema und eine logbasierte Benachrichtigung, die nach Fehlern in einem bestimmten Teil der App sucht und das Pub/Sub-Thema als Benachrichtigungskanal verwendet.
Lerninhalte
- Pub/Sub-Thema erstellen
- Logbasierte Benachrichtigung erstellen
In diesem Codelab geht es darum, eine Benachrichtigung für Fehler zu erstellen. Auf irrelevante Konzepte und Anwendungscode wird nicht genauer eingegangen und entsprechende Codeblöcke können Sie einfach kopieren und einfügen.
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
So wählen Sie 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. Anschließend können Sie Google Cloud-Dienste verwenden.
Hier finden Sie weitere Informationen zu den einzelnen Schritten:
- Name:Der Name Ihres Projekts muss innerhalb Ihrer Organisation eindeutig sein.
- Rechnungskonto:Sie können ein vorhandenes Rechnungskonto verwenden oder ein neues erstellen.
- Erstellen:Wenn Sie alle erforderlichen Informationen eingegeben haben, klicken Sie auf die Schaltfläche 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 in der Beispielanwendung oder ‑API?
Unsere Anwendung ist eine einfache Inventory API-Anwendung, die einen REST API-Endpunkt mit einigen Vorgängen zum Auflisten der Inventargegenstände und zum Abrufen der Inventaranzahl für einen bestimmten Artikel bereitstellt.
Nachdem wir die API bereitgestellt haben und davon ausgehen, dass sie unter https://<somehost> gehostet wird, können wir auf die API-Endpunkte wie folgt zugreifen:
https://<somehost>/inventory
Hier werden alle Artikel mit den verfügbaren Inventarbeständen aufgeführt.
https://<somehost>/inventory/{productid}
So erhalten Sie einen einzelnen Datensatz mit der Produkt-ID 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. Wir wollten eine schnelle Anwendung zur Verfügung haben, um den Hauptzweck des Labs zu untersuchen, nämlich Google Cloud Operations.
Beispieldaten und API-Anfrage/-Antwort
Die Anwendung wird nicht von einer Datenbank im Backend unterstützt, um die Dinge einfach zu halten. Sie enthält drei Beispiel-Produkt-IDs und die entsprechenden Lagerbestände.
Produkt-ID | Verfügbares Inventar |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Im Folgenden finden Sie ein Beispiel für eine API-Anfrage und ‑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
Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, 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 sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

Auf dieser virtuellen Maschine sind alle Entwicklungstools installiert, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für dieses Lab benötigen Sie lediglich einen Browser.
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
Dadurch wird in diesem Ordner ein Ordner mit dem Namen „cloud-code-sample-repository“ erstellt.
(Optional) Anwendung in Cloud Shell ausführen
So führen Sie die Anwendung lokal aus:
- 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. Wir verwenden die Standardversion. Wenn Sie die Anwendung lokal auf Ihrem Laptop ausführen möchten, können Sie Python 3.8+ verwenden:
$ python app.py
- Mit dem folgenden Befehl können Sie den Python-Server lokal starten.

Klicken Sie auf „Vorschau auf Port 8080“. 5. Dadurch wird ein Browserfenster geöffnet. Es wird ein 404-Fehler angezeigt. Das ist in Ordnung. Ändern Sie die URL so, dass nach dem Hostnamen nur noch „/inventory“ steht.
Auf meinem Computer sieht das z.B. so aus:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
Daraufhin wird die Liste der Inventarelemente wie oben beschrieben angezeigt:

- Sie können den Server jetzt beenden, indem Sie zum Terminal wechseln und Strg+C drücken.
Anwendung bereitstellen
Wir stellen diese API-Anwendung jetzt in Cloud Run bereit. Dabei 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): Sie können entweder diesen Standardnamen verwenden oder einen anderen Namen wie „my-inventory-api“ auswählen.
- API [run.googleapis.com] not enabled on project [613162942481]. Möchten Sie die Funktion aktivieren und es noch einmal versuchen? Das kann einige Minuten dauern. (y/N)? J
- Geben Sie eine Region an: Wählen Sie 31 (us-west-1) aus.
- API [artifactregistry.googleapis.com] not enabled on project [613162942481]. Möchten Sie die Funktion aktivieren und es noch einmal versuchen? Das kann einige Minuten dauern. (y/N)? J
- Für die Bereitstellung aus der Quelle ist ein Artifact Registry-Docker-Repository zum Speichern erstellter Container erforderlich. Ein Repository mit dem Namen [cloud-run-source-deploy] in der Region [us-west1] wird erstellt.
- Do you want to continue (Y/n)? J
- Allow unauthenticated invocations to [my-inventory-api] (y/N)? (Nicht authentifizierte Aufrufe für [my-inventory-api] zulassen?) J
Dadurch wird schließlich der Prozess gestartet, mit dem Ihr Quellcode containerisiert, per Push in Artifact Registry übertragen und dann der Cloud Run-Dienst + die Revision bereitgestellt werden. Dieser Vorgang kann 3 bis 4 Minuten dauern. Wenn er abgeschlossen ist, wird die Dienst-URL angezeigt.
Ein Beispiel für einen Lauf sehen Sie unten:

Anwendung testen
Nachdem wir die Anwendung in Cloud Run bereitgestellt haben, können Sie wie folgt auf die API-Anwendung zugreifen:
- Notieren Sie sich die Dienst-URL aus dem vorherigen Schritt. In meiner Einrichtung wird es beispielsweise als
https://my-inventory-api-bt2r5243dq-uw.a.run.appangezeigt. Wir nennen sie<SERVICE_URL>. - Öffnen Sie einen Browser und rufen Sie die folgenden drei URLs für die API-Endpunkte auf:
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
Sie sollte den Spezifikationen entsprechen, die wir in einem früheren 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.
Rufen Sie im Hauptmenü Cloud Run auf. Daraufhin wird die Liste der Dienste angezeigt, die in Cloud Run ausgeführt werden. Sie sollten den Dienst sehen, den Sie gerade bereitgestellt haben. Je nach ausgewähltem Namen sollte die Ausgabe etwa so aussehen:

Klicken Sie auf den Dienstnamen, um die Details aufzurufen. Die Beispieldetails sind unten aufgeführt:

Die URL ist nichts anderes als die Dienst-URL, die Sie in den Browser eingeben können, um auf die gerade bereitgestellte Inventory API zuzugreifen. Messwerte und andere Details ansehen
Beginnen wir jetzt mit der Google Cloud Operations Suite.
4. Pub/Sub-Thema zum Empfangen der Benachrichtigung erstellen
So erstellen Sie ein Pub/Sub-Thema in der Google Cloud Console:
- Suchen Sie im Suchfeld nach Pub/Sub und rufen Sie Pub/Sub auf.

- Klicken Sie auf den Tab Themen, falls Sie sich noch nicht dort befinden.

- Klicken Sie auf den Button Thema erstellen.

- Geben Sie einen aussagekräftigen Namen für das Thema ein.

- Klicken Sie auf die Schaltfläche Erstellen.

- Kopieren Sie den Themennamen mit der Schaltfläche „Kopiersymbol“. Sie benötigen sie für den nächsten Abschnitt.

5. Benachrichtigungsrichtlinie für Fehler erstellen
Fehlerlogs ansehen
So rufen Sie die Fehlerlogs für die Anwendung auf:
Klicken Sie auf den Tab Logging.
Daraufhin wird eine Log-Oberfläche angezeigt, auf der Sie verschiedene Ressourcen (Projekt, Google Cloud-Ressource, Dienstnamen usw.) sowie Log-Ebenen auswählen bzw. die Auswahl aufheben können, um die Log-Nachrichten nach Bedarf zu filtern.

Simulieren Sie einige ungültige Anfragen an den Inventardienst, indem Sie Produkt-IDs angeben, die nicht I-1, I-2 oder I-3 sind. Ein Beispiel für eine falsche Anfrage:
https://<SERVICE_URL>/inventory/I-999
Wir suchen jetzt nach allen WARNUNG-Meldungen, die von unserer API generiert wurden, wenn in der Anfrage eine falsche Produkt-ID angegeben wurde.
Benutzerdefinierte logbasierte Benachrichtigungsrichtlinie für Fehler erstellen
Angenommen, wir möchten das Auftreten einer ganz bestimmten Fehlermeldung für einen Teil der Anwendung beobachten. Wenn wir beispielsweise eine hohe Anzahl von Fehlern beim Nachschlagen von Produkt-IDs feststellen. Dieses Problem kann viele Ursachen haben, z. B. einen fehlerhaften Link, eine Datenbankinkonsistenz oder einen Bot, der unsere Website durchsucht. Es ist zwar schwierig oder unmöglich, sich jede potenzielle Ursache vorzustellen, aber die Anwendung, die diese Nachricht auch nur einmal sendet, ist ein Problem auf hoher Ebene, das wir im Blick behalten möchten. Um eine Benachrichtigung zu erhalten, müssen wir eine Richtlinie auf Grundlage der Daten in unseren Fehlerlogs erstellen.
- Fügen Sie im Abfragefeld die folgenden Abfrageparameter ein:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
Die Ausgabe sollte ungefähr so aussehen:

- Klicken Sie auf „Abfrage ausführen“. Daraufhin werden alle Anfragen mit diesem Problem angezeigt.

- Wenn Sie die oben genannte Abfrage in eine Benachrichtigung umwandeln möchten, klicken Sie im Log-Explorer rechts unter dem Abfragefeld auf die Schaltfläche Benachrichtigung erstellen:

- Dadurch wird das Formular zum Erstellen einer logbasierten Benachrichtigungsrichtlinie aufgerufen.

- Verwenden Sie die ursprüngliche 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 Vorfalldauer fest. Für das Beispiel können Sie die Mindestwerte für die einzelnen Elemente verwenden:

- Wählen Sie schließlich unter „Wer soll benachrichtigt werden?“ den zuvor erstellten Pub/Sub-Benachrichtigungskanal aus:

- Klicken Sie auf Speichern. Wenn Sie die Benachrichtigungsrichtlinie ansehen und verwalten möchten, rufen Sie die Seite Benachrichtigungen auf und sehen Sie unter „Richtlinien“ nach:

6. Glückwunsch
Sie haben Ihre Verfügbarkeitsdiagnose erfolgreich so konfiguriert, dass Benachrichtigungen an Pub/Sub gesendet werden.