Benachrichtigungen: logbasierte Fehler in Pub/Sub-Themen

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:

b35bf95b8bf3d5d8.png

So erstellen Sie ein neues Projekt in Google Cloud:

  1. Rufen Sie die Google Cloud Platform Console auf.
  2. Klicken Sie auf die Schaltfläche Projekt erstellen.
  3. Geben Sie einen Namen für Ihr Projekt an.
  4. Wählen Sie ein Rechnungskonto für Ihr Projekt aus.
  5. 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://&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}

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:

bce75f34b2c53987.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

f6ef2b5f13479f3a.png

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:

  1. Rufen Sie im Terminal mit dem folgenden Befehl die Python-Version der API auf:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. 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

  1. Mit dem folgenden Befehl können Sie den Python-Server lokal starten.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

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:

709d57ee2f0137e4.png

  1. 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:

  1. Dienstname (python-flask-api): Wählen Sie entweder diesen Standardwert oder einen Wert wie „my-inventory-api“ aus.
  2. 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
  3. Bitte geben Sie eine Region an: Wählen Sie 31 (us-west-1) aus
  4. 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
  5. 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.
  6. Do you want to continue (Y/n)? Ja
  7. 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:

87ba8dbf88e8cfa4.png

Anwendung testen

Nachdem die Anwendung in Cloud Run bereitgestellt wurde, können Sie so auf die API-Anwendung zugreifen:

  1. 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>.
  2. Öffnen Sie einen Browser und greifen Sie auf die folgenden drei URLs für die API-Endpunkte zu:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <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:

2633965c4bc957cc.png

Klicken Sie auf den Dienstnamen, um die Details aufzurufen. Hier die Beispieldetails:

33042ae64322ce07.png

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:

  1. Suchen Sie im Suchfeld nach Pub/Sub und gehen Sie zu Pub/Sub. 935028bd8f6328ef.png
  2. Klicken Sie auf den Tab Themen, sofern Sie dies noch nicht getan haben. 7fd8bf91386a88fd.png
  3. Klicken Sie auf die Schaltfläche Thema erstellen. cd9d197f9023c41b.png
  4. Geben Sie einen aussagekräftigen Namen für Ihr Thema ein.

173f313b4a3c4934.png

  1. Klicken Sie auf Erstellen. ca9a02477da21a44.png
  2. Kopieren Sie den Namen des Themas mithilfe der Symbolschaltfläche „Kopieren“. Sie benötigen ihn für den nächsten Abschnitt.

20848252ee83df93.png

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.

6605b68395185b89.png

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://&lt;SERVICE_URL&gt;/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.

  1. Geben Sie in das Abfragefeld die folgenden Abfrageparameter ein:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "WARNUNG in App: Inventaranforderung wegen falscher Produkt-ID erhalten"

Die Ausgabe sollte ungefähr so aussehen:

f672154cfebf0051.png

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

77c190e3a2fab6bf.png

  1. Um den obigen Code in eine Benachrichtigung umzuwandeln, klicken Sie im Log-Explorer rechts unter dem Abfragefeld auf die Schaltfläche Benachrichtigung erstellen:

4cd3fcf142189376.png

  1. Daraufhin wird das Formular zum Erstellen einer logbasierten Benachrichtigungsrichtlinie angezeigt.

b82446854bad87fc.png

  1. 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"

764227db73ec3de6.png

  1. Legen Sie die Benachrichtigungshäufigkeit und die Dauer des Vorfalls fest. Für dieses Beispiel können Sie jeweils die Mindestwerte verwenden:

bb3d96448ec998a1.png

  1. Zuletzt für die Frage „Wer soll benachrichtigt werden?“ Wählen Sie den Pub/Sub-Benachrichtigungskanal aus, den Sie zuvor erstellt haben:

3593c48c29d4b76c.png

  1. Klicken Sie auf Speichern. Rufen Sie zum Aufrufen und Verwalten der Benachrichtigungsrichtlinie die Seite Benachrichtigungen auf und prüfen Sie unter „Richtlinien“ Folgendes: ca08ea380fb37c91.png

6. Glückwunsch

Die Verfügbarkeitsdiagnose wurde so konfiguriert, dass Benachrichtigungen an Pub/Sub gesendet werden.