1. Обзор
Приложения Gen AI требуют наблюдения, как и любые другие. Требуются ли специальные методы наблюдения для генеративного ИИ ?
В ходе этой лабораторной работы вы создадите простое приложение Gen AI. Разверните его в Cloud Run . Оснастите его необходимыми возможностями мониторинга и ведения журналов с помощью сервисов и продуктов наблюдения Google Cloud.
Что вы узнаете
- Напишите приложение, использующее Vertex AI, с помощью редактора Cloud Shell.
- Сохраните код приложения на GitHub.
- Используйте gcloud CLI для развертывания исходного кода вашего приложения в Cloud Run.
- Добавьте возможности мониторинга и регистрации в свое приложение Gen AI.
- Использование метрик на основе журналов
- Реализация ведения журналов и мониторинга с помощью Open Telemetry SDK
- Получите представление об ответственной обработке данных ИИ
2. Предварительные условия
Если у вас еще нет учетной записи Google, вам необходимо создать новую учетную запись .
3. Настройка проекта
- Войдите в Google Cloud Console под своей учетной записью Google.
- Создайте новый проект или повторно используйте существующий проект. Запишите идентификатор проекта, который вы только что создали или выбрали.
- Включите биллинг для проекта.
- Завершение этой лабораторной работы должно стоить менее 5 долларов США.
- Вы можете выполнить действия, описанные в конце этого практического занятия, чтобы удалить ресурсы и избежать дальнейших расходов.
- Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .
- Убедитесь, что оплата включена в разделе «Мои проекты» в Cloud Billing.
- Если в вашем новом проекте в столбце
Billing account
указано,Billing is disabled
:- Нажмите на три точки в столбце «
Actions
. - Нажмите Изменить платеж.
- Выберите платежный аккаунт, который вы хотите использовать.
- Нажмите на три точки в столбце «
- Если вы посещаете живое мероприятие, учетная запись, скорее всего, будет называться Пробная платежная учетная запись Google Cloud Platform.
- Если в вашем новом проекте в столбце
4. Подготовьте редактор Cloud Shell.
- Перейдите в редактор Cloud Shell . Если вам будет предложено следующее сообщение с запросом на авторизацию Cloud Shell для вызова gcloud с вашими учетными данными, нажмите «Авторизовать», чтобы продолжить.
- Открыть окно терминала
- Нажмите на гамбургер-меню
- Нажмите Терминал
- Нажмите «Новый терминал».
- Нажмите на гамбургер-меню
- В терминале настройте идентификатор вашего проекта:
Заменитеgcloud config set project [PROJECT_ID]
[PROJECT_ID]
на идентификатор вашего проекта. Например, если идентификатор вашего проекта —lab-example-project
, команда будет такой: Если вам будет предложено следующее сообщение о том, что gcloud запрашивает ваши учетные данные для GCPI API, нажмите «Авторизовать» , чтобы продолжить.gcloud config set project lab-project-id-example
При успешном выполнении вы должны увидеть следующее сообщение: Если вы видитеUpdated property [core/project].
WARNING
и вас спрашиваютDo you want to continue (Y/N)?
, то, вероятно, вы неправильно ввели идентификатор проекта. НажмитеN
, нажмитеEnter
и попробуйте снова запустить командуgcloud config set project
после того, как вы нашли правильный идентификатор проекта. - (Необязательно) Если у вас возникли проблемы с поиском идентификатора проекта, выполните следующую команду, чтобы просмотреть идентификаторы всех ваших проектов, отсортированных по времени создания в порядке убывания:
gcloud projects list \ --format='value(projectId,createTime)' \ --sort-by=~createTime
5. Включите API Google.
В терминале включите API Google, необходимые для этой лабораторной работы:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com \
cloudtrace.googleapis.com
Выполнение этой команды займет некоторое время. В конце концов, он выдает успешное сообщение, подобное этому:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
Если вы получили сообщение об ошибке, начинающееся с ERROR: (gcloud.services.enable) HttpError accessing
и содержащее сведения об ошибке, как показано ниже, повторите команду через 1–2 минуты.
"error": { "code": 429, "message": "Quota exceeded for quota metric 'Mutate requests' and limit 'Mutate requests per minute' of service 'serviceusage.googleapis.com' ...", "status": "RESOURCE_EXHAUSTED", ... }
6. Создайте приложение Gen AI Python.
На этом этапе вы напишете код простого приложения на основе запросов, которое использует модель Gemini, чтобы показать 10 забавных фактов о животном по вашему выбору. Выполните следующие действия, чтобы создать код приложения.
- В терминале создайте каталог
codelab-o11y
:mkdir ~/codelab-o11y
- Измените текущий каталог на
codelab-o11y
:cd ~/codelab-o11y
- Создайте файл
requirements.txt
со списком зависимостей:cat > requirements.txt << EOF Flask==3.0.0 gunicorn==23.0.0 google-cloud-aiplatform==1.59.0 google-auth==2.32.0 EOF
- Создайте файл
main.py
и откройте его в редакторе Cloud Shell: Пустой файл должен появиться в окне редактора над терминалом. Ваш экран будет выглядеть примерно так:cloudshell edit main.py
- Скопируйте следующий код и вставьте его в открывшийся файл
main.py
: Через несколько секунд редактор Cloud Shell автоматически сохранит ваш код.import os from flask import Flask, request import google.auth import vertexai from vertexai.generative_models import GenerativeModel _, project = google.auth.default() app = Flask(__name__) @app.route('/') def fun_facts(): vertexai.init(project=project, location='us-central1') model = GenerativeModel('gemini-1.5-flash') animal = request.args.get('animal', 'dog') prompt = f'Give me 10 fun facts about {animal}. Return this as html without backticks.' response = model.generate_content(prompt) return response.text if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
Разверните код приложения Gen AI в Cloud Run.
- В окне терминала выполните команду для развертывания исходного кода приложения в Cloud Run.
Если вы увидите приглашение, подобное приведенному ниже, информирующее вас о том, что команда создаст новый репозиторий. Нажмитеgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Процесс развертывания может занять до нескольких минут. После завершения процесса развертывания вы увидите следующий результат:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Скопируйте отображаемый URL-адрес службы Cloud Run в отдельную вкладку или окно браузера. Альтернативно, выполните следующую команду в терминале, чтобы распечатать URL-адрес службы, и щелкните показанный URL-адрес, удерживая клавишу Ctrl , чтобы открыть URL-адрес:
При открытии URL-адреса вы можете получить ошибку 500 или увидеть сообщение:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Это означает, что сервисы не завершили свое развертывание. Подождите несколько минут и обновите страницу. В конце вы увидите текст, начинающийся со слов «Забавные факты о собаках» и содержащий 10 забавных фактов о собаках.Sorry, this is just a placeholder...
Попробуйте взаимодействовать с приложением, чтобы узнать забавные факты о разных животных. Для этого добавьте к URL-адресу параметр animal
, например ?animal=[ANIMAL]
, где [ANIMAL]
— имя животного. Например, добавьте ?animal=cat
чтобы получить 10 забавных фактов о кошках, или ?animal=sea turtle
чтобы получить 10 забавных фактов о морских черепахах.
7. Аудит вызовов Vertex API
Аудит вызовов API Google дает ответы на такие вопросы, как «Кто вызывает тот или иной API, где и когда?». Аудит важен при устранении неполадок в приложении, исследовании потребления ресурсов или проведении криминалистического анализа программного обеспечения.
Журналы аудита позволяют отслеживать административную и системную деятельность, а также регистрировать вызовы операций API «чтение данных» и «запись данных». Для аудита запросов Vertex AI на создание контента необходимо включить журналы аудита «Чтение данных» в облачной консоли.
- Нажмите кнопку ниже, чтобы открыть страницу журналов аудита в облачной консоли.
- Убедитесь, что на странице выбран проект, созданный вами для этой лабораторной работы. Выбранный проект отображается в верхнем левом углу страницы справа от гамбургер-меню:
При необходимости выберите правильный проект из поля со списком. - В таблице конфигурации журналов аудита доступа к данным в столбце Сервис найдите сервис
Vertex AI API
и выберите сервис, установив флажок, расположенный слева от названия сервиса. - В информационной панели справа выберите тип аудита «Чтение данных».
- Нажмите Сохранить .
Чтобы создать журналы аудита, откройте URL-адрес службы. Обновите страницу, изменив значение параметра ?animal=
чтобы получить другие результаты.
Изучите журналы аудита
- Нажмите кнопку ниже, чтобы открыть страницу обозревателя журналов в облачной консоли:
- Вставьте следующий фильтр в панель запросов.
Панель запросов — это редактор, расположенный в верхней части страницы обозревателя журналов:LOG_ID("cloudaudit.googleapis.com%2Fdata_access") AND protoPayload.serviceName="aiplatform.googleapis.com"
- Нажмите Выполнить запрос .
- Выберите одну из записей журнала аудита и разверните поля для проверки информации, записанной в журнале.
Вы можете просмотреть подробную информацию о вызове Vertex API, включая использованный метод и модель. Вы также можете увидеть личность инициатора и разрешения, авторизовавшие вызов.
8. Регистрируйте взаимодействие с Gen AI.
В журналах аудита вы не найдете параметры запроса API или данные ответа. Однако эта информация может быть важна для устранения неполадок приложения и анализа рабочего процесса. На этом этапе мы восполним этот пробел, добавив ведение журнала приложений. Для ведения журнала используется классический пакет logging
Python. Хотя в вашей производственной среде вы можете использовать другую структуру ведения журналов, принципы остаются теми же.
Пакет logging
Python не умеет записывать журналы в Google Cloud. Он поддерживает запись в стандартный вывод (по умолчанию stderr
) или в файл. Однако функция Cloud Run позволяет собирать информацию, выводящуюся в стандартный вывод, и автоматически передавать ее в Cloud Logging. Следуйте инструкциям ниже, чтобы добавить возможности ведения журнала в наше приложение Gen AI.
- Вернитесь в окно (или вкладку) Cloud Shell в браузере.
- В терминале снова откройте
main.py
:cloudshell edit ~/codelab-o11y/main.py
- Внесите следующие изменения в код приложения:
- Найдите последний оператор импорта. Это должна быть строка 5:
Поместите курсор на следующую строку (строка 6) и вставьте туда следующий блок кода.from vertexai.generative_models import GenerativeModel
import sys, json, logging class JsonFormatter(logging.Formatter): def format(self, record): json_log_object = { 'severity': record.levelname, 'message': record.getMessage(), } json_log_object.update(getattr(record, 'json_fields', {})) return json.dumps(json_log_object) logger = logging.getLogger(__name__) sh = logging.StreamHandler(sys.stdout) sh.setFormatter(JsonFormatter()) logger.addHandler(sh) logger.setLevel(logging.DEBUG)
- Найдите код, который вызывает модель для создания контента. Это должна быть строка 30:
Поместите курсор в начало СЛЕДУЮЩЕЙ строки (строка 31) и вставьте туда следующий блок кода.response = model.generate_content(prompt)
json_fields = { 'animal': animal, 'prompt': prompt, 'response': response.to_dict(), } logger.debug('content is generated', extra={'json_fields': json_fields})
stdout
, где они собираются агентом журналирования Cloud Run и асинхронно принимаются в Cloud Logging. В журналах фиксируются параметры животного в запросе, а также приглашение и ответ модели. Через несколько секунд редактор Cloud Shell автоматически сохранит ваши изменения. - Найдите последний оператор импорта. Это должна быть строка 5:
Разверните код приложения Gen AI в Cloud Run.
- В окне терминала выполните команду для развертывания исходного кода приложения в Cloud Run.
Если вы увидите приглашение, подобное приведенному ниже, информирующее вас о том, что команда создаст новый репозиторий. Нажмитеgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Процесс развертывания может занять до нескольких минут. После завершения процесса развертывания вы увидите следующий результат:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Скопируйте отображаемый URL-адрес службы Cloud Run в отдельную вкладку или окно браузера. Альтернативно, выполните следующую команду в терминале, чтобы распечатать URL-адрес службы, и щелкните показанный URL-адрес, удерживая клавишу Ctrl , чтобы открыть URL-адрес:
При открытии URL-адреса вы можете получить ошибку 500 или увидеть сообщение:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Это означает, что сервисы не завершили свое развертывание. Подождите несколько минут и обновите страницу. В конце вы увидите текст, начинающийся со слов «Забавные факты о собаках» и содержащий 10 забавных фактов о собаках.Sorry, this is just a placeholder...
Чтобы создать журналы приложений, откройте URL-адрес службы. Обновите страницу, изменив значение параметра ?animal=
чтобы получить другие результаты.
Чтобы просмотреть журналы приложений, выполните следующие действия:
- Нажмите кнопку ниже, чтобы открыть страницу обозревателя журналов в облачной консоли:
- Вставьте следующий фильтр в панель запросов (№ 2 в интерфейсе обозревателя журналов ):
LOG_ID("run.googleapis.com%2Fstdout") AND severity=DEBUG
- Нажмите Выполнить запрос .
В результате запроса отображаются журналы с подсказками и ответами Vertex AI, включая рейтинги безопасности .
9. Подсчитайте взаимодействия с Gen AI
Cloud Run записывает управляемые метрики , которые можно использовать для мониторинга развернутых сервисов. Метрики мониторинга, управляемые пользователем, обеспечивают больший контроль над данными и частотой обновления метрик. Для реализации такой метрики требуется написать код, который собирает данные и записывает их в Cloud Monitoring . См. следующий (необязательный) шаг, чтобы узнать, как реализовать его с помощью OpenTelemetry SDK.
На этом этапе показана альтернатива реализации пользовательской метрики в метриках на основе журнала кода. Метрики на основе журналов позволяют генерировать метрики мониторинга на основе записей журнала, которые ваше приложение записывает в Cloud Logging. Мы будем использовать журналы приложений, которые мы реализовали на предыдущем шаге, чтобы определить основанную на журналах метрику типа counter . Метрика будет подсчитывать количество успешных вызовов Vertex API.
- Посмотрите на окно проводника журналов , которое мы использовали на предыдущем шаге. На панели «Запросы» найдите раскрывающееся меню «Действия» и щелкните его, чтобы открыть. См. скриншот ниже, чтобы найти меню:
- В открывшемся меню выберите Создать метрику , чтобы открыть панель Создать метрику на основе журнала .
- Выполните следующие действия, чтобы настроить новую метрику счетчика на панели «Создать метрику на основе журнала» .
- Установите тип метрики : выберите «Счетчик» .
- В разделе «Подробности» установите следующие поля:
- Имя метрики журнала : задайте имя
model_interaction_count
. Применяются некоторые ограничения на именование; Подробности см. в разделе «Ограничения на именование». Устранение неполадок. - Описание : введите описание метрики. Например,
Number of log entries capturing successful call to model inference.
- Единицы измерения : оставьте это поле пустым или вставьте цифру
1
.
- Имя метрики журнала : задайте имя
- Оставьте значения в разделе Выбор фильтра . Обратите внимание, что в поле «Фильтр сборки» используется тот же фильтр, который мы использовали для просмотра журналов приложений.
- (Необязательно) Добавьте метку, которая поможет подсчитать количество звонков для каждого животного. ПРИМЕЧАНИЕ. Эта метка может значительно увеличить мощность метрики, поэтому ее не рекомендуется использовать в рабочей среде:
- Нажмите Добавить метку .
- В разделе «Метки» задайте следующие поля:
- Имя метки : установите имя
animal
. - Описание : введите описание метки. Например,
Animal parameter
. - Тип метки : выберите
STRING
. - Имя поля : Введите
jsonPayload.animal
. - Регулярное выражение : оставьте его пустым.
- Имя метки : установите имя
- Нажмите Готово
- Нажмите Создать метрику , чтобы создать метрику.
Вы также можете создать метрику на основе журнала на странице показателей на основе журнала , используя команду gcloud logging metrics create
CLI или ресурс google_logging_metric
Terraform .
Чтобы сгенерировать данные метрик, откройте URL-адрес службы. Обновите открытую страницу несколько раз, чтобы выполнить несколько вызовов модели. Как и раньше, попробуйте использовать в качестве параметра разных животных.
Введите запрос PromQL для поиска данных метрик на основе журналов. Чтобы ввести запрос PromQL, выполните следующие действия:
- Нажмите кнопку ниже, чтобы открыть страницу обозревателя метрик в облачной консоли:
- На панели инструментов панели построителя запросов выберите кнопку с именем < > MQL или < > PromQL . Расположение кнопки показано на рисунке ниже.
- Убедитесь, что PromQL выбран в переключателе языка . Переключатель языка находится на той же панели инструментов, которая позволяет форматировать запрос.
- Введите запрос в редактор запросов :
Дополнительные сведения об использовании PromQL см. в разделе PromQL в Cloud Monitoring .sum(rate(logging_googleapis_com:user_model_interaction_count{monitored_resource="cloud_run_revision"}[${__interval}]))
- Нажмите «Выполнить запрос» . Вы увидите линейный график, похожий на этот скриншот:
Обратите внимание: когда включен переключатель «Автозапуск» , кнопка «Выполнить запрос» не отображается.
10. (Необязательно) Используйте открытую телеметрию для мониторинга и отслеживания.
Как упоминалось на предыдущем шаге, метрики можно реализовать с помощью OpenTelemetry (Otel) SDK. Использование OTel в микросервисных архитектурах является рекомендуемой практикой. Этот шаг описывает следующее:
- Инициализация компонентов OTel для поддержки отслеживания и мониторинга приложения.
- Заполнение конфигурации OTel метаданными ресурсов среды Cloud Run
- Инструментирование приложения колбы с возможностью автоматического отслеживания
- Внедрение счетчика-метрики для отслеживания количества успешных вызовов модели.
- Сопоставление трассировки с журналами приложений
Рекомендуемая архитектура для служб уровня продукта — использовать сборщик OTel для сбора и приема всех данных наблюдения для одной или нескольких служб. Для простоты код на этом этапе не использует сборщик. Вместо этого он использует экспорт OTel, который записывает данные непосредственно в Google Cloud.
Настройка компонентов OTel для отслеживания и мониторинга показателей
- Вернитесь в окно (или вкладку) Cloud Shell в браузере.
- В терминале обновите файл
requirements.txt
, добавив дополнительный список зависимостей:cat >> ~/codelab-o11y/requirements.txt << EOF opentelemetry-api==1.24.0 opentelemetry-sdk==1.24.0 opentelemetry-exporter-otlp-proto-http==1.24.0 opentelemetry-instrumentation-flask==0.45b0 opentelemetry-instrumentation-requests==0.45b0 opentelemetry-exporter-gcp-trace==1.7.0 opentelemetry-exporter-gcp-monitoring==1.7.0a0 EOF
- Создайте новый файл
setup_opentelemetry.py
: Пустой файл должен появиться в окне редактора над терминалом.cloudshell edit ~/codelab-o11y/setup_opentelemetry.py
- Скопируйте следующий код и вставьте его в открывшийся файл
setup_opentelemetry.py
: Через несколько секунд редактор Cloud Shell автоматически сохранит ваш код.import os from opentelemetry import metrics from opentelemetry import trace from opentelemetry.exporter.cloud_monitoring import CloudMonitoringMetricsExporter from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter from opentelemetry.resourcedetector.gcp_resource_detector import GoogleCloudResourceDetector from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.resources import get_aggregated_resources, Resource, CLOUD_ACCOUNT_ID, SERVICE_NAME from opentelemetry.sdk.trace.export import BatchSpanProcessor resource = get_aggregated_resources( [GoogleCloudResourceDetector(raise_on_error=True)] ) resource = resource.merge(Resource.create(attributes={ SERVICE_NAME: os.getenv("K_SERVICE"), })) meter_provider = MeterProvider( resource=resource, metric_readers=[ PeriodicExportingMetricReader( CloudMonitoringMetricsExporter(), export_interval_millis=5000 ) ], ) metrics.set_meter_provider(meter_provider) meter = metrics.get_meter(__name__) trace_provider = TracerProvider(resource=resource) processor = BatchSpanProcessor(CloudTraceSpanExporter( # send all resource attributes resource_regex=r".*" )) trace_provider.add_span_processor(processor) trace.set_tracer_provider(trace_provider) def google_trace_id_format(trace_id: int) -> str: project_id = resource.attributes[CLOUD_ACCOUNT_ID] return f'projects/{project_id}/traces/{trace.format_trace_id(trace_id)}'
Код приложения прибора с возможностями отслеживания и мониторинга с использованием OTel
- В терминале снова откройте
main.py
:cloudshell edit ~/codelab-o11y/main.py
- Внесите следующие изменения в код приложения:
- Перед строкой
import os
(строка 1) вставьте следующий код (обратите внимание на пустую строку в конце):from setup_opentelemetry import google_trace_id_format from opentelemetry import metrics, trace from opentelemetry.instrumentation.requests import RequestsInstrumentor from opentelemetry.instrumentation.flask import FlaskInstrumentor
- После объявления метода
format()
(строка 9) вставьте следующий код (имейте в виду отступы):span = trace.get_current_span()
- После строки 13 (содержащей
"message": record.getMessage()
) вставьте следующий код (имейте в виду отступ): Эти два дополнительных атрибута помогают сопоставлять журналы приложений и диапазоны трассировки OTel."logging.googleapis.com/trace": google_trace_id_format(span.get_span_context().trace_id), "logging.googleapis.com/spanId": trace.format_span_id(span.get_span_context().span_id),
- После строки
app = Flask(__name__)
(строка 31) вставьте следующий код: Эти линии обрабатывают все входящие и исходящие запросы нашего приложения flask с помощью трассировки.FlaskInstrumentor().instrument_app(app) RequestsInstrumentor().instrument()
- Сразу после нового добавленного кода (после строки 33) добавьте следующий код:
Эти строки создают новую метрику типа counter с именемmeter = metrics.get_meter(__name__) requests_counter = meter.create_counter( name="model_call_counter", description="number of model invocations", unit="1" )
model_call_counter
и регистрируют ее для экспорта. - После вызова
logger.debug()
(строка 49) вставьте следующий код: Это изменение будет увеличивать счетчик на 1 каждый раз, когда приложение успешно вызывает API Vertex для взаимодействия с моделью Gemini.requests_counter.add(1, {'animal': animal})
- Перед строкой
Разверните код приложения Gen AI в Cloud Run.
- В окне терминала выполните команду для развертывания исходного кода приложения в Cloud Run.
Если вы увидите приглашение, подобное приведенному ниже, информирующее вас о том, что команда создаст новый репозиторий. Нажмитеgcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Процесс развертывания может занять до нескольких минут. После завершения процесса развертывания вы увидите следующий результат:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Скопируйте отображаемый URL-адрес службы Cloud Run в отдельную вкладку или окно браузера. Альтернативно, выполните следующую команду в терминале, чтобы распечатать URL-адрес службы, и щелкните показанный URL-адрес, удерживая клавишу Ctrl , чтобы открыть URL-адрес:
При открытии URL-адреса вы можете получить ошибку 500 или увидеть сообщение:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Это означает, что сервисы не завершили свое развертывание. Подождите несколько минут и обновите страницу. В конце вы увидите текст, начинающийся со слов «Забавные факты о собаках» и содержащий 10 забавных фактов о собаках.Sorry, this is just a placeholder...
Чтобы создать данные телеметрии, откройте URL-адрес службы. Обновите страницу, изменив значение параметра ?animal=
чтобы получить другие результаты.
Изучите следы приложений
- Нажмите кнопку ниже, чтобы открыть страницу обозревателя трассировки в облачной консоли:
- Выберите одну из самых последних трассировок. Вы должны увидеть 5 или 6 пролетов, как показано на скриншоте ниже.
- Найдите диапазон, который отслеживает вызов обработчика событий (метод
fun_facts
). Это будет последний диапазон с именем/
. - В области сведений о трассировке выберите Журналы и события . Вы увидите журналы приложений, соответствующие этому конкретному диапазону. Корреляция обнаруживается с помощью идентификаторов трассировки и диапазона в трассировке и журнале. Вы должны увидеть журнал приложения, в котором записано приглашение и ответ Vertex API.
Изучите метрику счетчика
- Нажмите кнопку ниже, чтобы открыть страницу обозревателя метрик в облачной консоли:
- На панели инструментов панели построителя запросов выберите кнопку с именем < > MQL или < > PromQL . Расположение кнопки показано на рисунке ниже.
- Убедитесь, что PromQL выбран в переключателе языка . Переключатель языка находится на той же панели инструментов, которая позволяет форматировать запрос.
- Введите запрос в редактор запросов :
sum(rate(workload_googleapis_com:model_call_counter{monitored_resource="generic_task"}[${__interval}]))
- Нажмите «Выполнить запрос» . Если включен переключатель «Автозапуск» , кнопка «Выполнить запрос» не отображается.
11. (Необязательно) Скрытая конфиденциальная информация из журналов.
На шаге 10 мы записали информацию о взаимодействии приложения с моделью Gemini. Эта информация включала название животного, фактическую подсказку и ответ модели. Хотя хранение этой информации в журнале должно быть безопасным, во многих других сценариях это не обязательно. Приглашение может содержать некоторую личную или иную конфиденциальную информацию, которую пользователь не хочет хранить. Чтобы решить эту проблему, вы можете запутать конфиденциальные данные, записываемые в Cloud Logging. Чтобы свести к минимуму изменения кода, рекомендуется следующее решение.
- Создайте тему PubSub для хранения входящих записей журнала.
- Создайте приемник журналов , который перенаправляет загруженные журналы в тему PubSub.
- Создайте конвейер потока данных , который изменяет журналы, перенаправленные в тему PubSub, выполнив следующие действия:
- Прочитайте запись журнала из темы PubSub.
- Проверьте полезную нагрузку записи на наличие конфиденциальной информации с помощью API проверки DLP.
- Отредактируйте конфиденциальную информацию в полезных данных, используя один из методов редактирования DLP.
- Запишите запутанную запись журнала в Cloud Logging.
- Развертывание конвейера
12. (Необязательно) Очистка
Чтобы избежать риска взимания платы за ресурсы и API, используемые в лаборатории кода, рекомендуется выполнить очистку после завершения лабораторной работы. Самый простой способ избавиться от выставления счетов — удалить проект, созданный для лаборатории кода.
- Чтобы удалить проект, выполните команду удаления проекта в терминале:
При удалении проекта Cloud прекращается выставление счетов за все ресурсы и API, используемые в этом проекте. Вы должны увидеть это сообщение, гдеPROJECT_ID=$(gcloud config get-value project) gcloud projects delete ${PROJECT_ID} --quiet
PROJECT_ID
будет идентификатором вашего проекта:Deleted [https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID]. You can undo this operation for a limited period by running the command below. $ gcloud projects undelete PROJECT_ID See https://cloud.google.com/resource-manager/docs/creating-managing-projects for information on shutting down projects.
- (Необязательно) Если вы получили сообщение об ошибке, перейдите к шагу 5, чтобы найти идентификатор проекта, который вы использовали во время лабораторной работы. Замените ее на команду в первой инструкции. Например, если идентификатор вашего проекта —
lab-example-project
, команда будет такой:gcloud projects delete lab-project-id-example --quiet
13. Поздравления
В ходе этой лабораторной работы вы создали приложение Gen AI, которое использует модель Gemini для прогнозирования. И оснастили приложение необходимыми возможностями мониторинга и ведения журналов. Вы развернули приложение и внесли изменения из исходного кода в Cloud Run . Затем вы используете продукты Google Cloud Observability для отслеживания производительности приложения и можете быть уверены в его надежности.
Если вы заинтересованы в участии в исследовании пользовательского опыта (UX) для улучшения продуктов, с которыми вы работали сегодня, зарегистрируйтесь здесь .
Вот несколько вариантов продолжения обучения:
- Codelab Как развернуть чат-приложение на базе Gemini в Cloud Run
- Codelab Как использовать вызов функций Gemini с Cloud Run
- Как использовать Cloud Run Jobs Video Intelligence API для поэтапной обработки видео
- Семинар по запросу Google Kubernetes Engine Onboard
- Узнайте больше о настройке счетчиков и показателей распределения с помощью журналов приложений.
- Напишите OTLP-метрики с помощью дополнительного модуля OpenTelemetry.
- Ссылка на использование открытой телеметрии в Google Cloud