arrow_back

Debugging von Anwendungen in Google Kubernetes Engine

Anmelden Teilnehmen
Zugriff auf über 700 Labs und Kurse nutzen

Debugging von Anwendungen in Google Kubernetes Engine

Lab 1 Stunde 15 Minuten universal_currency_alt 5 Guthabenpunkte show_chart Mittelstufe
info Dieses Lab kann KI-Tools enthalten, die den Lernprozess unterstützen.
Zugriff auf über 700 Labs und Kurse nutzen

GSP736

Logo: Google Cloud-Labs zum selbstbestimmten Lernen

Übersicht

Cloud Logging und das zugehörige Tool Cloud Monitoring sind Produkte mit vollem Funktionsumfang, die beide tief in die Google Kubernetes Engine eingebunden sind. In diesem Lab erfahren Sie, wie Cloud Logging mit GKE-Clustern und -Anwendungen funktioniert, und lernen anhand gängiger Anwendungsfälle für das Logging einige Best Practices für die Logerfassung kennen.

Lernziele

Aufgaben in diesem Lab:

  • Probleme mit Cloud Monitoring erkennen
  • Fehler in einer in GKE ausgeführten Anwendung mit Cloud Logging beheben

Die im Lab verwendete Demo-App

Anhand eines konkreten Beispiels beheben Sie Fehler in einer Mikrodienst-Demo-App, die in einem GKE-Cluster bereitgestellt wurde. In dieser Demo-App gibt es viele Mikrodienste und Abhängigkeiten zwischen ihnen. Sie generieren Traffic mit einem Lastgenerator und verwenden dann Logging, Monitoring und GKE, um den Fehler zu erkennen (Benachrichtigung/Messwerte), mit Logging die Ursache zu ermitteln und das Problem mit Logging und Monitoring zu beheben/zu bestätigen.

Diagramm der Cloud Logging-Architektur

Einrichtung und Anforderungen

Vor dem Klick auf „Start Lab“ (Lab starten)

Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange Google Cloud-Ressourcen für das Lab verfügbar sind.

In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.

Für dieses Lab benötigen Sie Folgendes:

  • Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus (empfohlen), um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
  • Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Verwenden Sie für dieses Lab nur das Teilnehmerkonto. Wenn Sie ein anderes Google Cloud-Konto verwenden, fallen dafür möglicherweise Kosten an.

Lab starten und bei der Google Cloud Console anmelden

  1. Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Dialogfeld geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können. Auf der linken Seite befindet sich der Bereich „Details zum Lab“ mit diesen Informationen:

    • Schaltfläche „Google Cloud Console öffnen“
    • Restzeit
    • Temporäre Anmeldedaten für das Lab
    • Ggf. weitere Informationen für dieses Lab
  2. Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).

    Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite „Anmelden“ geöffnet.

    Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.

    Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
  3. Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.

    {{{user_0.username | "Username"}}}

    Sie finden den Nutzernamen auch im Bereich „Details zum Lab“.

  4. Klicken Sie auf Weiter.

  5. Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.

    {{{user_0.password | "Password"}}}

    Sie finden das Passwort auch im Bereich „Details zum Lab“.

  6. Klicken Sie auf Weiter.

    Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos. Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
  7. Klicken Sie sich durch die nachfolgenden Seiten:

    • Akzeptieren Sie die Nutzungsbedingungen.
    • Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
    • Melden Sie sich nicht für kostenlose Testversionen an.

Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.

Hinweis: Wenn Sie auf Google Cloud-Produkte und ‑Dienste zugreifen möchten, klicken Sie auf das Navigationsmenü oder geben Sie den Namen des Produkts oder Dienstes in das Feld Suchen ein. Symbol für das Navigationsmenü und Suchfeld

Cloud Shell aktivieren

Cloud Shell ist eine virtuelle Maschine, auf der Entwicklertools installiert sind. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Mit Cloud Shell erhalten Sie Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.

  1. Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren Symbol für Cloud Shell-Aktivierung.

  2. Klicken Sie sich durch die folgenden Fenster:

    • Fahren Sie mit dem Informationsfenster zu Cloud Shell fort.
    • Autorisieren Sie Cloud Shell, Ihre Anmeldedaten für Google Cloud API-Aufrufe zu verwenden.

Wenn eine Verbindung besteht, sind Sie bereits authentifiziert und das Projekt ist auf Project_ID, eingestellt. Die Ausgabe enthält eine Zeile, in der die Project_ID für diese Sitzung angegeben ist:

Ihr Cloud-Projekt in dieser Sitzung ist festgelegt als {{{project_0.project_id | "PROJECT_ID"}}}

gcloud ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.

  1. (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
  1. Klicken Sie auf Autorisieren.

Ausgabe:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Um das aktive Konto festzulegen, führen Sie diesen Befehl aus: $ gcloud config set account `ACCOUNT`
  1. (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
gcloud config list project

Ausgabe:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Hinweis: Die vollständige Dokumentation für gcloud finden Sie in Google Cloud in der Übersicht zur gcloud CLI.

Region und Zone einrichten

Bestimmte Compute Engine-Ressourcen befinden sich in Regionen und Zonen. Eine Region ist ein spezifischer Ort, an dem Sie Ihre Ressourcen ausführen können. Jede Region hat eine oder mehrere Zonen.

Führen Sie die folgenden gcloud-Befehle in der Cloud Console aus, um die Standardregion und ‑zone für Ihr Lab festzulegen:

gcloud config set compute/zone "{{{project_0.default_zone|ZONE}}}" export ZONE=$(gcloud config get compute/zone) gcloud config set compute/region "{{{project_0.default_region|REGION}}}" export REGION=$(gcloud config get compute/region)

Aufgabe 1: Einrichten der Infrastruktur

Stellen Sie eine Verbindung zu einem Google Kubernetes Engine-Cluster her und prüfen Sie, ob er korrekt erstellt wurde.

  1. Legen Sie die Variable für die Projekt-ID fest:
export PROJECT_ID={{{project_0.startup_script.project | Project ID}}}
  1. Mit dem folgenden Befehl können Sie den Status des Clusters aufrufen:
gcloud container clusters list

Als Status des Clusters sollte „PROVISIONING“ angezeigt werden.

  1. Warten Sie einen Moment und führen Sie den obigen Befehl noch einmal aus, bis der Status „RUNNING“ angezeigt wird. Das kann einige Minuten dauern.

  2. Prüfen Sie, ob der Cluster mit dem Namen central erstellt wurde.

Sie können den Fortschritt auch in der Cloud Console unter Navigationsmenü > Kubernetes Engine > Cluster verfolgen.

  1. Sobald der Status „RUNNING“ angezeigt wird, können Sie die Anmeldedaten für den Cluster abrufen:
gcloud container clusters get-credentials central --zone $ZONE

Ausgabe:

Fetching cluster endpoint and auth data. kubeconfig entry generated for kubeflow.
  1. Prüfen Sie, ob die Knoten erstellt wurden:
kubectl get nodes

Die Ausgabe sollte so aussehen:

NAME STATUS ROLES AGE VERSION gke-central-default-pool-5ff4130f-qz8v Ready 24d v1.27.2-gke.1200 gke-central-default--pool-5ff4130f-ssd2 Ready 24d v1.27.2-gke.1200 gke-central-default--pool-5ff4130f-tz63 Ready 24d v1.27.2-gke.1200 gke-central-default--pool-5ff4130f-zfmn Ready 24d v1.27.2-gke.1200

Aufgabe 2: Anwendung bereitstellen

Als Nächstes stellen Sie eine Mikrodienstanwendung namens „Hipster Shop“ in Ihrem Cluster bereit, um eine Arbeitslast zu erstellen, die Sie überwachen können.

  1. Führen Sie folgenden Befehl aus, um das Repository zu klonen:
git clone https://github.com/xiangshen-dk/microservices-demo.git
  1. Wechseln Sie in das Verzeichnis microservices-demo:
cd microservices-demo
  1. Installieren Sie die Anwendung mit kubectl:
kubectl apply -f ./release/kubernetes-manifests.yaml
  1. Prüfen Sie, ob alles korrekt ausgeführt wird:
kubectl get pods

Die Ausgabe sollte in etwa so aussehen:

NAME READY STATUS RESTARTS AGE adservice-55f94cfd9c-4lvml 1/1 Running 0 20m cartservice-6f4946f9b8-6wtff 1/1 Running 2 20m checkoutservice-5688779d8c-l6crl 1/1 Running 0 20m currencyservice-665d6f4569-b4sbm 1/1 Running 0 20m emailservice-684c89bcb8-h48sq 1/1 Running 0 20m frontend-67c8475b7d-vktsn 1/1 Running 0 20m loadgenerator-6d646566db-p422w 1/1 Running 0 20m paymentservice-858d89d64c-hmpkg 1/1 Running 0 20m productcatalogservice-bcd85cb5-d6xp4 1/1 Running 0 20m recommendationservice-685d7d6cd9-pxd9g 1/1 Running 0 20m redis-cart-9b864d47f-c9xc6 1/1 Running 0 20m shippingservice-5948f9fb5c-vndcp 1/1 Running 0 20m
  1. Wiederholen Sie den Befehl, bis alle Pods den Status Running haben und fahren Sie dann mit dem nächsten Schritt fort.

Klicken Sie auf Fortschritt prüfen. Anwendung bereitstellen

  1. Führen Sie den folgenden Befehl aus, um die externe IP-Adresse der Anwendung abzurufen. Dieser Befehl gibt erst dann eine IP-Adresse zurück, wenn der Dienst bereitgestellt wurde. Möglicherweise müssen Sie den Befehl also wiederholen, bis eine externe IP-Adresse zugewiesen wurde:
export EXTERNAL_IP=$(kubectl get service frontend-external | awk 'BEGIN { cnt=0; } { cnt+=1; if (cnt > 1) print $4; }')
  1. Prüfen Sie abschließend, ob die Anwendung läuft:
curl -o /dev/null -s -w "%{http_code}\n" http://$EXTERNAL_IP

Die Bestätigung sieht folgendermaßen aus:

200

Nach der Bereitstellung der Anwendung können Sie in der Cloud Console den Status aufrufen.

Auf der Seite Kubernetes Engine > Workloads sehen Sie, dass alle Pods in Ordnung sind.

Seite „Workloads“

  1. Wählen Sie Gateways, Dienste und eingehender Traffic aus und klicken Sie auf den Tab Dienste, um zu prüfen, ob alle Dienste in Ordnung sind. Bleiben Sie auf diesem Bildschirm, um das Monitoring für die Anwendung einzurichten.

Aufgabe 3: App öffnen

  1. Scrollen Sie nach unten zu frontend-external und klicken Sie auf die Endpunkt-IP des Dienstes.

Die Seite „Dienste und eingehender Traffic“ mit der hervorgehobenen externen IP-Adresse des Frontends

Die Anwendung sollte geöffnet werden und eine Seite wie die folgende anzeigen:

Die Webseite von Online Boutique mit Produktkacheln

Aufgabe 4: Logbasierten Messwert erstellen

Jetzt konfigurieren Sie Cloud Logging, um einen logbasierten Messwert zu erstellen. Das ist ein benutzerdefinierter Messwert in Cloud Monitoring, der aus Logeinträgen erstellt wird. Logbasierte Messwerte eignen sich gut, um die Anzahl der Logeinträge zu zählen und die Verteilung eines Werts in Ihren Logs zu verfolgen. In diesem Fall verwenden Sie den logbasierten Messwert, um die Anzahl der Fehler in Ihrem Frontend-Dienst zu zählen. Sie können den Messwert dann in Dashboards und Benachrichtigungen verwenden.

  1. Kehren Sie zur Cloud Console zurück und öffnen Sie im Navigationsmenü den Log-Explorer unter Logging.

Seite „Log-Explorer“

  1. Aktivieren Sie Abfrage anzeigen und fügen Sie im Feld Query Builder die folgende Abfrage hinzu:
resource.type="k8s_container" severity=ERROR labels."k8s-pod/app": "recommendationservice"

Die Seite „Query Builder“ mit den drei Zeilen der Abfrage oben

  1. Klicken Sie auf Abfrage ausführen.

Mit der verwendeten Abfrage können Sie alle Fehler aus dem Frontend-Pod finden. Da es noch keine Fehler gibt, sollten Sie jetzt keine Ergebnisse sehen.

  1. Klicken Sie auf das Drop-down-Menü Aktionen und wählen Sie Messwert erstellen aus, um den logbasierten Messwert zu erstellen.

Die Schaltfläche „Messwert erstellen“ wird in der Benutzeroberfläche angezeigt.

  1. Nennen Sie den Messwert Error_Rate_SLI und klicken Sie auf Messwert erstellen, um den logbasierten Messwert zu erstellen:

Dialogfeld „Logmesswert erstellen“ mit dem ausgefüllten Feld „Name des Logmesswerts“

Der Messwert wird Ihnen jetzt auf der Seite „Logbasierte Messwerte“ unter „Benutzerdefinierte Messwerte“ angezeigt.

Klicken Sie auf Fortschritt prüfen. Logbasierten Messwert erstellen

Aufgabe 5: Benachrichtigungsrichtlinie erstellen

Durch Benachrichtigungen werden Sie rechtzeitig über Probleme in Ihren Cloud-Anwendungen informiert und können sie dann umgehend beheben. Jetzt verwenden Sie Cloud Monitoring, um die Verfügbarkeit Ihres Frontend-Dienstes zu überwachen. Dazu erstellen Sie eine Benachrichtigungsrichtlinie, die auf dem zuvor erstellten logwertbasierten Messwert für Frontend-Fehler basiert. Wenn die Bedingung der Benachrichtigungsrichtlinie erfüllt ist, erstellt Cloud Monitoring einen Vorfall und zeigt ihn in der Cloud Console an.

  1. Öffnen Sie im Navigationsmenü den Bereich Monitoring und klicken Sie dann auf Benachrichtigungen.

  2. Nachdem der Arbeitsbereich erstellt wurde, klicken Sie oben auf Richtlinie erstellen.

Hinweis: Klicken Sie bei Bedarf auf Jetzt ausprobieren, um den aktualisierten Ablauf zum Erstellen von Benachrichtigungen zu verwenden.
  1. Klicken Sie auf das Drop-down-Menü Messwert auswählen. Deaktivieren Sie das Kästchen Aktiv.

  2. Geben Sie im Feld Nach Ressourcen- oder Messwertname filtern den Wert Error_Rate ein.

  3. Klicken Sie auf Kubernetes-Container > Logbasierter Messwert. Wählen Sie logging/user/Error_Rate_SLI aus und klicken Sie auf Anwenden.

Auf Ihrem Bildschirm sollte nun Folgendes angezeigt werden:

Die Seite „Messwert auswählen“

  1. Setzen Sie Funktion für rollierendes Zeitfenster auf Rate.

  2. Klicken Sie auf Weiter.

  3. Legen Sie 0,5 als Grenzwert fest.

Wie erwartet gibt es keine Fehler und Ihre Anwendung erfüllt das Verfügbarkeits-SLO (Service Level Objective).

  1. Klicken Sie noch einmal auf Weiter.

  2. Deaktivieren Sie Benachrichtigungskanal verwenden.

  3. Geben Sie einen Namen wie Error Rate SLI für die Benachrichtigung ein und klicken Sie auf Weiter.

  4. Prüfen Sie die Benachrichtigung und klicken Sie auf Richtlinie erstellen.

Hinweis: Für dieses Lab erstellen Sie keinen Benachrichtigungskanal. Für Ihre Produktionsanwendungen sollten Sie dies jedoch tun, da Sie so Benachrichtigungen per E-Mail, mobiler App, SMS, Pub/Sub und Webhooks senden können.

Klicken Sie auf Fortschritt prüfen. Benachrichtigungsrichtlinie erstellen

Anwendungsfehler auslösen

Jetzt verwenden Sie einen Lastgenerator, um Traffic für Ihre Webanwendung zu erzeugen. Da in diese Version der Anwendung absichtlich ein Fehler eingebaut wurde, löst ein bestimmtes Trafficvolumen Fehler aus. Sie gehen die Schritte durch, um den Fehler zu identifizieren und zu beheben.

  1. Wählen Sie im Navigationsmenü die Option Kubernetes Engine und dann Gateways, Dienste und eingehender Traffic aus. Klicken Sie auf den Tab Dienste.

  2. Suchen Sie nach dem Dienst loadgenerator-external und klicken Sie auf den Link endpoints.

Die Seite „Dienste und eingehender Traffic“ wird auf dem Tab „Dienste“ geöffnet. Dort werden der hervorgehobene Dienst „loadgenerator-external“ und der Link „endpoints“ angezeigt.

Alternativ können Sie einen neuen Browsertab oder ein neues Browserfenster öffnen, die IP-Adresse in das URL-Feld kopieren und einfügen, zum Beispiel: http://\[loadgenerator-external-ip\]

Sie sollten sich jetzt auf der Seite des Lastgenerators Locust befinden:

Die Seite des Lastgenerators Locust

Locust ist ein Open-Source-Tool zur Lastgenerierung, mit dem Sie eine Webanwendung testen können. Es kann eine bestimmte Anzahl von Nutzerkonten simulieren, die gleichzeitig und in einem bestimmten Rhythmus auf die Anwendungsendpunkte zugreifen.

  1. Simulieren Sie 300 Nutzer, die mit einer Hatch-Rate von 30 auf die App zugreifen. Locust fügt 30 Nutzer pro Sekunde hinzu, bis 300 Nutzer erreicht sind.

  2. Für das Feld „Host“ verwenden Sie frontend-external. Kopieren Sie die URL von der Seite „Gateways, Dienste und eingehender Traffic“. Achten Sie darauf, den Port auszuschließen. Beispiel:

Die Seite „Neue Locust-Swarm starten“ mit der Schaltfläche „Start swarming“ (Swarming starten)

  1. Klicken Sie auf die Schaltfläche Start swarming (Swarming starten). Sie sollten etwa 300 Nutzer haben, um die vordefinierten URLs in wenigen Sekunden zu erreichen.

Die Seite „Statistiken“ mit der Liste von 300 Nutzern

  1. Klicken Sie auf den Tab Failures (Fehler), um zu sehen, dass Fehler auftreten. Sie sehen, dass es eine große Anzahl von „500“-Fehlern gibt.

Die Seite mit dem Tab „Failures“ (Fehler)

Wenn Sie auf der Startseite auf ein Produkt klicken, ist die Seite entweder spürbar langsam oder Sie erhalten Fehlermeldungen wie die folgende:

Die Online-Boutique zeigt den HTTP-Statusfehler „500 Internal Server Error“ an.

Bestätigung der Warnungs- und Anwendungsfehler

  1. Klicken Sie in der Console im Navigationsmenü auf Monitoring und dann auf Benachrichtigungen. Sie sollten bald einen Vorfall zu logging/user/Error_Rate_SLI sehen. Wenn Sie nicht sofort einen Vorfall sehen, warten Sie ein oder zwei Minuten und aktualisieren Sie die Seite. Es kann bis zu 5 Minuten dauern, bis die Benachrichtigung ausgelöst wird.

  2. Klicken Sie auf den Link zum Vorfall:

Die Seite „Benachrichtigungen“ mit dem Vorfall-Link im Abschnitt „Vorfälle“

Dadurch gelangen Sie auf die Details-Seite.

  1. Klicken Sie im Abschnitt „Logs“ auf Im Log-Explorer ansehen und wählen Sie die Projekt-ID aus dem Drop-down-Menü aus, um Pod-Logs aufzurufen.

Die Seite „Vorfalls-Messwerte“ mit der hervorgehobenen Schaltfläche „Logs ansehen“

  1. Sie können auch im Explorer-Bereich „Logs“ auf das Label Fehler klicken, um nur Fehler abzufragen.

Alternativ können Sie in das Feld „Abfragevorschau“ klicken, um den Query Builder aufzurufen, dann auf das Drop-down-Menü Schweregrad klicken und Fehler zur Abfrage hinzufügen. Klicken Sie auf Hinzufügen und dann auf Abfrage ausführen. Im Drop-down-Menü können Sie mehrere Schweregrade hinzufügen.

In beiden Fällen wird der Abfrage severity=ERROR hinzugefügt. Danach sollten alle Fehler für den Pod „recommendationserivce“ angezeigt werden.

Die Seite „Log-Explorer“ ist auf dem Tab „Query Builder“ geöffnet und zeigt im Bereich „Abfrageergebnisse“ eine Liste von Fehlern an.

  1. Sie können die Fehlerdetails aufrufen, indem Sie ein Fehlerereignis maximieren. Beispiel:

Das erweiterte Abfrageergebnis „Verbindungsaufbau fehlgeschlagen“

  1. Maximieren Sie textPayload.

  2. Klicken Sie auf die Fehlermeldung und wählen Sie Feld in Zusammenfassungszeile einfügen aus, damit die Fehlermeldungen als Zusammenfassungsfeld angezeigt werden:

Die Option „Feld in Zusammenfassungszeile einfügen“ ist im maximierten Menü der Fehlermeldung hervorgehoben.

Dort können Sie bestätigen, dass es tatsächlich viele Fehler für den Dienst RecommendationService gibt. Anhand der Fehlermeldungen lässt sich erkennen, dass der RecommendationService keine Verbindung zu einigen nachgelagerten Diensten herstellen konnte, um Produkte oder Empfehlungen abzurufen. Es ist jedoch noch nicht klar, was die Ursache für die Fehler ist.

Wenn Sie sich das Architekturdiagramm noch einmal ansehen, sehen Sie, dass der RecommendationService eine Liste von Empfehlungen an die Frontend-Dienste sendet. Sowohl der Frontend-Dienst als auch der RecommendationService rufen jedoch den ProductCatalogService für eine Liste von Produkten auf.

Architekturdiagramm mit den hervorgehobenen Kategorien „ProductCatalogService“ und „RecommendationService“.

Im nächsten Schritt sehen Sie sich die Messwerte des Hauptverdächtigen, des ProductCatalogService, auf Anomalien an. Unabhängig davon können Sie die Logs genauer untersuchen, um weitere Informationen zu erhalten.

Fehlerbehebung mit dem Kubernetes-Dashboard und Logs

  1. Einer der ersten Orte, an denen Sie sich die Messwerte ansehen können, ist der Abschnitt Kubernetes Engine der Monitoring Console (Navigationsmenü > Monitoring> Dashboards > GKE).

  2. Sehen Sie sich den Abschnitt Workloads an.

  3. Rufen Sie Kubernetes Engine > Workloads > productcatalogservice auf. Sie sehen, dass der Pod für den Dienst ständig abstürzt und neu gestartet wird.

Der Abschnitt „Aktive Überarbeitungen“ auf der Seite „Bereitstellungsdetails“ ist hervorgehoben.

Prüfen Sie als Nächstes, ob die Logs etwas Interessantes enthalten.

Es gibt zwei einfache Möglichkeiten, auf Ihre Containerlogs zuzugreifen:

  1. Klicken Sie auf den Tab Logs, um eine Schnellansicht der neuesten Logs aufzurufen. Klicken Sie dann oben rechts im Logbereich auf die Schaltfläche mit dem externen Link, um zum Log-Explorer zurückzukehren.

Seite „Logs“ mit Tabs

  1. Klicken Sie auf der Seite „Übersicht“ auf den Link Containerlogs auf der Seite „Bereitstellungsdetails“.

Der Link „Containerlogs“ auf der Seite „Bereitstellungsdetails“ ist hervorgehoben.

Sie befinden sich wieder auf der Seite „Log-Explorer“, jetzt mit einer vordefinierten Abfrage, die speziell nach den Logs des Containers gefiltert ist, den Sie in GKE aufgerufen haben.

In der Loganzeige lässt sich anhand der Logeinträge und des Histogramms sehen, dass der Container innerhalb kurzer Zeit wiederholt Produktkataloge parst. Das scheint sehr ineffizient zu sein.

Am Ende der Abfrageergebnisse wird möglicherweise auch ein Laufzeitfehler wie der folgende angezeigt:

panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation

Das könnte tatsächlich dazu führen, dass der Pod abstürzt.

Suchen Sie den Logeintrag im Code, um den Grund besser zu verstehen.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus:
grep -nri 'successfully parsed product catalog json' src

Die Ausgabe sollte so aussehen, wobei der Name der Quelldatei mit einer Zeilennummer angegeben ist:

src/productcatalogservice/server.go:237: log.Info("successfully parsed product catalog json")
  1. Klicken Sie in der Cloud Shell-Menüleiste auf Editor öffnen und dann auf In neuem Fenster öffnen, um die Quelldatei aufzurufen. (Wenn die Fehlermeldung „Der Code-Editor kann nicht geladen werden, weil Drittanbieter-Cookies deaktiviert sind“ angezeigt wird, klicken Sie oben auf der Chrome-Seite auf das Augensymbol.)

Die Schaltfläche „Editor öffnen“ ist in der Benutzeroberfläche hervorgehoben.

  1. Klicken Sie auf die Datei microservices-demo/src/productcatalogservice/server.go, scrollen Sie zu Zeile 237 und Sie sehen, dass die Methode readCatalogFile diese Meldung protokolliert:

Die Meldung: log.Info("successfully parsed product catalog json") gibt nil zurück

Mit etwas mehr Aufwand können Sie erkennen, dass der Dienst den Produktkatalog bei jedem Aufruf neu lädt und parst, wenn die boolesche Variable reloadCatalog auf „true“ gesetzt ist. Das scheint unnötig.

Wenn Sie im Code nach der Variablen reloadCatalog suchen, sehen Sie, dass sie durch die Umgebungsvariable ENABLE_RELOAD gesteuert wird und einen Logeintrag für ihren Zustand schreibt.

Der Logeintrag für den Status „reloadCatalog“

Fügen Sie diese Nachricht Ihrer Abfrage hinzu und prüfen Sie die Logs noch einmal, um festzustellen, ob Einträge vorhanden sind.

  1. Kehren Sie zum Tab mit dem Log-Explorer zurück und fügen Sie der Abfrage die folgende Zeile hinzu:
jsonPayload.message:"catalog reloading"

Die vollständige Abfrage im Query Builder lautet also:

resource.type="k8s_container" resource.labels.location="{{{project_0.startup_script.zone | ZONE}}}" resource.labels.cluster_name="central" resource.labels.namespace_name="default" labels.k8s-pod/app="productcatalogservice" jsonPayload.message:"catalog reloading"
  1. Klicken Sie noch einmal auf Abfrage ausführen und suchen Sie im Containerlog nach der Meldung „Katalog neu laden aktivieren“. Damit ist bestätigt, dass das Feature zum Neuladen des Katalogs aktiviert ist.

Die Meldung „Katalog neu laden aktivieren“ im Containerlog

An diesem Punkt können Sie sicher sein, dass der Frontend-Fehler durch den Aufwand verursacht wird, der entsteht, wenn der Katalog für jede Anfrage geladen wird. Als Sie die Last erhöht haben, hat der Aufwand dazu geführt, dass der Dienst ausgefallen ist und der Fehler generiert wurde.

Aufgabe 6: Problem beheben und Ergebnis überprüfen

Auf der Grundlage des Codes und der Informationen in den Logs können Sie versuchen, das Problem zu beheben, indem Sie das Neuladen des Katalogs deaktivieren. Entfernen Sie die Umgebungsvariable ENABLE_RELOAD für den Produktkatalogdienst. Nachdem Sie die Variablen geändert haben, können Sie die Anwendung neu bereitstellen und prüfen, ob die Änderungen das beobachtete Problem behoben haben.

  1. Klicken Sie auf die Schaltfläche Terminal öffnen, um zum Cloud Shell-Terminal zurückzukehren, falls es geschlossen wurde.

  2. Führen Sie dazu diesen Befehl aus:

grep -A1 -ni ENABLE_RELOAD release/kubernetes-manifests.yaml

Die Ausgabe zeigt die Zeilennummer der Umgebungsvariable in der Manifestdatei:

373: - name: ENABLE_RELOAD 374- value: "1"
  1. Löschen Sie diese beiden Zeilen, um das Neuladen zu deaktivieren:
sed -i -e '373,374d' release/kubernetes-manifests.yaml
  1. Wenden Sie dann die Manifestdatei noch einmal an:
kubectl apply -f release/kubernetes-manifests.yaml

Sie werden feststellen, dass nur productcatalogservice konfiguriert ist. Die anderen Dienste bleiben unverändert.

  1. Kehren Sie zur Seite mit den Bereitstellungsdetails zurück (Navigationsmenü > Kubernetes Engine > Workloads > productcatalogservice) und warten Sie, bis der Pod erfolgreich ausgeführt wird. Warten Sie 2–3 Minuten oder bis Sie sicher sind, dass die App nicht mehr abstürzt.

Die Seite „Bereitstellungsdetails“ mit dem hervorgehobenen Abschnitt „Aktive Überarbeitungen“

  1. Wenn Sie noch einmal auf den Link Containerlogs klicken, sehen Sie, dass die wiederholten Meldungen successfully parsing the catalog json nicht mehr angezeigt werden:

Seite „Query Builder“

  1. Wenn Sie zur URL der Webanwendung zurückkehren und auf der Startseite auf die Produkte klicken, ist die Anwendung auch viel responsiver und es sollten keine HTTP-Fehler auftreten.

  2. Gehen Sie zurück zum Lastgenerator und klicken Sie oben rechts auf die Schaltfläche Reset Stats (Statistiken zurücksetzen). Der Prozentsatz der Fehler wird zurückgesetzt und sollte nicht mehr ansteigen.

Der Prozentsatz der Fehler wird mit 0 % angezeigt

Alle oben genannten Prüfungen zeigen, dass das Problem behoben wurde. Wenn der Fehler „500“ weiterhin angezeigt wird, warten Sie noch ein paar Minuten und klicken Sie dann noch einmal auf ein Produkt.

Das wars! Sie haben das Lab erfolgreich abgeschlossen.

Sie haben Cloud Logging und Cloud Monitoring verwendet, um einen Fehler in einer absichtlich falsch konfigurierten Version der Mikrodienste-Demo-App zu finden. Dies ist ein ähnlicher Prozess zur Fehlerbehebung, mit dem Sie Probleme für Ihre GKE-Anwendungen in einer Produktionsumgebung eingrenzen können.

Zuerst haben Sie die Anwendung in GKE bereitgestellt und dann einen Messwert und eine Benachrichtigung für Frontend-Fehler eingerichtet. Als Nächstes haben Sie eine Last generiert und dann festgestellt, dass die Benachrichtigung ausgelöst wurde. Anhand der Benachrichtigung konnten Sie das Problem auf bestimmte Dienste eingrenzen, die Cloud Logging verwenden. Anschließend haben Sie sich mit Cloud Monitoring und der GKE-Benutzeroberfläche die Messwerte für die GKE-Dienste angesehen. Um das Problem zu beheben, haben Sie eine aktualisierte Konfiguration in GKE bereitgestellt und bestätigt, dass die Fehler in den Logs behoben wurden.

Weitere Informationen

  • Dieses Lab basiert auf diesem Blogpost zur Verwendung von Logging für Ihre in GKE ausgeführten Anwendungen.
  • Der Folgebeitrag darüber, wie DevOps-Teams Probleme mit Cloud Monitoring und Cloud Logging schnell ermitteln können, ist ebenfalls lesenswert.

Google Cloud-Schulungen und -Zertifizierungen

In unseren Schulungen erfahren Sie alles zum optimalen Einsatz unserer Google Cloud-Technologien und können sich entsprechend zertifizieren lassen. Unsere Kurse vermitteln technische Fähigkeiten und Best Practices, damit Sie möglichst schnell mit Google Cloud loslegen und Ihr Wissen fortlaufend erweitern können. Wir bieten On-Demand-, Präsenz- und virtuelle Schulungen für Anfänger wie Fortgeschrittene an, die Sie individuell in Ihrem eigenen Zeitplan absolvieren können. Mit unseren Zertifizierungen weisen Sie nach, dass Sie Experte im Bereich Google Cloud-Technologien sind.

Anleitung zuletzt am 21. Februar 2025 aktualisiert

Lab zuletzt am 21. Februar 2025 getestet

© 2025 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.

Vorbereitung

  1. Labs erstellen ein Google Cloud-Projekt und Ressourcen für einen bestimmten Zeitraum
  2. Labs haben ein Zeitlimit und keine Pausenfunktion. Wenn Sie das Lab beenden, müssen Sie von vorne beginnen.
  3. Klicken Sie links oben auf dem Bildschirm auf Lab starten, um zu beginnen

Privates Surfen verwenden

  1. Kopieren Sie den bereitgestellten Nutzernamen und das Passwort für das Lab
  2. Klicken Sie im privaten Modus auf Konsole öffnen

In der Konsole anmelden

  1. Melden Sie sich mit Ihren Lab-Anmeldedaten an. Wenn Sie andere Anmeldedaten verwenden, kann dies zu Fehlern führen oder es fallen Kosten an.
  2. Akzeptieren Sie die Nutzungsbedingungen und überspringen Sie die Seite zur Wiederherstellung der Ressourcen
  3. Klicken Sie erst auf Lab beenden, wenn Sie das Lab abgeschlossen haben oder es neu starten möchten. Andernfalls werden Ihre bisherige Arbeit und das Projekt gelöscht.

Diese Inhalte sind derzeit nicht verfügbar

Bei Verfügbarkeit des Labs benachrichtigen wir Sie per E-Mail

Sehr gut!

Bei Verfügbarkeit kontaktieren wir Sie per E-Mail

Es ist immer nur ein Lab möglich

Bestätigen Sie, dass Sie alle vorhandenen Labs beenden und dieses Lab starten möchten

Privates Surfen für das Lab verwenden

Nutzen Sie den privaten oder Inkognitomodus, um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.