InfoGrab Docs

AI 사용량 추적

요약

GitLab은 고객에게 사용량 분석을 제공하기 위해 AI 사용량 데이터를 저장합니다. 사용량 레코드에는 다음과 같이 설명된 필수 및 선택적 필드가 있습니다: 이벤트는 Postgres의 ai_usage_events 테이블과 ClickHouse의 ai_usage_events 테이블(사용 가능하고 분석을 위해 활성화된 경우)에 저장됩니다.

GitLab은 고객에게 사용량 분석을 제공하기 위해 AI 사용량 데이터를 저장합니다. AI 사용량 추적은 개발자가 새로운 사용량 이벤트와 메트릭을 쉽게 추가할 수 있도록 일반화되었습니다.

사용량 이벤트 레코드 구조#

사용량 레코드에는 다음과 같이 설명된 필수 및 선택적 필드가 있습니다:

필드 설명
timestamp 이벤트가 발생한 시간(밀리초 단위).
user_id 이벤트를 트리거한 사용자.
event AiTracking 클래스에 선언된 이벤트 유형 ID.
namespace_id (선택 사항) 관련 네임스페이스에 대한 참조. 프로젝트 이벤트의 경우 프로젝트 네임스페이스 ID에 해당해야 합니다.
extras (선택 사항) 특정 이벤트 유형과 관련된 추가 메타데이터.

이벤트는 Postgres의 ai_usage_events 테이블과 ClickHouse의 ai_usage_events 테이블(사용 가능하고 분석을 위해 활성화된 경우)에 저장됩니다.

추적을 위한 새 이벤트 추가#

Note

예시를 따르는 것을 선호하는 경우 AI 추적 시스템에 새 이벤트를 추가하는 데 필요한 모든 단계가 포함된 MR 197139를 참조하세요.

새 이벤트를 추가하려면 먼저 InternalEvents 서브시스템에 해당 이벤트를 선언해야 합니다. 내부 이벤트 빠른 시작 가이드를 참조하세요. 이벤트를 정의한 후 AI 추적을 위해 등록해야 합니다:

  1. Gitlab::Tracking::AiTracking에 이벤트 이름과 고유 ID를 추가합니다:

    events(troubleshoot_job: 7)
    

    [!note] 이벤트 유형 ID는 고유해야 하며 데이터베이스에 저장됩니다. 기존 이벤트의 ID를 변경하는 경우 기존 데이터의 적절한 마이그레이션을 확인하세요.

    이벤트에 저장해야 할 추가 메타데이터가 있는 경우 변환과 함께 이벤트를 선언해야 합니다.

    events(troubleshoot_job: 7) do |context|
      { job_id: context['job'].id }
    end
    

    transformation 메서드로 추가 변환 블록을 선언할 수 있습니다.

    [!note] 변환 블록은 데이터베이스의 jsonb 컬럼에 직렬화되므로 직렬화 가능한 해시를 반환해야 합니다.

  2. 이벤트를 트리거하기 위해 코드베이스의 적절한 위치에서 새 이벤트로 InternalEvents.track_event를 호출합니다.

AI 사용량 추적에서 이벤트 제거#

Note

예시를 통해 안내받고 싶은 경우 AI 추적 시스템에서 이벤트를 제거하는 데 필요한 모든 단계가 포함된 MR 199111을 확인하세요.

AI 사용량 추적 시스템에서 이벤트를 제거하려면:

  1. AiTracking 정의에서 모든 변환 블록을 제거합니다.
  2. 이벤트 정의를 deprecated_events(troubleshoot_job: 7)로 변경하여 이전 데이터를 위한 ID와 이름을 예약합니다.
  3. bundle exec rake gitlab:graphql:compile_docs로 GraphQL 문서를 재생성합니다.

해당 ID의 데이터가 데이터베이스나 버퍼에 더 이상 존재하지 않는다고 확신하는 경우에만 AiTracking의 정의를 완전히 제거할 수 있습니다.

GraphQL 노출#

AI 추적을 위해 선언된 모든 이벤트는 AiUsageData.all GraphQL 필드에 자동으로 노출될 수 있습니다. 이 필드가 새 이벤트 유형을 지원하도록 하려면:

  1. ee/app/graphql/types/analytics/ai_usage/ai_usage_event_type_enum.rb의 유형 enum에 이벤트 유형을 추가합니다.
  2. bundle exec rake gitlab:graphql:compile_docs로 GraphQL 문서를 재생성합니다.

이벤트를 편집하거나 제거할 때 API에 대한 임의적인 breaking changes를 방지하기 위해 이 작업을 수동으로 수행해야 합니다. GraphQL에서 이벤트 유형을 완전히 제거하려면 GraphQL 필드 deprecated 프로세스를 따르세요.

외부 호출 노출#

AI 추적을 위해 선언된 모든 이벤트는 외부 이벤트 추적을 위해 자동으로 노출됩니다. 이는 Rails 앱 외부에서 이벤트를 추적할 때 유용합니다. 예를 들어 IDE 확장에서. 외부 이벤트는 additional_properties 필드에 해당 페이로드와 함께 /api/v4/usage_data/track_event 엔드포인트를 호출하여 추적할 수 있습니다. 예를 들어:

curl "https://gitlab.com/api/v4/usage_data/track_event" --request POST --header "Authorization: Bearer glpat-XXX" --header 'Content-Type: application/json' --data '{"event": "code_suggestion_accepted_in_ide", "additional_properties": {"language": "javascript", "suggestion_size": 9, "timestamp": "2025-07-02 12:55:11 UTC", "branch_name": "my-new-feature"}, "project_id": 4}'
Note

외부 이벤트가 additional_properties 해시에 임의의 데이터를 전달할 수 있으므로 이벤트 변환 블록에서 관련 속성을 허용 목록에 추가하는 것이 좋습니다.

AI 사용량 추적

원문 보기
요약

GitLab은 고객에게 사용량 분석을 제공하기 위해 AI 사용량 데이터를 저장합니다. 사용량 레코드에는 다음과 같이 설명된 필수 및 선택적 필드가 있습니다: 이벤트는 Postgres의 ai_usage_events 테이블과 ClickHouse의 ai_usage_events 테이블(사용 가능하고 분석을 위해 활성화된 경우)에 저장됩니다.

GitLab은 고객에게 사용량 분석을 제공하기 위해 AI 사용량 데이터를 저장합니다. AI 사용량 추적은 개발자가 새로운 사용량 이벤트와 메트릭을 쉽게 추가할 수 있도록 일반화되었습니다.

사용량 이벤트 레코드 구조#

사용량 레코드에는 다음과 같이 설명된 필수 및 선택적 필드가 있습니다:

필드 설명
timestamp 이벤트가 발생한 시간(밀리초 단위).
user_id 이벤트를 트리거한 사용자.
event AiTracking 클래스에 선언된 이벤트 유형 ID.
namespace_id (선택 사항) 관련 네임스페이스에 대한 참조. 프로젝트 이벤트의 경우 프로젝트 네임스페이스 ID에 해당해야 합니다.
extras (선택 사항) 특정 이벤트 유형과 관련된 추가 메타데이터.

이벤트는 Postgres의 ai_usage_events 테이블과 ClickHouse의 ai_usage_events 테이블(사용 가능하고 분석을 위해 활성화된 경우)에 저장됩니다.

추적을 위한 새 이벤트 추가#

Note

예시를 따르는 것을 선호하는 경우 AI 추적 시스템에 새 이벤트를 추가하는 데 필요한 모든 단계가 포함된 MR 197139를 참조하세요.

새 이벤트를 추가하려면 먼저 InternalEvents 서브시스템에 해당 이벤트를 선언해야 합니다. 내부 이벤트 빠른 시작 가이드를 참조하세요. 이벤트를 정의한 후 AI 추적을 위해 등록해야 합니다:

  1. Gitlab::Tracking::AiTracking에 이벤트 이름과 고유 ID를 추가합니다:

    events(troubleshoot_job: 7)
    

    [!note] 이벤트 유형 ID는 고유해야 하며 데이터베이스에 저장됩니다. 기존 이벤트의 ID를 변경하는 경우 기존 데이터의 적절한 마이그레이션을 확인하세요.

    이벤트에 저장해야 할 추가 메타데이터가 있는 경우 변환과 함께 이벤트를 선언해야 합니다.

    events(troubleshoot_job: 7) do |context|
      { job_id: context['job'].id }
    end
    

    transformation 메서드로 추가 변환 블록을 선언할 수 있습니다.

    [!note] 변환 블록은 데이터베이스의 jsonb 컬럼에 직렬화되므로 직렬화 가능한 해시를 반환해야 합니다.

  2. 이벤트를 트리거하기 위해 코드베이스의 적절한 위치에서 새 이벤트로 InternalEvents.track_event를 호출합니다.

AI 사용량 추적에서 이벤트 제거#

Note

예시를 통해 안내받고 싶은 경우 AI 추적 시스템에서 이벤트를 제거하는 데 필요한 모든 단계가 포함된 MR 199111을 확인하세요.

AI 사용량 추적 시스템에서 이벤트를 제거하려면:

  1. AiTracking 정의에서 모든 변환 블록을 제거합니다.
  2. 이벤트 정의를 deprecated_events(troubleshoot_job: 7)로 변경하여 이전 데이터를 위한 ID와 이름을 예약합니다.
  3. bundle exec rake gitlab:graphql:compile_docs로 GraphQL 문서를 재생성합니다.

해당 ID의 데이터가 데이터베이스나 버퍼에 더 이상 존재하지 않는다고 확신하는 경우에만 AiTracking의 정의를 완전히 제거할 수 있습니다.

GraphQL 노출#

AI 추적을 위해 선언된 모든 이벤트는 AiUsageData.all GraphQL 필드에 자동으로 노출될 수 있습니다. 이 필드가 새 이벤트 유형을 지원하도록 하려면:

  1. ee/app/graphql/types/analytics/ai_usage/ai_usage_event_type_enum.rb의 유형 enum에 이벤트 유형을 추가합니다.
  2. bundle exec rake gitlab:graphql:compile_docs로 GraphQL 문서를 재생성합니다.

이벤트를 편집하거나 제거할 때 API에 대한 임의적인 breaking changes를 방지하기 위해 이 작업을 수동으로 수행해야 합니다. GraphQL에서 이벤트 유형을 완전히 제거하려면 GraphQL 필드 deprecated 프로세스를 따르세요.

외부 호출 노출#

AI 추적을 위해 선언된 모든 이벤트는 외부 이벤트 추적을 위해 자동으로 노출됩니다. 이는 Rails 앱 외부에서 이벤트를 추적할 때 유용합니다. 예를 들어 IDE 확장에서. 외부 이벤트는 additional_properties 필드에 해당 페이로드와 함께 /api/v4/usage_data/track_event 엔드포인트를 호출하여 추적할 수 있습니다. 예를 들어:

curl "https://gitlab.com/api/v4/usage_data/track_event" --request POST --header "Authorization: Bearer glpat-XXX" --header 'Content-Type: application/json' --data '{"event": "code_suggestion_accepted_in_ide", "additional_properties": {"language": "javascript", "suggestion_size": 9, "timestamp": "2025-07-02 12:55:11 UTC", "branch_name": "my-new-feature"}, "project_id": 4}'
Note

외부 이벤트가 additional_properties 해시에 임의의 데이터를 전달할 수 있으므로 이벤트 변환 블록에서 관련 속성을 허용 목록에 추가하는 것이 좋습니다.