Gemini 로그 보기

이 문서에서는 다음을 포함하여 Google Cloud 를 위한 Gemini 활동 수집 및 저장을 사용 설정하는 방법을 설명합니다.

  • 사용자 입력, 문맥 정보, 응답과 같은 Google Cloud 를 위한 Gemini 프롬프트 및 응답 로그
  • 원격 분석 메타데이터, 사용자가 수락한 코드 줄과 같은 Google Cloud 를 위한 Gemini 메타데이터 로그

Google Cloud 를 위한 Gemini는 사용자가 Google Cloud를 위한 Gemini와 상호작용한 다른 모든 정보(서면 의견 포함)를 수집하거나 Cloud Logging으로 전송하지 않습니다. 수집된 데이터는 Cloud Logging에 전송되어 저장됩니다. 리소스 유형이 cloudaicompanion.googleapis.com/Instance인 로그 항목을 검색하여 이 데이터를 검토할 수 있습니다.

이 기능은 Vertex AI의 Gemini 내에서 프롬프트나 응답을 로깅하지 않습니다. Vertex AI의 Gemini에 로그를 사용 설정하려면 데이터 액세스 감사 로그 사용 설정을 참조하세요.

Identity and Access Management(IAM) 역할은 주 구성원이 로그에 액세스하는 기능을 제어합니다. 사전 정의된 역할을 주 구성원에게 부여하거나 커스텀 역할을 만들 수 있습니다. 필요한 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

기본적으로 Cloud Logging은 저장된 미사용 고객 콘텐츠를 암호화합니다. Logging에서 로그 버킷에 저장한 데이터는 봉투 암호화라고 하는 프로세스인 키 암호화 키를 통해 암호화됩니다. 로깅 데이터에 액세스하려면 사용자의 작업 없이 Google에서 대신 관리하는 이러한 키 암호화 키에 액세스해야 합니다.

조직에는 Google의 기본 저장 데이터 암호화가 제공하지 않는 규제 요건, 규정 준수 관련 요건, 고급 암호화 요건이 있을 수 있습니다. 조직 요구사항을 충족하기 위해 데이터를 보호하는 암호화 키를 Google에서 관리하는 대신 사용자 키를 직접 관리할 수 있습니다.

장점 및 제한사항을 포함하여 고객 관리 암호화 키(CMEK) 사용에 대한 자세한 내용은 고객 관리 암호화 키를 참조하세요.

제한사항

Google Cloud의 Gemini에서 기록한 로그 데이터에는 IDE 내에서 Gemini Code Assist와의 사용자 상호작용이 포함됩니다.

또한 사용자가 VS Code 원격 분석을 사용 중지한 경우 Google Cloud 용 Gemini는 Gemini Code Assist의 데이터를 로깅하지 않습니다.

시작하기 전에

Google Cloud 를 위한 Gemini 로깅 사용 설정

Google Cloud 를 위한 Gemini 로깅, Google Cloud 를 위한 Gemini 메타데이터 로깅 또는 둘 다를 사용 설정하려는 프로젝트 ID로 Google Cloud 지원팀 또는 Google Cloud 담당자에게 문의하세요.

Google Cloud 를 위한 Gemini 사용자 로그 및 메타데이터 로그 보기

Google Cloud 를 위한 Gemini 로그와 메타데이터 로그를 보려면 다음 중 하나를 수행합니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Logging인 결과를 선택합니다.

  2. 툴바에서 Google Cloud 콘솔 프로젝트를 선택합니다.
  3. 툴바에서 모든 리소스 메뉴를 펼치고 Cloud AI 컴패니언 인스턴스 리소스를 선택합니다.

Google Cloud CLI

다음 명령어를 실행합니다.

gcloud logging read "resource.type=cloudaicompanion.googleapis.com/Instance" --project PROJECT_ID  --limit 3

Google Cloud 를 위한 Gemini 로그

LogEntry는 Cloud Logging의 기본 데이터 단위입니다. 다음 섹션에는 Google Cloud 를 위한 Gemini 플랫폼 이벤트의 LogEntry에 있는 필드 목록(예: 사용자 요청, Google Cloud 를 위한 Gemini 응답)이 나와 있습니다.

사용자 요청

다음 표에서는 사용자 요청 로그 항목에 있는 필드 목록을 보여줍니다.

필드 값 및 참고
LogEntry.resource.type Google Cloud 를 위한 Gemini 리소스 유형: cloudaicompanion.googleapis.com/Instance
LogEntry.resource.labels.resource_container Google Cloud 를 위한 Gemini가 사용된 리소스 컨테이너의 고유 ID입니다.
LogEntry.resource.labels.location Google Cloud 를 위한 Gemini가 사용된 위치입니다.
LogEntry.resource.labels.instance_id Google Cloud 를 위한 Gemini가 사용된 리소스의 고유 ID입니다.
LogEntry.labels.method logEntry를 호출한 항목에 따라 다음 중 하나일 수 있습니다.

CompleteTask: 예를 들어 Gemini Code Assist 또는 다른 Google Cloud 를 위한 Gemini 서비스의 채팅 요청입니다.

GenerateCode: 예를 들어 Gemini Code Assist 내 코드 변환 요청과 같이 코드를 생성해 달라는 요청입니다.

CompleteCode: 예를 들어 Gemini Code Assist 내 인라인 추천과 같이 IDE에서 작업할 때 코드를 완성해 달라는 요청입니다.
LogEntry.labels.product Google Cloud 를 위한 Gemini 서비스 이름입니다. Google Cloud 를 위한 Gemini 제품이 Gemini Code Assist이면 이 값은 code_assist입니다. Google Cloud 를 위한 Gemini 제품이 Gemini Cloud Assist이면 이 값은 cloud_assist입니다. 그 외의 경우 이 값은 unknown입니다.
LogEntry.labels.request_id 요청을 응답 로그 항목과 연결하는 고유 식별자입니다.
LogEntry.labels.user_id 이 요청을 시작한 사용자의 식별자입니다.
LogEntry.jsonPayload 로그 항목 페이로드입니다.
LogEntry.logName 로그를 식별합니다.

다음 샘플에서는 채팅 프롬프트 이벤트의 로그 항목 예시를 보여줍니다.

{
  "insertId": "654581e30003b19e340bbd96",
  "resource": {
    "type": "cloudaicompanion.googleapis.com/Instance",
    "labels": {
        instance_id: "default"
        location: "global"
        resource_container: "my-project-id"
     }
  },
  "timestamp": "2023-11-03T23:27:31.242078Z",
  "labels": {
    "product": "code_assist",
    "request_id": "4ea1e265-ea5d-4d11-b3c8-39bad9c96326"
    "user_id": "my-user@example.com"
  },
  "jsonPayload" : {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.RequestLog"
    "taskCompletionRequest":
      input: {
        messages: [{
          author: "USER"
          content: "What are some best practices to save cost on my Google Cloud bill?"
        }]
        preamble: ""
      }
  }
  "logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Frequest",
  "receiveTimestamp": "2023-11-03T23:27:31.255648319Z"
  "severity": "INFO"
}

다음 샘플에서는 자동 인라인 코드 추천 프롬프트 및 코드 파일에서 Google Cloud 를 위한 Gemini 프롬프트RequestLog 항목 예시를 보여줍니다.

인라인 코드 추천의 프롬프트 데이터는 다음 예시와 같은 codeCompletionRequest 객체를 사용하고 수동으로 트리거된 생성은 codeGenerationRequest를 사용합니다.

{
  "insertId": "654581e30003b19e340bbd96",
  "resource": {
    "type": "cloudaicompanion.googleapis.com/Instance",
    "labels": {
        instance_id: "default"
        location: "global"
        resource_container: "my-project-id"
     }
  },
  "timestamp": "2023-11-03T23:27:31.242078Z",
  "labels": {
    "product": "code_assist",
    "request_id": "4ea1e265-ea5d-4d11-b3c8-39bad9c96326"
    "user_id": "my-user@example.com"
  },
  "jsonPayload" : {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.RequestLog"
    "codeCompletionRequest": {
      "input_data_context": {
        "additional_context": {
          "files": [
            {
              "language": "go",
              "path": "{/path/to/../current-file.go",
              "segments": [
                {
                  "content": "...Prefix Text..."
                },
                {
                  "content": "...Suffix Text..."
                }
              ],
              "state": ["EDITED"]
            },
            {
              "language": "go",
              "path": "/path/to/../recent-file.go",
              "segments": [
                {
                  "content": "...File Text..."
                }
              ],
              "state": ["RECENTLY_OPENED"]
            }
          ]
        }
      }
    }
  }
  "logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Frequest",
  "receiveTimestamp": "2023-11-03T23:27:31.255648319Z"
  "severity": "INFO"
}

Google Cloud 를 위한 Gemini 응답

다음 표에는 Google Cloud 를 위한 Gemini 응답 필드와 설명이 나와 있습니다.

필드 값 및 참고
LogEntry.resource.type Google Cloud 를 위한 Gemini 리소스 유형: cloudaicompanion.googleapis.com/Instance
LogEntry.resource.labels.resource_container Google Cloud 를 위한 Gemini가 사용된 리소스 컨테이너의 고유 ID입니다.
LogEntry.resource.labels.location Google Cloud 를 위한 Gemini가 사용된 위치입니다.
LogEntry.resource.labels.instance_id Google Cloud 를 위한 Gemini가 사용된 리소스의 고유 ID입니다.
LogEntry.labels.method logEntry를 호출한 항목에 따라 다음 중 하나일 수 있습니다.

CompleteTask: 예를 들어 Gemini Code Assist 또는 다른 Google Cloud 를 위한 Gemini 서비스의 채팅 요청입니다.

GenerateCode: 예를 들어 Gemini Code Assist 내 코드 변환 요청과 같이 코드를 생성해 달라는 요청입니다.

CompleteCode: 예를 들어 Gemini Code Assist 내 인라인 추천과 같이 IDE에서 작업할 때 코드를 완성해 달라는 요청입니다.
LogEntry.labels.product Google Cloud 를 위한 Gemini 서비스 이름입니다. Google Cloud 를 위한 Gemini 제품이 Gemini Code Assist이면 이 값은 code_assist입니다. Google Cloud 를 위한 Gemini 제품이 Gemini Cloud Assist이면 이 값은 cloud_assist입니다. 그 외의 경우 이 값은 unknown입니다.
LogEntry.labels.request_id 요청을 응답 로그 항목과 연결하는 고유 식별자입니다.
LogEntry.labels.user_id 이 요청을 시작한 사용자의 식별자입니다.
LogEntry.jsonPayload 로그 항목 페이로드입니다. 응답을 생성하는 데 사용된 모든 소스 인용은 이 객체에 attribution_context로 포함됩니다.
LogEntry.logName 로그를 식별합니다.

Google Cloud 를 위한 Gemini 메타데이터 로그

메타데이터 로그가 생성되려면 VS Code 확장 프로그램과 IntelliJ 확장 프로그램 모두에서 Gemini Code Assist 확장 프로그램 원격 분석 설정을 사용 설정해야 합니다. 또한 VS Code의 경우 전역 원격 분석 수집 설정도 사용 설정해야 합니다.

Google Cloud 를 위한 Gemini 메타데이터 로그는 Google Cloud 를 위한 Gemini 로그와 동일한 구조를 따르지만 다른 필드를 지정합니다. 다음 표에서는 사용자 요청 로그 항목에 있는 필드의 목록을 보여줍니다.

필드 값 및 참고
LogEntry.@type Google Cloud 를 위한 Gemini 메타데이터 리소스 유형: type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog
LogEntry.labels.method 메타데이터 로그의 경우 이 라벨 값은 Export.Metrics입니다.
LogEntry.labels.product Google Cloud 를 위한 Gemini 서비스 이름입니다. Google Cloud 를 위한 Gemini 제품이 Gemini Code Assist이면 이 값은 code_assist입니다. Google Cloud 를 위한 Gemini 제품이 Gemini Cloud Assist이면 이 값은 cloud_assist입니다. 그 외의 경우 이 값은 unknown입니다.
LogEntry.labels.user_id 이 요청을 시작한 사용자의 식별자입니다.
LogEntry.jsonPayload codeExposure 이벤트 또는 code.Acceptance 이벤트를 나타냅니다. codeExposure 이벤트는 사용자에게 코드 추천이 노출되었음을 나타냅니다. code.Acceptance 이벤트는 사용자가 타이프오버, 탭 또는 전체 수락과 같은 일부 수락 이벤트를 실행했음을 나타냅니다.
LogEntry.jsonPayload.clientName IDE 이름입니다(예: CloudCodeVscode).
LogEntry.jsonPayload.clientVersion IDE 버전 번호입니다.
LogEntry.jsonPayload.codeAcceptance VS Code 및 IntelliJ IDE의 경우에만 사용자가 타이프오버, 탭 또는 전체 수락과 같은 일부 수락 이벤트를 실행했음을 나타냅니다. 다음 필드도 포함됩니다.
  • linesCount: 사용자가 수락한 코드 줄 총개수입니다.
  • commentLinesCount: 사용자가 수락한 코드의 주석 줄 수입니다. 이 속성은 Gemini Code Assist에서 수락된 줄 중 주석 줄이 몇 개인지 확인할 수 있는 경우에만 표시됩니다.
  • originalRequestId: codeExposure 이벤트를 codeAcceptance 이벤트 0개 이상에 연결하는 식별자입니다. 이를 사용하여 수락률수락된 코드 수 측정항목을 계산할 수 있습니다.
  • programmingLanguage: 수락된 코드의 프로그래밍 언어입니다(예: python).
LogEntry.jsonPayload.codeExposure VS Code 및 IntelliJ IDE의 경우에만 사용자에게 코드 추천이 노출되었음을 나타냅니다. 다음 필드도 포함됩니다.
  • programmingLanguage: 노출의 프로그래밍 언어입니다(예: python).
  • originalRequestId: codeExposure 이벤트를 codeAcceptance 이벤트 0개 이상에 연결하는 식별자입니다. 이를 사용하여 수락률수락된 코드 수 측정항목을 계산할 수 있습니다.
LogEntry.jsonPayload.chatExposure 사용자에게 채팅 응답이 노출되었음을 나타냅니다. 다음 필드도 포함됩니다.
  • originalRequestId: chatExposure 이벤트를 codeAcceptance 또는 codeExposure 이벤트 0개 이상에 연결하는 식별자입니다. 이를 사용하여 수락률수락된 코드 수 측정항목을 계산할 수 있습니다.

다음 샘플에서는 codeExposure 로그 항목 예시를 보여줍니다.

{
  insertId: "whfrqgc1gj"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
    clientName: "CloudCodeVscode"
    clientVersion: "1.93.1"
    codeExposure: {
      originalRequestId: "cac019824a0b25ba"
      programmingLanguage: "python"
    }
  requestId: "0c5178fe-446f-4ab6-b996-520dec100cf8"
  }
  labels: {
    method: "Export.Metrics"
    product: "code_assist"
    user_id: "user@company.com"
  }
  logName: "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata"
  receiveTimestamp: "2025-02-03T23:34:35.662837985Z"
  resource: {
    labels: {
      instance_id: "default"
      location: "global"
      resource_container: "my-project-id"
    }
  type: "cloudaicompanion.googleapis.com/Instance"
  }
  severity: "INFO"
  timestamp: "2025-02-03T23:34:35.021564463Z"
}

다음 샘플에서는 codeAcceptance 로그 항목 예시를 보여줍니다.

{
  insertId: "whfrqgc1gk"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
    clientName: "CloudCodeVscode"
    clientVersion: "1.93.1"
    codeAcceptance: {
      linesCount: 2
      originalRequestId: "cac019824a0b25ba"
      programmingLanguage: "python"
    }
    requestId: "ddf11040-c315-452e-b7cd-928c3f97984e"
  }
  labels: {
    method: "Export.Metrics"
    product: "code_assist"
    user_id: "user@company.com"
  }
  logName: "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata"
  receiveTimestamp: "2025-02-03T23:34:37.632662272Z"
  resource: {
    labels: {
      instance_id: "default"
      location: "global"
      resource_container: "my-project-id"
    }
    type: "cloudaicompanion.googleapis.com/Instance"
  }
  severity: "INFO"
  timestamp: "2025-02-03T23:34:36.778692483Z"
} 

다음 샘플에서는 chatExposure 로그 항목 예시를 보여줍니다.

{
  insertId: "3diaj2c208"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
    clientName: "CloudCodeVscode"
    clientVersion: "1.93.1"
    chatExposure: {
      originalRequestId: "cac019824a0b25ba"
    }
  requestId: "0c5178fe-446f-4ab6-b996-520dec100cf8"
  }
  labels: {
    method: "Export.Metrics"
    product: "code_assist"
    user_id: "user@company.com"
  }
  logName: "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata"
  receiveTimestamp: "2025-02-03T23:34:35.662837985Z"
  resource: {
    labels: {
      instance_id: "default"
      location: "global"
      resource_container: "my-project-id"
    }
  type: "cloudaicompanion.googleapis.com/Instance"
  }
  severity: "INFO"
  timestamp: "2025-02-03T23:34:35.021564463Z"
}

코드 수락률 계산

Gemini Code Assist 메타데이터 로그를 사용하여 수락률을 계산하려면 codeAcceptance.originalRequestId가 있는 이벤트의 고유 ID 총개수를 찾아 codeExposure.originalRequestId가 있는 이벤트의 고유 ID 총개수로 나눕니다. 각 메타데이터 로그 이벤트 필드를 사용하여 프로그래밍 언어 및 사용자별로 이 계산을 미세 조정할 수 있습니다.

수락된 코드 줄 수 계산

수락된 코드 줄을 계산하려면 고유한 codeAcceptance.originalRequestIdcodeAcceptance.linesCount 최댓값을 찾습니다. 그런 다음 각 originalRequestId의 모든 최종 codeAcceptance 이벤트에 대한 linesCount 값을 추가하여 수락된 총 코드 줄 수를 계산합니다. 각 메타데이터 로그 이벤트 필드를 사용하여 프로그래밍 언어 및 사용자별로 이 계산을 미세 조정할 수 있습니다.

다음 단계