Устранение неполадок с помощью Gemini CodeLab

1. Введение

В ходе этой лабораторной работы вы будете использовать Gemini , инструмент для совместной работы на базе искусственного интеллекта в Google Cloud, для устранения проблем с развертыванием облачных функций путем анализа журналов ошибок, определения основной причины проблемы и поиска способов ее устранения.

Что ты сделаешь...

  • Вы будете использовать терминал Cloud Shell и интерфейс командной строки gcloud для настройки среды, включая включение соответствующих API Google и создание облачной функции на основе предоставленного кода.
  • Вы будете использовать суммирование журналов Cloud Logging для создания сводок журналов, чтобы понять собранную информацию.
  • Вы поговорите с Gemini, чтобы получить помощь Gemini в устранении неполадок и решении проблемы.

Чему вы научитесь...

  • Как использовать Gemini с Google Cloud Observability и для устранения неполадок.
  • Как найти и понять журналы облачных функций с помощью Gemini.

Что вам понадобится...

  • Веб-браузер Chrome
  • Проект Google Cloud с включенной оплатой
  • Учетная запись Google с правами доступа к проекту, позволяющая включать API и манипулировать ресурсами.

Эта лаборатория предназначена для DevOps, инженеров платформ и разработчиков программного обеспечения всех уровней, включая новичков. Наше внимание будет сосредоточено на получении практического опыта использования возможностей Gemini по устранению неполадок.

2. Настройка

В этом разделе описано все, что вам нужно сделать, чтобы начать работу с этой лабораторной работой.

Настройка среды

1. Войдите в Cloud Console, открыв https://console.cloud.google.com .

2. Выберите проект Google Cloud, с которым вы планируете работать в этой лабораторной работе.

22170459a4f3ba59.png

3. Откройте страницу облачных функций в консоли. Вы можете сделать это, выбрав «Облачные функции» в меню навигации (левый верхний значок ☰ в окне консоли).

9d27c844c16ad3e4.png

Альтернативно вы можете выполнить поиск «облачных функций» в области поиска консоли:

35f23e52875b26cd.png

Нажмите кнопку «Создать функцию» над списком функций. 34b5e7e36f4e48e9.png

Если вы ранее не использовали Cloud Functions в этом проекте, для работы вам будет предложено включить API Google.

5b7978521d6f56f7.png

Нажмите ВКЛЮЧИТЬ, чтобы продолжить.

4. Определите основные свойства новой функции облака.

  • Установите имя « codelab-cf ».
  • Выберите параметр «Разрешить неаутентифицированные вызовы».

6a2aaf9bedd161d9.png

Чтобы завершить этот шаг, нажмите кнопку «ДАЛЕЕ» в левом нижнем углу окна:

f4e76470dbdf6854.png

После нажатия кнопки «ДАЛЕЕ» вам может быть предложено включить дополнительные API Google. Как и в шаге 4, нажмите ВКЛЮЧИТЬ.

1ad7bf15c07eda49.png

Настройте среду выполнения и код облачной функции.

В этой CodeLab в качестве языка программирования используется Python. Не волнуйтесь, если вы не знакомы с Python. Для прохождения CodeLab вам не потребуются знания Python.

5. Выберите Python 3.11 в качестве среды выполнения функции.

9a3cd8bf272b4d02.png

Обратите внимание, что изменение среды выполнения изменяет исходный код, отображаемый во встроенном редакторе.

6. Скопируйте приведенный ниже код во встроенный редактор, чтобы изменить пример автоматического создания краткого руководства.

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)

Этот код считывает атрибут path из запроса GET, анализирует путь, чтобы получить имя корзины, и вызывает API Google Cloud Storage, чтобы получить список объектов, хранящихся по этому пути. Функция ( get_object_list ) принимает запрос, который представляет собой объект Flask, в качестве входного аргумента и возвращает имена объектов в виде массива JSON.

7. Выберите файл requirements.txt из списка файлов, оставшихся во встроенном редакторе. Замените текущий список зависимостей новым, скопировав приведенный ниже код во встроенный редактор.

google-cloud-storage

8. Чтобы развернуть облачную функцию, нажмите РАЗВЕРТЫВАТЬ в левом нижнем углу.

17c4828702a32cd9.png

Возможно, вам придется подождать пару минут, пока процесс развертывания завершится. Если вы внимательно следовали инструкциям по установке, вы должны ожидать, что развертывание будет отмечено как неудачное.

3. Поиск и решение проблемы

В этом разделе вы будете использовать функцию пояснений журнала и другую помощь Gemini для выявления проблемы и способа ее решения.

1. Развертывание не удалось. Вы должны увидеть сообщение об ошибке, информирующее вас об этом с дополнительной информацией и возможностью просмотра журналов развертывания. Нажмите ПРОСМОТР ЖУРНАЛОВ, чтобы просмотреть журналы развертывания.

bc62db6ef3b35420.png

ОБРАТИТЕ ВНИМАНИЕ, что журналы развертывания будут открываться на отдельной вкладке в том же браузере. Для завершения этой CodeLab вам нужно будет перемещаться между вкладками.

ОБРАТИТЕ ВНИМАНИЕ, что вы можете не увидеть строки журнала при нажатии ПРОСМОТР ЖУРНАЛОВ или увидеть только пару строк. В таком случае воспользуйтесь селектором временного диапазона на панели запросов обозревателя журналов и выберите «Последние 30 минут» .

e24856920201ebf8.png

2. Просмотрите логи на открывшейся вкладке. Обратите внимание, что сводка журнала выглядит как несколько строк стека вызовов исключения. Это связано с тем, что Cloud Function захватывает текст, выводимый на stdout или stderr , и записывает каждую строку как отдельную запись журнала. В других строках журнала суммируется информация о коде ошибки выхода, а также дополнительная информация, сообщаемая Cloud Functions и Cloud Run API.

b49e41594173b57c.png

Вы можете нажать на любую из строк, чтобы просмотреть дополнительную информацию о конкретном журнале. Расширенные журналы имеют дополнительные элементы пользовательского интерфейса, нажатие на которые позволяет скопировать всю информацию о журнале, развернуть все поля для отображения всех данных записи журнала и объяснить запись журнала с помощью Gemini.

4. Стек вызовов исключений не очень информативен. Просмотрите журналы и найдите конец журнала трассировки стека исключения. Это строка, в которой говорится: « Container called exit(1) ». В следующей сводке журнала говорится:

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

Похоже, это хороший кандидат для расследования. Нажмите на эту строку, чтобы развернуть запись журнала. Затем нажмите кнопку « Объясните эту запись журнала », чтобы просмотреть дополнительную информацию о выбранном журнале.

b815de46d1b4597c.png

Если Gemini ранее не использовался в этом проекте, вам будет предложено включить необходимый API. Если вам будет предложено включить API, нажмите ВКЛЮЧИТЬ, чтобы двигаться дальше.

7ca90e087a2e99d1.png

ОБРАТИТЕ ВНИМАНИЕ, что иногда при запросе Gemini может возникнуть ошибка. В таком случае повторите операцию подсказки еще раз, чтобы получить ответ. Например, еще раз нажмите кнопку « Объясните эту запись журнала ».

5. Просмотрите объяснение, предоставленное Близнецами. Если данное объяснение недостаточно или неясно, предложите Близнецам предоставить дополнительную информацию, используя одну из следующих подсказок или задав собственный вопрос.

Можете ли вы предоставить дополнительную информацию об этом журнале?
Можете ли вы предоставить дополнительную информацию об ошибке?

6. Затем предложите Gemini предложения по решению проблемы. Например, спросите Близнецов

Как решить эту проблему?
Предложите решение для устранения этой ошибки
Подскажите, как можно исправить эту ошибку

Ответ Близнецов может варьироваться в зависимости от текущего контекста, а также от формулировки и формата вашей подсказки. Ожидается, что Gemini порекомендует убедиться, что в исходном коде Cloud Function есть функция с именем hello_http .

7. В настоящее время вы видите вкладку, на которой отображаются журналы облачных функций. Выберите предыдущую вкладку, на которой показана страница развертывания облачной функции с ошибкой, и нажмите «ИЗМЕНИТЬ».

c3d9b207214a2240.png

8. Убедитесь, что для проверки подлинности по-прежнему установлено значение «Разрешить неаутентифицированные вызовы» , и при необходимости обновите выбор.

6a2aaf9bedd161d9.png

9. Нажмите «ДАЛЕЕ» внизу, чтобы увидеть встроенный редактор. Следуйте рекомендациям Gemini и измените имя функции с get_order_list на hello_http .

После завершения редактирования нажмите DEPLOY.

Возможно, вам придется подождать пару минут, пока процесс развертывания завершится. Убедитесь, что развертывание завершено успешно и сообщения об ошибках не появляются.

ОБРАТИТЕ ВНИМАНИЕ, что консоль может продолжать отображать последнее сообщение об ошибке до завершения процесса развертывания.

10. Убедитесь, что функция Cloud работает, отправив следующий HTTPS-запрос с помощью curl . Вы можете использовать Cloud Shell или сделать это с любого терминала, на котором установлены curl и gcloud CLI. Выполнив следующую команду из терминала 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)"

ОБРАТИТЕ ВНИМАНИЕ: для запуска этой команды с терминала вам необходимо будет пройти аутентификацию с помощью интерфейса командной строки gcloud и установить значение идентификатора вашего проекта в переменную среды GOOGLE_CLOUD_PROJECT .

Бонус

Имя функции hello_http было определено как точка входа по умолчанию для облачной функции, запускаемой HTTP, когда была выбрана среда выполнения Python. Альтернативным решением может быть сохранение get_order_list в качестве имени функции в исходном коде и обновление поля точки входа облачной функции, расположенного над встроенным редактором справа от поля «Время выполнения»:

9a3cd8bf272b4d02.png

Изменение точки входа с hello_http на get_order_list решит проблему с развертыванием.

4. Очистка

Для очистки вы можете закрыть проект или удалить экземпляр Cloud Function. Вы можете удалить облачные функции с помощью консоли или команды CLI , как показано ниже:

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

5. Поздравляем!

Поздравляем! Вы успешно использовали Gemini для устранения неполадок и решения проблемы с вашим приложением и теперь понимаете, как он может помочь в понимании журналов и получении ответов на вопросы о Google Cloud.

Справочные документы...