В этом документе описывается, как настроить стандартное и корпоративное логирование Gemini Code Assist для проекта с помощью консоли Google Cloud или API.
Ограничения
В Google Cloud Gemini Standard и Enterprise запись логов ограничена взаимодействием пользователя с Gemini Code Assist в среде разработки.
По умолчанию журналы Gemini для Google Cloud собираются для каждого проекта отдельно. Инструкции по настройке централизованного проекта для сбора журналов из нескольких проектов см. в разделе «Настройка ведения журналов для нескольких проектов» .
Gemini Code Assist на GitHub не поддерживает ведение журналов с помощью Cloud Logging.
Прежде чем начать
Убедитесь, что ваш проект Google Cloud привязан к платежному аккаунту.
Проверьте права доступа IAM.
Для настройки логирования Gemini Code Assist требуются определенные разрешения IAM. Следуя принципу минимальных привилегий, предоставьте пользовательскую роль , содержащую только необходимые разрешения.
Попросите администратора создать пользовательскую роль, включающую следующие разрешения:
-
serviceusage.services.enable— для включения API для вашего проекта. -
cloudaicompanion.loggingSettings.create— для создания настроек логирования. -
cloudaicompanion.loggingSettings.get— для просмотра настроек логирования. -
cloudaicompanion.loggingSettings.list— для отображения списка настроек логирования. -
cloudaicompanion.loggingSettings.update— для обновления настроек логирования. -
cloudaicompanion.loggingSettingBindings.create— для привязки параметров логирования к проекту. -
cloudaicompanion.loggingSettingBindings.get— для просмотра привязок параметров логирования. -
cloudaicompanion.loggingSettingBindings.list— для отображения списка привязок параметров логирования.
В качестве альтернативы вы можете предоставить предопределенные роли администратора настроек Gemini for Google Cloud ( roles/cloudaicompanion.settingsAdmin ) и администратора использования сервисов ( roles/serviceusage.serviceUsageAdmin ). Однако эти роли включают разрешения на настройку всех параметров администратора Gemini for Google Cloud и управление использованием сервисов, что может быть избыточным для настройки параметров ведения журналов.
Настройка логирования Gemini Code Assist
В следующих разделах описаны шаги, необходимые для включения сбора и хранения данных об активности в системах Gemini Code Assist Standard и Enterprise в Cloud Logging, включая:
Журналы подсказок и ответов Gemini Code Assist Standard и Enterprise, содержащие информацию о вводимых пользователем данных, контекстную информацию и ответы.
Журналы метаданных Gemini Code Assist Standard и Enterprise, такие как метаданные телеметрии и строки кода, принятые пользователем.
Для получения более подробной информации об обоих типах журналов см. раздел «Просмотр журналов Gemini» .
Включите ведение журнала для Gemini Code Assist в проекте.
Выберите один из следующих вариантов:
Консоль
Убедитесь, что API облачного логирования включен в проекте.
В консоли Google Cloud перейдите на страницу «Администрирование Gemini» .
Перейдите на Gemini для Google Cloud.
Страница Gemini for Google Cloud загружается.
В левом навигационном меню нажмите «Настройки» .
Страница настроек загружается.
(Необязательно) Нажмите «Ведение журнала для метаданных Code Assist» , чтобы записать метаданные, созданные пользователями Gemini Code Assist Standard и Enterprise в проекте.
(Необязательно) Нажмите «Запись в журнал подсказок и ответов Code Assist» , чтобы регистрировать подсказки и ответы, генерируемые пользователями Gemini Code Assist Standard и Enterprise в проекте.
Нажмите «Сохранить изменения» .
API
Чтобы включить логирование для Gemini Code Assist Standard и Enterprise, используйте ресурс loggingSettings для определения необходимых параметров логирования, а ресурс loggingSettings.settingBindings — для привязки этих параметров к проекту:
Убедитесь, что API облачного логирования включен в проекте.
Создайте параметр и значение, специфичное для этого параметра:
Получите токен:
TOKEN=$(gcloud auth print-access-token)
Включите журналы Gemini Code Assist Standard и Enterprise. Журналы пользователей и журналы метаданных включаются с помощью полей
log_prompts_and_responsesиlog_metadataсоответственно. Если вы не хотите включать какое-либо из полей, исключите его из запроса.Для создания параметра выполните следующую команду:
curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "log_prompts_and_responses": true, "log_metadata": true, } ' \ "https://cloudaicompanion.googleapis.com/v1/projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings?logging_setting_id=LOGS_SETTING_ID"Замените следующее:
-
CONTAINER_PROJECT_NAME: Введите идентификатор проекта, в котором хранится ресурс привязки. Это родительский проект для привязки. -
LOGS_SETTING_ID: Введите уникальное имя параметра, например,gcalm.
Если команда выполнена успешно, она возвращает тело ответа, в котором указано, что параметры
log_prompts_and_responsesиlog_metadataустановлены вtrue:{ "name": "projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings/LOGS_SETTING_ID", "createTime": "2025-01-23T15:22:49.717166932Z", "updateTime": "2025-01-23T15:22:49.717166932Z", "log_prompts_and_responses": true, "log_metadata": true }-
Выполните следующую команду, чтобы создать привязку параметров журналов Gemini Code Assist Standard и Enterprise:
curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "target": "projects/TARGET_PROJECT_NAME" }' \ "https://cloudaicompanion.googleapis.com/v1/projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings/LOGS_SETTING_ID/settingBindings?setting_binding_id=LOGS_BINDING_ID"
Замените следующее:
-
TARGET_PROJECT_NAME: Укажите целевой проект, к которому должна быть привязана привязка. Часто это тот же проект, что и проект-контейнер. Однако вы можете привязать параметр к нескольким проектам, чтобы избежать дублирования ресурса параметра. -
LOGS_BINDING_ID: Используйте тот же LOGS_SETTING_ID, что и при создании параметра, но добавьте к немуb1. Например, используйтеgcalmb1.
В случае успешного выполнения команды, она возвращает метаданные операции в следующем формате:
{ "name": "projects/<var>CONTAINER_PROJECT_NAME</var>/locations/global/operations/operation-1737646069712-62c6140bb04bb-49261230-43701daf", "metadata": { "@type": "type.googleapis.com/google.cloud.cloudaicompanion.v1.OperationMetadata", "createTime": "2025-01-23T15:27:50.076075570Z", "target": "projects/<var>TARGET_PROJECT_NAME</var>/locations/global/loggingSettings/<var>LOGS_SETTING_ID</var>/settingBindings/<var>LOGS_BINDING_ID</var>", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Отключить ведение журнала для Gemini Code Assist в проекте.
Выберите один из следующих вариантов:
Консоль
В консоли Google Cloud перейдите на страницу «Администрирование Gemini» .
Перейдите на Gemini для Google Cloud.
Страница Gemini for Google Cloud загружается.
В левом навигационном меню нажмите «Настройки» .
Страница настроек загружается.
Нажмите «Ведение журнала для метаданных Code Assist» , чтобы отключить запись метаданных об использовании Gemini Code Assist Standard и Enterprise в проекте.
Нажмите «Сохранить изменения» .
API
Чтобы отключить ведение журнала для Gemini Code Assist Standard и Enterprise, используйте метод loggingSetting .
Создайте параметр и значение, специфичное для этого параметра:
Получите токен:
TOKEN=$(gcloud auth print-access-token)
Выполните следующую команду, чтобы отключить параметры журналов Gemini Code Assist Standard и Enterprise:
curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "log_prompts_and_responses": false, "log_metadata": false, } ' \ "https://cloudaicompanion.googleapis.com/v1/projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings?logging_metadata_id=LOGS_SETTING_ID"Замените следующее:
-
CONTAINER_PROJECT_NAME: Введите идентификатор родительского проекта. LOGS_SETTING_ID: Введите существующее имя параметра, например,gcalm.Если команда выполнена успешно, она возвращает тело ответа, в котором указано, что параметры
log_prompts_and_responsesиlog_metadataустановлены вfalse:{ "name": "projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings/LOGS_SETTING_ID", "createTime": "2025-01-23T15:22:49.717166932Z", "updateTime": "2025-01-23T15:22:49.717166932Z", "log_prompts_and_responses": false, "log_metadata": false }
-
Настройте ведение журналов для нескольких проектов.
Вы можете использовать журналы Gemini Code Assist для создания метрик и панелей мониторинга использования по каждому проекту. Если в вашей организации несколько проектов, вы можете настроить централизованный проект ведения журналов для сбора журналов из нескольких проектов и создания панелей мониторинга по этим проектам.
Создайте централизованный проект логирования.
Этот проект послужит центром для хранения журналов из других ваших проектов.
В консоли Google Cloud перейдите на страницу создания проекта .
В окне «Новый проект» введите значения для следующих полей:
- Название проекта : название для вашего централизованного проекта регистрации событий.
- Платежный аккаунт : выберите платежный аккаунт.
- Организация : выберите свою организацию. Централизованный проект может собирать журналы только из проектов, входящих в ту же организацию.
- Местоположение : выберите местоположение.
Нажмите «Создать» .
Настройка приемников журналов
Чтобы направлять журналы в централизованный проект, настройте приемники журналов в каждом из отдельных проектов, из которых вы хотите собирать журналы.
Для настройки приемников логов для каждого проекта выполните следующие действия:
- В консоли Google Cloud переключитесь на проект, для которого вы хотите собирать журналы.
Перейдите на страницу Log Router :
Нажмите «Создать приемник» .
В разделе «Подробная информация о раковине» введите название и описание раковины, а затем нажмите «Далее» .
Для параметра «Целевой терминал» выполните следующие действия:
- В меню «Выбор службы приемника» выберите «Корзина для регистрации» .
- В меню «Корзина журналов» выберите «Использовать корзину журналов в другом проекте» .
В поле «Цель приемника» введите следующее:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultЗамените
CENTRALIZED_PROJECT_IDна идентификатор проекта централизованного логирования, который вы создали.Нажмите «Далее» .
Чтобы выбрать журналы для включения в приемник , создайте фильтр включения, введя следующее в поле «Фильтр включения» :
resource.type="cloudaicompanion.googleapis.com/Instance"Нажмите «Далее» .
В поле «Выберите журналы для фильтрации из приемника» оставьте поле фильтра исключений пустым и нажмите «Создать приемник» .
После создания приемника на странице Log Router найдите созданный вами приемник.
В столбце «Идентификатор автора» скопируйте полный адрес электронной почты учетной записи.
Настройка доступа
Чтобы предоставить вашему приемнику доступ на запись логов в централизованный проект, выполните следующие действия:
- В консоли Google Cloud переключитесь на созданный вами централизованный проект.
Перейдите на страницу IAM :
Нажмите «Предоставить доступ» .
В поле «Новые участники» вставьте адрес электронной почты учетной записи службы, который вы скопировали в предыдущем разделе.
Нажмите « Добавить еще одну роль» .
Найдите и выберите роль «Записывающий модуль для сегмента журналов» (
roles/logging.bucketWriter).Нажмите « Сохранить ».
Создайте панель мониторинга в централизованном проекте.
После настройки централизованного проекта для получения журналов вы можете создать панель мониторинга для просмотра метрик из нескольких проектов:
В консоли Google Cloud перейдите в раздел «Мониторинг» > «Панели мониторинга»:
Нажмите «Создать панель мониторинга» .
На панели инструментов нажмите «Настройки» , а затем выберите JSON > Редактор JSON .
В редакторе JSON вставьте следующий код:
{ "displayName": "Multi-Project Gemini Code Assist Overview from Metadata Logs", "dashboardFilters": [], "labels": {}, "mosaicLayout": { "columns": 48, "tiles": [ { "height": 16, "width": 24, "widget": { "title": "Active Users by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "event_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "event_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "DAU" } ], "plotType": "LINE", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(labels, '$.user_id')) as DAU, CAST(timestamp AS DATE) AS event_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(labels, '$.user_id') is not NULL\n AND (\n JSON_VALUE(json_payload, '$.chatExposure.originalRequestId') is not NULL\n OR JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\n OR JSON_VALUE(json_payload, '$.codeExposure.originalRequestId') is not NULL\n )\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\nevent_date\nORDER BY\nevent_date\n" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "xPos": 24, "height": 16, "width": 24, "widget": { "title": "Acceptance Rate by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "exposures_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "exposures_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "acceptance_rate" } ], "plotType": "LINE", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\nexposures_date,\nacceptances_count / exposures_count as acceptance_rate\nFROM\n(\nSELECT\nCOUNT (DISTINCT JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId')) as acceptances_count, CAST(timestamp AS DATE) AS acceptances_date\nFROM\n`CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\nJSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\nAND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\nAND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\nacceptances_date\n) as acceptances\nJOIN\n(\nSELECT\nCOUNT (DISTINCT JSON_VALUE(json_payload, '$.codeExposure.originalRequestId')) as exposures_count, CAST(timestamp AS DATE) AS exposures_date\nFROM\n`CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\nJSON_VALUE(json_payload, '$.codeExposure.originalRequestId') is not NULL\nAND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\nAND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\nexposures_date\n) as exposures\nON\nexposures.exposures_date = acceptances.acceptances_date\nORDER BY\nexposures_date ASC" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 16, "height": 16, "width": 24, "widget": { "title": "Code Suggestions by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "exposures_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "exposures_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "exposures_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(json_payload, '$.codeExposure.originalRequestId')) as exposures_count, CAST(timestamp AS DATE) AS exposures_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(json_payload, '$.codeExposure.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\n exposures_date\nORDER BY\n exposures_date" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 16, "xPos": 24, "height": 16, "width": 24, "widget": { "title": "Code Acceptances by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "acceptances_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "acceptances_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "acceptances_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId')) as acceptances_count, CAST(timestamp AS DATE) AS acceptances_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\n acceptances_date\nORDER BY\n acceptances_date\n" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 32, "height": 16, "width": 24, "widget": { "title": "Lines of Code Accepted by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "line_count_day", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "line_count_day", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "lines_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n SUM(lines) as lines_count,\n CAST(max_timestamp AS DATE) AS line_count_day\nFROM\n(\n SELECT\n JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') as request_id,\n MAX(CAST(JSON_VALUE(json_payload, '$.codeAcceptance.linesCount') AS INT)) as lines,\n MAX(timestamp) as max_timestamp\n FROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\n WHERE\n JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\n GROUP BY\n request_id\n )\nGROUP BY\n line_count_day\nORDER BY\n line_count_day" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 32, "xPos": 24, "height": 16, "width": 24, "widget": { "title": "Chat Exposures by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "chat_exposures_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "chat_exposures_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "chat_exposures_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(json_payload, '$.chatExposure.originalRequestId')) as chat_exposures_count, CAST(timestamp AS DATE) AS chat_exposures_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(json_payload, '$.chatExposure.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\n chat_exposures_date\nORDER BY\n chat_exposures_date" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } } ] } }Замените следующее:
-
CENTRALIZED_PROJECT_ID: Идентификатор проекта централизованного логирования, который вы создали. -
SOURCE_PROJECT_ID_1иSOURCE_PROJECT_ID_2: Идентификаторы проектов, из которых вы хотите собирать логи. Если вы хотите собирать логи из более чем двух проектов, вы можете добавить дополнительные идентификаторы проектовinусловия запроса.
-
Отключить ведение журнала по нескольким проектам
Если вы настроили ведение журналов Gemini Code Assist для нескольких проектов, вы можете отключить его, удалив приемники журналов, которые направляют журналы в централизованный проект. Чтобы прекратить отправку журналов из отдельного проекта в централизованный проект, удалите приемник журналов, созданный в этом проекте:
- В консоли Google Cloud переключитесь на проект, для которого вы хотите прекратить сбор логов.
Перейдите на страницу Log Router :
Определите устройство, через которое журналы перенаправляются в ваш централизованный проект.
В строке, соответствующей этому раковине, нажмите «Дополнительные действия» , а затем выберите «Удалить раковину» .
В появившемся диалоговом окне нажмите кнопку «Удалить» .
Повторите эти шаги для каждого проекта, для которого вы хотите прекратить отправку журналов в централизованный проект.