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

1. Введение

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

Что вы будете делать...

  • Для настройки среды, включая включение соответствующих API Google и создание облачной функции на основе предоставленного кода, вы будете использовать терминал Cloud Shell и интерфейс командной строки gcloud.
  • Для анализа собранной информации вы будете использовать функцию суммирования логов Cloud Logging.
  • Вы сможете пообщаться с представителями 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

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

Обратите внимание, что при нажатии кнопки «Просмотреть журналы» вы можете не увидеть ни одной строки или увидеть только несколько строк. В таком случае используйте селектор временного диапазона в панели запроса обозревателя журналов и выберите «Последние 30 минут» .

e24856920201ebf8.png

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

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. В данный момент вы видите вкладку с журналами Cloud Functions. Выберите предыдущую вкладку, на которой отображается страница развертывания Cloud Functions с ошибкой, и нажмите «Редактировать».

c3d9b207214a2240.png

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

6a2aaf9bedd161d9.png

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

После завершения редактирования нажмите кнопку РАЗВЕРНУТЬ.

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

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

10. Проверьте работоспособность облачной функции, отправив следующий 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 CLI и установить значение идентификатора вашего проекта равным переменной среды GOOGLE_CLOUD_PROJECT .

Бонус

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

9a3cd8bf272b4d02.png

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

4. Уборка

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

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

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

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

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