Ten dokument opisuje, jak skonfigurować logowanie Gemini Code Assist w wersji Standard i Enterprise w projekcie za pomocą konsoli Google Cloud lub interfejsu API.
Ograniczenia
Rejestrowanie danych logowania Gemini Standard i Enterprise w Google Cloud jest ograniczone do interakcji użytkownika z Gemini Code Assist w IDE.
Domyślnie logi Gemini w Google Cloud są zbierane w poszczególnych projektach. Instrukcje konfigurowania scentralizowanego projektu do zbierania logów z wielu projektów znajdziesz w artykule Konfigurowanie logowania w wielu projektach.
Gemini Code Assist w GitHubie nie obsługuje logowania za pomocą Cloud Logging.
Zanim zaczniesz
Sprawdź, czy Twój projekt w chmurze Google Cloud jest połączony z kontem rozliczeniowym.
Sprawdzanie uprawnień
Aby skonfigurować logowanie w Gemini Code Assist, musisz mieć określone uprawnienia IAM. Aby przestrzegać zasady jak najmniejszych uprawnień, przyznaj rolę niestandardową, która zawiera tylko niezbędne uprawnienia.
Poproś administratora o utworzenie roli niestandardowej, która obejmuje te uprawnienia:
serviceusage.services.enable– aby włączyć interfejsy API w projekcie.cloudaicompanion.loggingSettings.create– aby utworzyć ustawienia rejestrowania.cloudaicompanion.loggingSettings.get– aby wyświetlić ustawienia rejestrowania.cloudaicompanion.loggingSettings.list– aby wyświetlić ustawienia rejestrowania.cloudaicompanion.loggingSettings.update– aby zaktualizować ustawienia logowania.cloudaicompanion.loggingSettingBindings.create– aby powiązać ustawienia logowania z projektem.cloudaicompanion.loggingSettingBindings.get– aby wyświetlić powiązania ustawień rejestrowania.cloudaicompanion.loggingSettingBindings.list– aby wyświetlić listę powiązań ustawień rejestrowania.
Możesz też przyznać wstępnie zdefiniowane role Administrator ustawień Gemini w Google Cloud (roles/cloudaicompanion.settingsAdmin) i Administrator korzystania z usług (roles/serviceusage.serviceUsageAdmin). Role te obejmują jednak uprawnienia do konfigurowania wszystkich ustawień administratora Gemini w Google Cloud i zarządzania korzystaniem z usług, co może być więcej niż potrzeba do skonfigurowania ustawień logowania.
Konfigurowanie logowania Gemini Code Assist
W sekcjach poniżej znajdziesz instrukcje włączania zbierania i przechowywania w Cloud Logging danych o aktywności w Gemini Code Assist Standard i Enterprise, w tym:
Logi promptów i odpowiedzi Gemini Code Assist Standard i Enterprise, takie jak dane wejściowe użytkownika, informacje kontekstowe i odpowiedzi.
logi metadanych Gemini Code Assist Standard i Enterprise, takie jak metadane telemetryczne i wiersze kodu zaakceptowane przez użytkownika;
Więcej informacji o obu typach dzienników znajdziesz w artykule Wyświetlanie dzienników Gemini.
Włączanie logowania dla Gemini Code Assist w projekcie
Wybierz jedną z tych opcji:
Konsola
Sprawdź, czy w projekcie włączony jest interfejs API Cloud Logging.
W konsoli Google Cloud otwórz stronę Admin for Gemini.
Otworzy się strona Gemini w Google Cloud.
W menu nawigacyjnym po lewej stronie kliknij Ustawienia.
Wczytuje się strona Ustawienia.
(Opcjonalnie) Kliknij Logowanie metadanych Code Assist, aby rejestrować metadane wygenerowane przez użytkowników Gemini Code Assist w wersji Standard i Enterprise w projekcie.
(Opcjonalnie) Kliknij Logowanie promptów i odpowiedzi Code Assist, aby rejestrować prompty i odpowiedzi wygenerowane przez użytkowników Gemini Code Assist w wersji Standard i Enterprise w projekcie.
Kliknij Zapisz zmiany.
Interfejs API
Aby włączyć logowanie w przypadku Gemini Code Assist Standard i Enterprise, użyj zasobu loggingSettings, aby zdefiniować wybrane ustawienia logowania, a następnie użyj zasobu loggingSettings.settingBindings, aby powiązać ustawienia z projektem:
Sprawdź, czy w projekcie włączony jest interfejs Cloud Logging API.
Utwórz ustawienie i wartość związaną z tym ustawieniem:
Uzyskaj token:
TOKEN=$(gcloud auth print-access-token)
Włącz logi Gemini Code Assist Standard i Enterprise. Dzienniki użytkowników i dzienniki metadanych są włączone odpowiednio w polach
log_prompts_and_responsesilog_metadata. Jeśli nie chcesz włączyć któregoś z pól, wyklucz je z żądania.Aby utworzyć ustawienie, uruchom to polecenie:
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"Zastąp następujące elementy:
CONTAINER_PROJECT_NAME: wpisz identyfikator projektu, w którym przechowywany jest zasób powiązania. Jest to projekt nadrzędny powiązania.LOGS_SETTING_ID: Wpisz unikalną nazwę ustawienia, np.gcalm.
Jeśli polecenie się powiedzie, zwróci treść odpowiedzi, w której pola
log_prompts_and_responsesilog_metadatabędą miały wartość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 }Uruchom to polecenie, aby utworzyć powiązanie ustawień logów Gemini Code Assist w wersji Standard i 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"
Zastąp następujące elementy:
TARGET_PROJECT_NAME: wpisz projekt docelowy, z którym ma być powiązane powiązanie. Często jest to ten sam projekt co projekt kontenera. Możesz jednak powiązać ustawienie z kilkoma projektami, aby nie trzeba było duplikować zasobu ustawienia.LOGS_BINDING_ID: użyj tego samego identyfikatora LOGS_SETTING_ID, który został użyty podczas tworzenia ustawienia, ale dodaj do niegob1. Na przykład użyj elementugcalmb1.
Jeśli polecenie się powiedzie, zwróci metadane operacji w tym formacie:
{ "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 }
Wyłączanie logowania dla Gemini Code Assist w projekcie
Wybierz jedną z tych opcji:
Konsola
W konsoli Google Cloud otwórz stronę Admin for Gemini.
Otworzy się strona Gemini w Google Cloud.
W menu nawigacyjnym po lewej stronie kliknij Ustawienia.
Wczytuje się strona Ustawienia.
Kliknij Logowanie metadanych Code Assist, aby wyłączyć rejestrowanie metadanych z użycia Gemini Code Assist Standard i Enterprise w projekcie.
Kliknij Zapisz zmiany.
Interfejs API
Aby wyłączyć logowanie w przypadku Gemini Code Assist Standard i Enterprise, użyj metody loggingSetting.
Utwórz ustawienie i wartość związaną z tym ustawieniem:
Uzyskaj token:
TOKEN=$(gcloud auth print-access-token)
Aby wyłączyć ustawienia logów Gemini Code Assist Standard i Enterprise, uruchom to polecenie:
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"Zastąp następujące elementy:
CONTAINER_PROJECT_NAME: wpisz identyfikator projektu nadrzędnego.LOGS_SETTING_ID: wpisz nazwę istniejącego ustawienia, np.gcalm.Jeśli polecenie się powiedzie, zwróci treść odpowiedzi, w której pola
log_prompts_and_responsesilog_metadatabędą miały wartość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 }
Konfigurowanie logowania w wielu projektach
Możesz używać logów z Gemini Code Assist do tworzenia danych i paneli do monitorowania wykorzystania w poszczególnych projektach. Jeśli Twoja organizacja ma wiele projektów, możesz skonfigurować scentralizowany projekt logowania, aby zbierać logi z wielu projektów i generować panele w tych projektach.
Tworzenie projektu scentralizowanej analizy logów
Ten projekt będzie służyć jako centrum logów z innych projektów.
W konsoli Google Cloud otwórz stronę Tworzenie projektu.
W oknie Nowy projekt wpisz wartości w tych polach:
- Nazwa projektu: nazwa scentralizowanego projektu logowania.
- Konto rozliczeniowe: wybierz konto rozliczeniowe.
- Organizacja: wybierz swoją organizację. Scentralizowany projekt może zbierać logi tylko z projektów w tej samej organizacji.
- Lokalizacja: wybierz lokalizację.
Kliknij Utwórz.
Konfigurowanie ujść logów
Aby kierować logi do scentralizowanego projektu, skonfiguruj ujścia logów w każdym z projektów, z których chcesz zbierać logi.
Aby skonfigurować ujścia logów w każdym projekcie:
- W konsoli Google Cloud przejdź do projektu, z którego chcesz zbierać logi.
Otwórz stronę Router logów:
Kliknij Utwórz ujście.
W sekcji Szczegóły ujścia wpisz nazwę i opis ujścia, a następnie kliknij Dalej.
W sekcji Miejsce docelowe ujścia wykonaj te czynności:
- W menu Wybierz usługę ujścia wybierz Zasobnik Logging.
- W menu Zasobnik logów wybierz Użyj zasobnika logów w innym projekcie.
W polu Miejsce docelowe wpisz:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultZastąp
CENTRALIZED_PROJECT_IDidentyfikatorem projektu centralnego rejestrowania, który został utworzony.Kliknij Dalej.
W sekcji Wybierz logi do uwzględnienia w ujściu utwórz filtr uwzględniania, wpisując w polu Filtr uwzględniania ten tekst:
resource.type="cloudaicompanion.googleapis.com/Instance"Kliknij Dalej.
W sekcji Wybierz logi, które mają być odfiltrowywane z ujścia pozostaw filtr wykluczania pusty i kliknij Utwórz ujście.
Po utworzeniu ujścia na stronie Router logów znajdź utworzone ujście.
W kolumnie Tożsamość osoby piszącej skopiuj pełny adres e-mail konta usługi.
Konfigurowanie dostępu
Aby przyznać ujściu uprawnienia do zapisywania logów w scentralizowanym projekcie, wykonaj te czynności:
- W konsoli Google Cloud przełącz się na utworzony projekt centralny.
Otwórz stronę Uprawnienia
Kliknij Przyznaj dostęp.
W polu Nowe podmioty zabezpieczeń wklej adres e-mail konta usługi, który został skopiowany w poprzedniej sekcji.
Kliknij Dodaj kolejną rolę.
Wyszukaj i wybierz rolę Zapisujący w zasobniku logów (
roles/logging.bucketWriter).Kliknij Zapisz.
Tworzenie panelu w scentralizowanym projekcie
Po skonfigurowaniu centralnego projektu do odbierania logów możesz utworzyć panel, aby wyświetlać wskaźniki z wielu projektów:
W konsoli Google Cloud otwórz Monitorowanie > Panele:
Kliknij Utwórz panel.
Na pasku narzędzi kliknij Ustawienia, a następnie wybierz JSON > Edytor JSON.
Wklej w edytorze JSON ten kod:
{ "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" } } } } ] } }Zastąp następujące elementy:
CENTRALIZED_PROJECT_ID: identyfikator projektu logowania scentralizowanego, który został utworzony.SOURCE_PROJECT_ID_1iSOURCE_PROJECT_ID_2: identyfikatory projektów, z których chcesz zbierać logi. Jeśli chcesz zbierać logi z więcej niż 2 projektów, możesz dodać więcej identyfikatorów projektów do klauzulinw zapytaniu.
Wyłączanie logowania w wielu projektach
Jeśli logowanie w Gemini Code Assist zostało skonfigurowane w wielu projektach, możesz je wyłączyć, usuwając ujścia logów, które kierują logi do projektu centralnego. Aby przestać wysyłać logi z poszczególnych projektów do projektu centralnego, usuń utworzone w nich ujścia logów:
- W konsoli Google Cloud przejdź do projektu, z którego chcesz przestać zbierać logi.
Otwórz stronę Router logów:
Określ ujście, które przekierowuje logi do scentralizowanego projektu.
W wierszu tego miejsca docelowego kliknij Więcej działań, a następnie wybierz Usuń miejsce docelowe.
W oknie, które się pojawi, kliknij Usuń.
Powtórz te czynności w przypadku każdego projektu, z którego chcesz przestać wysyłać logi do projektu centralnego.