Fehlerbehebung mit Gemini CodeLab

1. Einführung

In diesem Lab verwenden Sie Gemini, einen KI-Assistenten in Google Cloud, um ein Problem mit der Bereitstellung von Cloud Functions zu beheben. Dazu analysieren Sie Fehlerlogs, ermitteln die Ursache des Problems und finden heraus, wie Sie es beheben können.

Ihre Aufgaben:

  • Sie verwenden Cloud Shell-Terminal und die gcloud CLI, um die Umgebung einzurichten, einschließlich der Aktivierung relevanter Google-APIs und der Erstellung einer Cloud-Funktion aus dem bereitgestellten Code.
  • Sie verwenden die Log-Zusammenfassung von Cloud Logging, um Log-Zusammenfassungen zu generieren und so die erfassten Informationen besser zu verstehen.
  • Sie chatten mit Gemini, um Unterstützung bei der Fehlerbehebung und Lösung des Problems zu erhalten.

Lerninhalte

  • Verwendung von Gemini mit Google Cloud Observability und zur Fehlerbehebung.
  • Mit Gemini Cloud Functions-Logs suchen und verstehen.

Voraussetzungen

  • 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 Softwareentwickler aller Erfahrungsstufen, einschließlich Anfänger. Wir konzentrieren uns darauf, praktische Erfahrungen mit den Funktionen von Gemini bei der Fehlerbehebung zu sammeln.

2. Einrichtung

In diesem Abschnitt erfahren Sie alles, was Sie für den Einstieg in dieses Lab benötigen.

Umgebung konfigurieren

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

2. Wählen Sie ein Google Cloud-Projekt aus, mit dem Sie in diesem Lab arbeiten möchten.

22170459a4f3ba59.png

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

9d27c844c16ad3e4.png

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

35f23e52875b26cd.png

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

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

5b7978521d6f56f7.png

Klicken Sie auf „AKTIVIEREN“, um fortzufahren.

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

  • Legen Sie den Namen auf „codelab-cf“ fest.
  • Wählen Sie die Option Nicht authentifizierte Aufrufe zulassen aus.

6a2aaf9bedd161d9.png

Klicken Sie zum Abschließen des Schritts links unten im Fenster auf die Schaltfläche „WEITER“:

f4e76470dbdf6854.png

Nachdem Sie auf „WEITER“ geklickt haben, werden Sie möglicherweise aufgefordert, zusätzliche 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. Keine Sorge, wenn Sie mit Python nicht vertraut sind. Für dieses Codelab sind keine Python-Kenntnisse erforderlich.

5. Wählen Sie Python 3.11 als Laufzeit der Funktion aus.

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 automatisch generierte Beispiel für die 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)

In diesem Code wird das Attribut path aus der GET-Anfrage gelesen, der Pfad wird geparst, um den Bucket-Namen zu ermitteln, und die Google Cloud Storage API wird aufgerufen, um eine Liste der Objekte abzurufen, die unter diesem Pfad gespeichert sind. Die Funktion (get_object_list) akzeptiert eine Anfrage, die ein Flask-Objekt als Eingabeargument ist, und gibt die Namen der Objekte als JSON-Array zurück.

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

google-cloud-storage

8. Klicken Sie links unten auf „DEPLOY“ (BEREITSTELLEN), um die Cloud Functions-Funktion bereitzustellen.

17c4828702a32cd9.png

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

3. Problem finden und beheben

In diesem Abschnitt verwenden Sie die Funktion „Log-Erklärungen“ und andere Gemini-Unterstützung, um das Problem und die Lösung zu ermitteln.

1. Die Bereitstellung schlägt fehl. Sie sollten eine Fehlermeldung mit zusätzlichen Informationen und einer Option zum Aufrufen der Bereitstellungsprotokolle sehen. Klicken Sie auf LOGS ANSEHEN, um die Logs der Bereitstellung aufzurufen.

bc62db6ef3b35420.png

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

HINWEIS: Möglicherweise werden keine oder nur wenige Logzeilen angezeigt, wenn Sie auf „LOGS ANSEHEN“ klicken. In diesem Fall können Sie im Anfragebereich des Log-Explorers die Zeitraumauswahl verwenden und Letzte 30 Minuten auswählen.

e24856920201ebf8.png

2. Sehen Sie sich die Logs auf dem geöffneten Tab an. Achten Sie darauf, dass Logzusammenfassungen wie mehrere Zeilen des Callstacks der Ausnahme aussehen. Das liegt daran, dass Cloud Functions Text erfasst, der in stdout oder stderr ausgegeben wird, und jede Zeile als separaten Logeintrag schreibt. Andere Logzeilen fassen Informationen zum Beenden des Fehlercodes sowie zusätzliche Informationen zusammen, die von den Cloud Functions- und Cloud Run-APIs gemeldet werden.

b49e41594173b57c.png

Sie können auf eine beliebige Zeile klicken, um weitere Informationen zu einem bestimmten Log aufzurufen. Die maximierten Logs enthalten zusätzliche UI-Elemente, mit denen Sie alle Informationen zum Log kopieren, alle Felder maximieren, um alle Daten des Logeintrags anzuzeigen, und den Logeintrag mit Gemini erläutern lassen können.

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

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

Das sieht nach einem guten Kandidaten für eine Untersuchung aus. Klicken Sie auf diese Zeile, um den Logeintrag zu maximieren. Klicken Sie dann auf die Schaltfläche Diesen Logeintrag erklären, um zusätzliche Informationen zum ausgewählten Log aufzurufen.

b815de46d1b4597c.png

Wenn Gemini in diesem Projekt noch nicht 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 es vorkommen, dass Sie bei der Aufforderung von Gemini einen Fehler erhalten. Wiederholen Sie in einem solchen Fall den Promptvorgang, um die Antwort zu erhalten. Klicken Sie beispielsweise noch einmal auf die Schaltfläche Diesen Logeintrag erklären.

5. Von Gemini bereitgestellte Erläuterung ansehen. Wenn die Erklärung nicht ausreichend oder unklar ist, können Sie Gemini mit einem der folgenden Prompts oder einer eigenen Frage um weitere Informationen bitten.

Können Sie uns weitere Informationen zu diesem Log geben?
Können Sie uns weitere Informationen zu dem Fehler geben?

6. Geben Sie dann einen Prompt ein, um Gemini nach Vorschlägen zur Behebung des Problems zu fragen. Sie können Gemini beispielsweise fragen:

Wie kann ich dieses Problem beheben?
Schlage eine Lösung für diesen Fehler vor.
Schlage vor, wie ich diesen Fehler beheben kann.

Die Antwort von Gemini kann je nach aktuellem Kontext sowie Formulierung und Format Ihres Prompts variieren. Es wird erwartet, dass Gemini empfiehlt, dafür zu sorgen, dass der Quellcode der Cloud Functions-Funktion eine Funktion mit dem Namen hello_http enthält.

7. Sie sehen derzeit den Tab mit Cloud Functions-Logs. Wählen Sie den vorherigen Tab aus, auf dem die Bereitstellungsseite der Cloud-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 festgelegt ist, und aktualisieren Sie die Auswahl gegebenenfalls.

6a2aaf9bedd161d9.png

9. Klicken Sie 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 Abschluss der Bearbeitung auf „DEPLOY“ (Bereitstellen).

Möglicherweise müssen Sie einige Minuten warten, bis die Bereitstellung 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 Bereitstellungsvorgang abgeschlossen ist.

10. Prüfen Sie, ob die Cloud-Funktion betriebsbereit ist, indem Sie die folgende HTTPS-Anfrage mit curl senden. Sie können Cloud Shell verwenden oder die folgenden Befehle in einem beliebigen Terminal ausführen, auf dem die curl- und gcloud-Befehlszeilenschnittstelle installiert ist.

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 mit der 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 HTTP-getriggerte Cloud Functions definiert, als die Python-Laufzeit ausgewählt wurde. Alternativ können Sie get_order_list als Namen der Funktion im Quellcode beibehalten und das Feld „Einstiegspunkt“ der Cloud-Funktion, das sich über dem Inline-Editor rechts neben dem Feld „Laufzeit“ befindet, aktualisieren:

9a3cd8bf272b4d02.png

Wenn Sie den Einstiegspunkt von hello_http zu 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 Gemini Ihnen helfen kann, Logs zu verstehen und Antworten auf Fragen zu Google Cloud zu erhalten.

Referenzdokumente