Risolvi i problemi con Gemini CodeLab

1. Introduzione

In questo lab, utilizzerai Gemini, un collaboratore basato sull'AI in Google Cloud, per risolvere i problemi di deployment di Cloud Functions analizzando i log degli errori, identificando la causa principale del problema e scoprendo come risolverlo.

Attività previste

  • Utilizzerai il terminale Cloud Shell e gcloud CLI per configurare l'ambiente, inclusa l'attivazione delle API di Google pertinenti e la creazione di una funzione Cloud Functions dal codice fornito
  • Utilizzerai il riepilogo dei log di Cloud Logging per generare riepiloghi dei log al fine di comprendere le informazioni acquisite.
  • Parlerai con Gemini per ricevere assistenza nella risoluzione del problema.

Cosa imparerai:

  • Come utilizzare Gemini con Google Cloud Observability e per la risoluzione dei problemi.
  • Come trovare e comprendere i log di Cloud Functions con l'aiuto di Gemini.

Che cosa ti serve…

  • Browser web Chrome
  • Un progetto cloud Google Cloud con la fatturazione abilitata
  • Un Account Google con autorizzazioni di accesso al progetto che ti consentono di abilitare le API e manipolare le risorse

Questo lab è rivolto a ingegneri DevOps e di piattaforma e a sviluppatori software di tutti i livelli, inclusi i principianti. Ci concentreremo sull'acquisizione di esperienza pratica con le funzionalità di Gemini per la risoluzione dei problemi.

2. Configurazione

Questa sezione descrive tutto ciò che devi fare per iniziare questo lab.

Configura ambiente

1. Accedi a Cloud Console aprendo https://console.cloud.google.com.

2. Seleziona un progetto cloud Google Cloud con cui prevedi di lavorare per questo lab.

22170459a4f3ba59.png

3. Apri la pagina Cloud Functions nella console. Per farlo, seleziona Cloud Functions dal menu di navigazione (icona ☰ in alto a sinistra nella finestra della console).

9d27c844c16ad3e4.png

In alternativa, puoi cercare "Cloud Functions" nell'area di ricerca della console:

35f23e52875b26cd.png

Fai clic sul pulsante Crea funzione nella parte superiore dell'elenco delle funzioni 34b5e7e36f4e48e9.png

Se non hai mai utilizzato Cloud Functions in questo progetto, per poter lavorare ti verrà chiesto di abilitare le API di Google.

5b7978521d6f56f7.png

Fai clic su ATTIVA per continuare.

4. Definisci le proprietà di base della nuova funzione Cloud Functions.

  • Imposta il nome su "codelab-cf"
  • Seleziona l'opzione Consenti chiamate non autenticate.

6a2aaf9bedd161d9.png

Per completare il passaggio, fai clic sul pulsante AVANTI nell'area in basso a sinistra della finestra:

f4e76470dbdf6854.png

Dopo aver fatto clic su AVANTI, potrebbe esserti chiesto di abilitare altre API Google. Come nel passaggio 4, fai clic su ATTIVA.

1ad7bf15c07eda49.png

Configura il runtime e il codice della funzione Cloud Functions

Questo codelab utilizza Python come linguaggio di programmazione. Non preoccuparti se non hai familiarità con Python. Per completare questo codelab non è necessaria la conoscenza di Python.

5. Seleziona Python 3.11 come runtime della funzione

9a3cd8bf272b4d02.png

Tieni presente che la modifica del runtime cambia il codice sorgente mostrato nell'editor incorporato.

6. Copia il codice riportato di seguito nell'editor in linea per modificare l'esempio di guida rapida generato automaticamente.

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)

Questo codice legge l'attributo path dalla richiesta GET, analizza il percorso per recuperare il nome del bucket e chiama l'API Storage di Google Cloud per ottenere un elenco degli oggetti archiviati in questo percorso. La funzione (get_object_list) accetta una richiesta, ovvero un oggetto Flask, come argomento di input e restituisce i nomi degli oggetti come array JSON.

7. Seleziona il file requirements.txt dall'elenco dei file rimasti nell'editor in linea. Sostituisci l'elenco corrente delle dipendenze con quello nuovo copiando il codice riportato di seguito nell'editor incorporato.

google-cloud-storage

8. Per eseguire il deployment di Cloud Functions, fai clic su ESEGUI IL DEPLOY in basso a sinistra.

17c4828702a32cd9.png

Potrebbe essere necessario attendere un paio di minuti fino al completamento del processo di deployment. Se hai seguito attentamente le istruzioni di configurazione, dovresti vedere il deployment segnalato come non riuscito.

3. Individuare e risolvere il problema

In questa sezione utilizzerai la funzionalità Spiegazioni log e altre funzionalità di Gemini per identificare il problema e il modo per risolverlo.

1. Il deployment non riesce. Dovresti visualizzare un messaggio di errore che ti informa di questo problema, con ulteriori informazioni e un'opzione per visualizzare i log di deployment. Fai clic su VISUALIZZA LOG per visualizzare i log del deployment.

bc62db6ef3b35420.png

Tieni presente che i log di deployment verranno aperti in una scheda separata dello stesso browser. Per completare questo codelab, dovrai spostarti tra le schede.

Tieni presente che potresti non visualizzare le righe di log quando fai clic su VISUALIZZA LOG o visualizzarne solo un paio. In questo caso, utilizza il selettore dell'intervallo di tempo nel riquadro della query di Esplora log e seleziona Ultimi 30 minuti.

e24856920201ebf8.png

2. Esamina i log nella scheda aperta. Tieni presente che i riepiloghi dei log si presentano come più righe dello stack di chiamate dell'eccezione. Questo perché Cloud Functions acquisisce il testo stampato in stdout o stderr e scrive ogni riga come una voce di log separata. Altre righe di log riepilogano le informazioni sul codice di errore di uscita, nonché informazioni aggiuntive segnalate dalle API Cloud Functions e Cloud Run.

b49e41594173b57c.png

Puoi fare clic su una qualsiasi delle righe per visualizzare ulteriori informazioni su un log specifico. I log espansi hanno elementi dell'interfaccia utente aggiuntivi che, se selezionati, consentono di copiare tutte le informazioni sul log, espandere tutti i campi per visualizzare tutti i dati della voce di log e spiegare la voce di log utilizzando Gemini.

4. Lo stack di chiamate dell'eccezione non è molto informativo. Esamina i log per trovare la fine del log di traccia dell'analisi dello stack dell'eccezione. È la riga che dice "Container called exit(1)". Il seguente riepilogo del log indica:

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

Sembra un buon candidato per l'indagine. Fai clic su questa riga per espandere la voce di log. Poi fai clic sul pulsante "Spiega questa voce di log" per visualizzare ulteriori informazioni sul log selezionato.

b815de46d1b4597c.png

Se Gemini non è stato utilizzato in precedenza in questo progetto, ti verrà chiesto di abilitare un'API richiesta. Se ti viene chiesto di abilitare l'API, fai clic su ABILITA per continuare.

7ca90e087a2e99d1.png

Tieni presente che occasionalmente potresti ricevere un errore quando utilizzi Gemini. In questo caso, ripeti l'operazione del prompt un'altra volta per ottenere la risposta. Ad esempio, fai di nuovo clic sul pulsante "Spiega questa voce di log".

5. Esamina la spiegazione fornita da Gemini. Se la spiegazione fornita non è sufficiente o non è chiara, chiedi a Gemini di fornire maggiori informazioni utilizzando uno dei seguenti prompt o componendo una domanda personalizzata.

Puoi fornire maggiori informazioni su questo log?
Puoi fornire maggiori informazioni sull'errore?

6. Poi chiedi a Gemini suggerimenti per risolvere il problema. Ad esempio, chiedi a Gemini

Come faccio a risolvere questo problema?
Suggerisci una soluzione per risolvere questo errore
Suggerisci come posso correggere questo errore

La risposta di Gemini può variare a seconda del contesto attuale, nonché della formulazione e del formato del prompt. È previsto che Gemini consiglierà di assicurarsi che il codice sorgente di Cloud Functions abbia una funzione con il nome hello_http.

7. Attualmente stai visualizzando la scheda che mostra i log di Cloud Functions. Seleziona la scheda precedente che mostra la pagina di deployment di Cloud Functions con l'errore e fai clic su MODIFICA.

c3d9b207214a2240.png

8. Verifica che l'autenticazione sia ancora impostata su Consenti chiamate non autenticate e aggiorna la selezione, se necessario.

6a2aaf9bedd161d9.png

9. Fai clic su AVANTI in basso per visualizzare l'editor in linea. Segui il suggerimento di Gemini e cambia il nome della funzione da get_order_list a hello_http.

Al termine della modifica, fai clic su ESEGUI IL DEPLOYMENT.

Potrebbe essere necessario attendere un paio di minuti fino al completamento del processo di deployment. Verifica che il deployment venga completato correttamente e che non vengano visualizzati messaggi di errore.

Tieni presente che Console potrebbe continuare a mostrare l'ultimo messaggio di errore fino al completamento della procedura di deployment.

10. Verifica che la funzione Cloud Functions sia operativa inviando la seguente richiesta HTTPS utilizzando curl. Puoi utilizzare Cloud Shell o farlo da qualsiasi terminale su cui sono installate le CLI curl e gcloud eseguendo il seguente comando dal terminale Cloud Shell.

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)"

Tieni presente che per eseguire questo comando da un terminale devi autenticarti utilizzando gcloud CLI e impostare il valore dell'ID progetto sulla variabile di ambiente GOOGLE_CLOUD_PROJECT.

Bonus

Il nome della funzione hello_http è stato definito come punto di ingresso predefinito per la funzione Cloud Functions attivata da HTTP quando è stato selezionato il runtime Python. Una soluzione alternativa può essere quella di mantenere get_order_list come nome della funzione nel codice sorgente e aggiornare il campo entry point della funzione Cloud Functions che si trova sopra l'editor incorporato a destra del campo runtime:

9a3cd8bf272b4d02.png

La modifica del punto di contatto da hello_http a get_order_list risolverà il problema di deployment.

4. Esegui la pulizia

Per eseguire la pulizia, puoi arrestare il progetto o eliminare l'istanza di Cloud Functions. Puoi eliminare Cloud Functions utilizzando la console o con il comando CLI come di seguito:

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

5. Complimenti!

Congratulazioni. Hai utilizzato Gemini per risolvere i problemi e la risoluzione del problema con la tua applicazione e ora sai come può aiutarti a comprendere i log e a ottenere risposte alle domande su Google Cloud.

Documenti di riferimento…