Fehlerbehebung mit Gemini CodeLab

1. Einführung

In diesem Lab verwenden Sie Gemini, ein KI-gestütztes Tool in Google Cloud, um ein Problem mit der Bereitstellung von Cloud Functions-Funktionen zu beheben. Dazu analysieren Sie Fehlerlogs, identifizieren die Ursache des Problems und finden Lösungen.

Aufgaben

  • Sie verwenden das Cloud Shell-Terminal und die gcloud CLI, um die Umgebung einzurichten, z. B. relevante Google APIs zu aktivieren und eine Cloud Functions-Funktion aus dem bereitgestellten Code zu erstellen
  • Sie verwenden die Cloud Logging-Logzusammenfassung, um Logzusammenfassungen zu generieren, um erfasste Informationen zu verstehen.
  • Sie chatten mit Gemini, um Unterstützung bei der Problembehebung und Problembehebung zu erhalten.

Lerninhalte

  • Gemini mit Google Cloud Observability verwenden und Probleme beheben.
  • Cloud Functions-Logs mithilfe von Gemini finden und verstehen

Das brauchen Sie...

  • Chrome-Webbrowser
  • Ein Google Cloud-Projekt mit aktivierter Abrechnung
  • Ein Google-Konto mit Zugriffsberechtigungen für das Projekt, mit dem Sie APIs aktivieren und Ressourcen bearbeiten können

Dieses Lab richtet sich an DevOps- und Plattformentwickler sowie an Softwareentwickler aller Erfahrungsstufen, auch Anfänger. Dabei konzentrieren wir uns darauf, praktische Erfahrungen mit den Funktionen von Gemini bei der Fehlerbehebung zu sammeln.

2. Einrichtung

In diesem Abschnitt werden alle Schritte behandelt, die für den Einstieg in dieses Lab erforderlich sind.

Umgebung konfigurieren

1. Melden Sie sich in der Cloud Console an. Öffnen Sie dazu https://console.cloud.google.com.

2. Wählen Sie ein Google Cloud-Projekt aus, mit dem Sie für dieses Lab arbeiten möchten.

22170459a4f3ba59.png

3. Öffnen Sie in der Console die Seite „Cloud Functions“. Wählen Sie dazu im Navigationsmenü „Cloud Functions“ (Symbol oben links im Konsolenfenster) anzuklicken.

9d27c844c16ad3e4.png

Alternativ können Sie nach „Cloud Functions“ suchen im Suchbereich der Console:

35f23e52875b26cd.png

Klicken Sie über der Liste der Funktionen auf die Schaltfläche „Funktion erstellen“ 34b5e7e36f4e48e9.png

Wenn Sie Cloud Functions in diesem Projekt bisher noch nicht verwendet haben, werden Sie aufgefordert, Google APIs zu aktivieren.

5b7978521d6f56f7.png

Klicken Sie auf AKTIVIEREN, um fortzufahren.

4. Definieren Sie die grundlegenden Attribute der neuen Cloud Functions-Funktion.

  • Name auf „codelab-cf“ festlegen
  • Wählen Sie die Option Nicht authentifizierte Aufrufe zulassen aus.

6a2aaf9bedd161d9.png

Um den Schritt abzuschließen, klicken Sie unten links im Fenster auf WEITER:

f4e76470dbdf6854.png

Nachdem Sie auf WEITER geklickt haben, werden Sie möglicherweise aufgefordert, weitere Google APIs zu aktivieren. Klicken Sie wie in Schritt 4 auf AKTIVIEREN.

1ad7bf15c07eda49.png

Laufzeit und Code der Cloud Functions-Funktion einrichten

In diesem Codelab wird Python als Programmiersprache verwendet. Machen Sie sich keine Sorgen, wenn Sie mit Python nicht vertraut sind. Für dieses Codelab benötigen Sie keine Python-Kenntnisse.

5. Python 3.11 als Laufzeit der Funktion auswählen

9a3cd8bf272b4d02.png

Beachten Sie, dass sich durch die Änderung der Laufzeit der im Inline-Editor angezeigte Quellcode ändert.

6. Kopieren Sie den folgenden Code in den Inline-Editor, um das Beispiel für die automatisch generierte Kurzanleitung zu ändern.

from google.cloud import storage
import json
import re

client = storage.Client()

def get_object_list(request):
    if request.args and 'path' in request.args:
        path = request.args['path']
    else:
        return '{}'
    parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
    bucket, prefix = parsed.group(1), parsed.group(2)
    blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
    objects = []
    if (blobs):
        for blob in blobs:
            objects.append(blob.name)
    return json.dumps(objects)

Dieser Code liest das Attribut path aus der GET-Anfrage, parst den Pfad, um den Bucket-Namen abzurufen, und ruft die Google Cloud Storage API auf, um eine Liste der unter diesem Pfad gespeicherten Objekte abzurufen. Die Funktion (get_object_list) akzeptiert eine Anfrage, bei der es sich um ein Flask-Objekt als Eingabeargument handelt, und gibt die Namen der Objekte als JSON-Array zurück.

7. Wähle im Inline-Editor aus der Liste der Dateien die Datei requirements.txt aus. Ersetzen Sie die aktuelle Liste der Abhängigkeiten durch die neue, indem Sie den folgenden Code in den Inline-Editor kopieren.

google-cloud-storage

8. Klicken Sie links unten auf BEREITSTELLEN, um eine Cloud Functions-Funktion bereitzustellen.

17c4828702a32cd9.png

Möglicherweise müssen Sie einige Minuten warten, bis der Bereitstellungsprozess abgeschlossen ist. Wenn Sie die Einrichtungsanleitung genau befolgt haben, wird die Bereitstellung als fehlgeschlagen gemeldet.

3. Problem finden und lösen

In diesem Abschnitt verwenden Sie die Protokollerklärungen und andere Unterstützung von Gemini, um das Problem zu identifizieren und zu lösen.

1. Die Bereitstellung schlägt fehl. Es sollte eine Fehlermeldung mit zusätzlichen Informationen und einer Option zum Ansehen von Bereitstellungslogs angezeigt werden. Klicken Sie auf VIEW LOGS (Protokolle ansehen), um die Protokolle der Bereitstellung aufzurufen.

bc62db6ef3b35420.png

HINWEIS: Die Bereitstellungslogs werden in einem separaten Tab im selben Browser geöffnet. Um dieses Codelab abzuschließen, müssen Sie zwischen den Tabs wechseln.

HINWEIS, dass beim Klicken auf PROTOKOLLE ANSEHEN möglicherweise keine oder nur einige Zeilen angezeigt werden. Verwenden Sie in einem solchen Fall die Zeitraumauswahl im Abfragebereich des Log-Explorers und wählen Sie Letzte 30 Minuten aus.

e24856920201ebf8.png

2. Prüfen Sie die Logs im geöffneten Tab. Achten Sie darauf, dass Logzusammenfassungen wie mehrere Zeilen des Aufrufstacks der Ausnahme aussehen. Das liegt daran, dass Cloud Functions den an stdout oder stderr ausgegebenen Text erfasst und jede Zeile als separaten Logeintrag schreibt. In anderen Logzeilen werden Informationen zum Exit-Fehlercode sowie zusätzliche Informationen zusammengefasst, die von Cloud Functions und Cloud Run APIs gemeldet werden.

b49e41594173b57c.png

Wenn Sie auf eine der Zeilen klicken, werden weitere Informationen zu einem bestimmten Protokoll angezeigt. Die maximierten Logs enthalten zusätzliche UI-Elemente, auf die Sie klicken können. Sie können alle Informationen zum Protokoll kopieren, alle Felder maximieren, um alle Daten des Logeintrags anzuzeigen und den Logeintrag mit Gemini zu erklären.

4. Der Ausnahme-Callstack ist nicht sehr informativ. Suchen Sie in den Logs nach dem Ende des Stacktrace-Protokolls der Ausnahme. Das ist die Zeile, die „Container called exit(1)“ lautet. In der folgenden Logzusammenfassung steht:

functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...

Das scheint ein guter Kandidat für eine Untersuchung zu sein. Klicken Sie auf diese Zeile, um den Logeintrag zu maximieren. Klicken Sie dann auf den Link Diesen Logeintrag erklären. Schaltfläche, um weitere Informationen zum ausgewählten Protokoll aufzurufen.

b815de46d1b4597c.png

Wenn Gemini noch nicht in diesem Projekt verwendet wurde, werden Sie aufgefordert, eine erforderliche API zu aktivieren. Wenn Sie aufgefordert werden, die API zu aktivieren, klicken Sie auf AKTIVIEREN, um fortzufahren.

7ca90e087a2e99d1.png

HINWEIS: Gelegentlich kann bei Prompts für Gemini eine Fehlermeldung angezeigt werden. Wiederholen Sie in diesem Fall die Aufforderung noch einmal, um eine Antwort zu erhalten. Klicken Sie beispielsweise auf den Link Diesen Logeintrag erklären. Schaltfläche erneut.

5. Lesen Sie sich die Erklärung von Gemini durch. Wenn die angegebene Erklärung nicht ausreicht oder unklar ist, fordere Gemini auf, weitere Informationen anzugeben. Verwende dazu einen der folgenden Prompts oder erstelle eine eigene Frage.

Können Sie mir weitere Informationen zu diesem Protokoll geben?
Können Sie weitere Informationen zum Fehler angeben?

6. Fordere dann Gemini auf, Vorschläge zur Lösung des Problems zu erhalten. Beispiel: Gemini fragen

Wie kann ich das Problem lösen?
Schlag eine Lösung für den Fehler vor
Schlag mir vor, wie ich den Fehler beheben kann

Die Antwort von Gemini kann je nach aktuellem Kontext sowie vom Wortlaut und Format des Prompts variieren. Von Gemini wird erwartet, dass der Quellcode der Cloud Functions-Funktion eine Funktion mit dem Namen hello_http enthält.

7. Sie sehen derzeit den Tab mit den Cloud Functions-Logs. Wählen Sie den vorherigen Tab aus, auf dem die Bereitstellungsseite der Cloud Functions-Funktion mit dem Fehler angezeigt wird, und klicken Sie auf BEARBEITEN.

c3d9b207214a2240.png

8. Prüfen Sie, ob die Authentifizierung weiterhin auf Nicht authentifizierte Aufrufe zulassen gesetzt ist, und aktualisieren Sie die Auswahl bei Bedarf.

6a2aaf9bedd161d9.png

9. Klicke unten auf WEITER, um den Inline-Editor aufzurufen. Folgen Sie der Gemini-Empfehlung und ändern Sie den Funktionsnamen von get_order_list in hello_http.

Klicken Sie nach dem Bearbeiten auf BEREITSTELLEN.

Möglicherweise müssen Sie einige Minuten warten, bis der Bereitstellungsprozess abgeschlossen ist. Prüfen Sie, ob die Bereitstellung erfolgreich abgeschlossen wurde und keine Fehlermeldungen angezeigt werden.

HINWEIS: In der Console wird möglicherweise weiterhin die letzte Fehlermeldung angezeigt, bis der Bereitstellungsprozess abgeschlossen ist.

10. Prüfen Sie, ob die Cloud Functions-Funktion betriebsbereit ist. Senden Sie dazu die folgende HTTPS-Anfrage mit curl. Sie können Cloud Shell verwenden oder dies über jedes Terminal tun, auf dem die curl- und gcloud-Befehlszeile installiert ist.Führen Sie dazu den folgenden Befehl über das Cloud Shell-Terminal aus.

curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"

HINWEIS: Wenn Sie diesen Befehl über ein Terminal ausführen möchten, müssen Sie sich über die gcloud CLI authentifizieren und den Wert Ihrer Projekt-ID auf die Umgebungsvariable GOOGLE_CLOUD_PROJECT festlegen.

Bonus

Der Name der Funktion hello_http wurde als Standardeinstiegspunkt für eine durch HTTP ausgelöste Cloud Functions-Funktion definiert, als die Python-Laufzeit ausgewählt wurde. Alternativ können Sie get_order_list als Namen der Funktion im Quellcode beibehalten und das Einstiegspunktfeld der Cloud Functions-Funktion aktualisieren, das sich über dem Inline-Editor rechts vom Feld „Laufzeit“ befindet:

9a3cd8bf272b4d02.png

Wenn Sie den Einstiegspunkt von hello_http in get_order_list ändern, wird das Problem mit der Bereitstellung behoben.

4. Bereinigen

Zum Bereinigen können Sie entweder das Projekt herunterfahren oder die Cloud Functions-Instanz löschen. Sie können Cloud Functions-Funktionen über die Console oder mit dem CLI-Befehl wie unten löschen:

gcloud functions delete codelab-cf --region=us-central1

5. Glückwunsch!

Herzlichen Glückwunsch! Sie haben Gemini erfolgreich verwendet, um das Problem mit Ihrer Anwendung zu beheben. Sie wissen jetzt, wie Sie Logs verstehen und Antworten auf Fragen zu Google Cloud erhalten.

Referenzdokumente...