기존 추적을 내부 이벤트 추적으로 마이그레이션

GitLab Internal Events Tracking은 폐기된 Snowplow 및 Redis/RedisHLL 이벤트 추적 옵션 위에 통합된 API를 노출합니다.

이 페이지에서는 이전 방법 중 하나에서 내부 이벤트 추적을 사용하는 방법에 대해 설명합니다.

note
Snowplow, Redis/RedisHLL을 통한 이벤트 추적은 폐기되었지만 향후 삭제되지는 않을 것입니다. 내부 이벤트 추적으로 마이그레이션할 것을 권장하지만, 폐기된 방법은 기존 이벤트 및 메트릭에 대해 계속 작동할 것입니다.

기존 Snowplow 추적에서의 마이그레이션

이미 Snowplow에서 이벤트를 추적 중이라면 내부 이벤트 추적으로 전환하여 Self-Managed형 인스턴스에서 메트릭을 수집할 수도 있습니다.

내부 이벤트에서 트리거된 이벤트는 이전에 Snowplow를 직접 추적했을 때와 비교해 특별한 속성을 가지고 있습니다.

  1. category는 이벤트가 발생한 위치로 자동 설정됩니다. 프론트엔드 이벤트의 경우 페이지 이름이고, 백엔드 이벤트의 경우 클래스 이름입니다. 페이지 이름 또는 클래스 이름이 사용되지 않으면, "InternalEventTracking"의 기본값이 사용됩니다.

마이그레이션하기 전에 이 변경이 적합한지 확인하고 대시보드가 이에 맞게 변경되었는지 확인하세요.

백엔드

이미 Gitlab::Tracking.event를 사용하여 Snowplow 이벤트를 추적하고 내부 이벤트 추적으로 마이그레이션하려는 경우, 다음과 같이 시작할 수 있습니다.

include Gitlab::InternalEventsTracking

track_internal_event('ci_templates_unique', namespace: namespace, project: project, user: user, additional_properties: { label: label })

label, propertyvalue 속성은 additional_properties 해시 내부로 전송되어야 합니다. 원래 호출에 포함되지 않았다면 additional_properties 인수는 생략할 수 있습니다.

또한 추적하고자 하는 메트릭에 대한 정의를 생성해야 합니다.

메트릭 정의를 생성하기 위해 생성기를 사용할 수 있습니다.

ruby scripts/internal_events/cli.rb

생성기는 필요한 입력을 한 단계씩 안내합니다.

프론트엔드

Vue 컴포넌트에서 Tracking mixin을 사용 중이라면 InternalEvents mixin으로 바꿀 수 있습니다.

예를 들어 현재 Vue 컴포넌트가 다음과 같이 보인다면:

import Tracking from '~/tracking';
...
mixins: [Tracking.mixin()]
...
...
this.track('some_label', options)

내부 이벤트 추적으로 변환한 후에는 다음과 같이 보여야 합니다:

import { InternalEvents } from '~/tracking';
...
mixins: [InternalEvents.mixin()]
...
...
this.trackEvent('action', {}, 'category')

현재 category를 전달하고 유지해야 하는 경우, 이전 예제에서 처럼 trackEvent 메서드의 세 번째 인수로 전달할 수 있습니다. 그러나 새 이벤트에 대해 category 매개변수를 사용하는 것은 강하게 권장하지 않습니다. 이는 기본적으로 이벤트가 트리거된 위치에 대한 정보로 채워지기 때문입니다.

이 MR를 사용할 수 있습니다. 이 MR은 devops_adoption_app 컴포넌트를 내부 이벤트 추적을 사용하도록 마이그레이션합니다.

Snowplow 추적에서 label, value, 및 property를 사용 중이라면 이를 세 번째 인수로 받는 객체로 trackEvent 함수에 전달할 수 있습니다. 이는 선택 사항입니다.

Vue Mixin을 사용하는 경우:

   this.trackEvent('i_code_review_user_apply_suggestion', {
    label: 'push_event',
    property: 'golang',
    value: 20
   });

원시 JavaScript를 사용하는 경우:

   InternalEvents.trackEvent('i_code_review_user_apply_suggestion', {
    label: 'admin',
    property: 'system',
    value: 20
   });

컴포넌트에서 data-track-action을 사용 중이라면 내부 이벤트 추적으로 마이그레이션하려면 data-track-actiondata-event-tracking으로 변경해야 합니다. data-track-label, data-track-propertydata-track-value와 같은 추가 추적 속성이 있는 경우, 각각을 각각 data-event-label, data-event-property, data-event-value로 대체할 수 있습니다.

예를 들어 버튼이 다음과 같이 정의되어 있다면:

 <gl-button
  :href="diffFile.external_url"
  :title="externalUrlLabel"
  :aria-label="externalUrlLabel"
  target="_blank"
  data-track-action="click_toggle_external_button"
  data-track-label="diff_toggle_external_button"
  data-track-property="diff_toggle_external"
  icon="external-link"
/>

이를 내부 이벤트 추적으로 변환하면 다음과 같습니다:

 <gl-button
  :href="diffFile.external_url"
  :title="externalUrlLabel"
  :aria-label="externalUrlLabel"
  target="_blank"
  data-event-tracking="click_toggle_external_button"
  data-event-label="diff_toggle_external_button"
  data-event-property="diff_toggle_external"
  icon="external-link"

data-event-tracking 속성에 전달할 동작만 필요하다는 점에 유의하십시오. 이는 Snowplow 및 RedisHLL 모두에 전달될 것입니다.

RedisHLL 추적에서의 마이그레이션

백엔드

현재 RedisHLL에서 메트릭을 추적 중이라면 다음과 같이 하십시오:

  Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)

내부 이벤트 추적을 사용하려면 다음 단계를 따르세요:

  1. git_write_action을 설명하는 이벤트 정의를 생성합니다 (가이드).
  2. 20210216182041_action_monthly_active_users_git_write.yml20210216184045_git_write_action_weekly.yml 같은 이벤트 섹션에 git_write_action을 나열하는 메트릭 정의를 찾습니다.
  3. 메트릭 정의 파일에서 data_sourceredis_hll에서 internal_events로 변경합니다.
  4. instrumentation_class 속성을 제거합니다. 내부 이벤트 메트릭에 사용되지 않습니다.
  5. 메트릭 정의 파일의 양식에 events 섹션을 추가합니다.

     events:
       - name: git_write_action
         unique: user.id
    

    고유한 사용자가 아닌 다른 것을 계산 중인 경우 project.id 또는 namespace.id를 사용합니다.

  6. 메트릭 정의 파일에서 options 섹션을 제거합니다.
  7. HLLRedisCounter.track_event 대신 Gitlab::InternalEventsTracking 모듈을 포함하고 track_internal_event를 호출합니다.

     - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)
     + include Gitlab::InternalEventsTracking
     + track_internal_event('project_created', user: current_user)
    
  8. 이벤트에 추가 값을 추가할 수 있습니다. 보통 데이터 웨어하우스에 있기 유용한 정보인 projectnamespace를 추가합니다.

     - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)
     + include Gitlab::InternalEventsTracking
     + track_internal_event('project_created', user: current_user, project: project, namespace: namespace)
    
  9. internal event tracking 공유 예제를 사용하여 테스트를 업데이트합니다.

  10. 이벤트의 이름을 hll_redis_legacy_events에서 제거합니다.

  11. 이벤트를 hll_redis_key_overrides 파일에 추가합니다. 파일에 사용된 형식은 project_created-user: 'project_created'입니다. 여기서 project_created는 이벤트의 이름이고 user는 메트릭 정의 파일에서 지정된 고유값입니다.

프런트엔드

프런트엔드에서 trackRedisHllUserEvent를 호출하여 프런트엔드 이벤트를 추적하는 경우, mixin, 순수 JavaScript 또는 데이터 추적 속성을 사용하여 내부 이벤트로 변환할 수 있습니다.

각 방법에 대한 예제는 빠른 시작 가이드에서 확인할 수 있습니다.