기존 추적을 내부 이벤트 추적으로 마이그레이션하기
GitLab 내부 이벤트 추적은 더 이상 지원되지 않는 Snowplow 및 Redis/RedisHLL 이벤트 추적 옵션 위에 통합 API를 제공합니다.
이 페이지에서는 이전 방법 중 하나에서 내부 이벤트 추적으로 전환하는 방법에 대해 설명합니다.
우리는 당신이 내부 이벤트 추적으로 마이그레이션할 것을 권장하지만, 더 이상 지원되지 않는 방법은 기존 이벤트 및 메트릭에 대해 계속 작동할 것입니다.
기존 Snowplow 추적에서 마이그레이션하기
이미 Snowplow에서 이벤트를 추적하고 있다면, 내부 이벤트 추적으로 전환하여 자가 관리 인스턴스의 메트릭을 수집할 수도 있습니다.
내부 이벤트에 의해 트리거된 이벤트는 이전에 Snowplow를 직접 사용하여 추적한 것과 비교하여 몇 가지 특별한 속성을 가집니다:
-
category
는 이벤트가 발생한 위치로 자동 설정됩니다. 프론트엔드 이벤트의 경우 페이지 이름이고, 백엔드 이벤트의 경우 클래스 이름입니다. 페이지 이름이나 클래스 이름이 사용되지 않은 경우 기본값인"InternalEventTracking"
이 사용됩니다.
마이그레이션하기 전에 이 변경 사항에 동의하는지 확인하고 대시보드도 그에 맞게 변경되어야 합니다.
백엔드
Gitlab::Tracking.event
를 사용하여 Snowplow 이벤트를 이미 추적하고 있고 내부 이벤트 추적으로 마이그레이션하려면 다음과 같이 시작할 수 있습니다:
Gitlab::Tracking.event(name, 'ci_templates_unique', namespace: namespace,
project: project, context: [context], user: user, label: label)
위 코드는 다음과 같이 대체될 수 있습니다:
include Gitlab::InternalEventsTracking
track_internal_event('ci_templates_unique', namespace: namespace, project: project, user: user, additional_properties: { label: label })
label
, property
, value
속성은 additional_properties
해시 안에 포함되어야 합니다. 원래 호출에 포함되지 않은 경우 additional_properties
인자는 건너뛰어도 됩니다.
또한, 추적하려는 메트릭에 대한 정의를 생성해야 합니다.
메트릭 정의를 생성하려면 다음 생성기를 사용할 수 있습니다:
scripts/internal_events/cli.rb
생성기는 필수 입력을 단계별로 안내합니다.
프론트엔드
Vue 컴포넌트에서 Tracking
믹스를 사용하고 있다면, 이를 InternalEvents
믹스로 교체할 수 있습니다.
현재 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
매개변수 사용은 강력히 권장하지 않습니다. 이는 기본적으로 category
필드가 이벤트가 트리거된 위치에 대한 정보로 채워지기 때문입니다.
이 MR을 예시로 사용할 수 있습니다. 이는 devops_adoption_app
구성 요소를 내부 이벤트 추적을 사용하도록 마이그레이션합니다.
Snowplow 추적에서 label
, value
및 property
를 사용 중인 경우, 이를 trackEvent
함수의 세 번째 인자로 객체 형태로 전달할 수 있습니다. 이는 선택적 매개변수입니다.
Vue 믹스인의 경우:
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-event-tracking
으로 변경해야 내부 이벤트 추적으로 마이그레이션할 수 있습니다. data-track-label
, data-track-property
및 data-track-value
와 같은 추가 추적 속성이 있는 경우, 이를 각각 data-event-label
, data-event-property
및 data-event-value
로 대체할 수 있습니다. 추가 속성을 사용자 지정 키-값 쌍으로 전달하려면 data-event-additional
속성을 사용할 수 있습니다.
예를 들어, 버튼이 다음과 같이 정의된 경우:
<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"
data-event-additional='{"key1": "value1", "key2": "value2"}'
icon="external-link"
/>
data-event-tracking
속성에 액션만 전달하면 Snowplow와 RedisHLL 모두에 전달됩니다.
RedisHLL에서 추적 이전
백엔드
현재 RedisHLL
에서 메트릭을 다음과 같이 추적하고 있다면:
Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)
Internal Events Tracking을 사용하기 시작하려면 다음 단계를 따르세요:
-
이벤트가 Snowplow에 전송되지 않는 경우, 이름 규칙을 충족하도록 이름을 변경하는 것을 고려하세요.
-
git_write_action
을 설명하는 이벤트 정의를 만드세요. (가이드). -
이벤트 섹션에
git_write_action
이 나열된 메트릭 정의를 찾으세요. (20210216182041_action_monthly_active_users_git_write.yml
및20210216184045_git_write_action_weekly.yml
). -
메트릭 정의 파일에서
data_source
를redis_hll
에서internal_events
로 변경하세요. -
instrumentation_class
속성을 제거하세요. Internal Events 메트릭에는 사용되지 않습니다. -
두 메트릭 정의 파일에
events
섹션을 추가하세요.events: - name: git_write_action unique: user.id
메트릭이 고유한 사용자가 아닌 다른 것을 계산하는 경우
user.id
대신project.id
또는namespace.id
를 사용하세요. -
두 메트릭 정의 파일에서
options
섹션을 제거하세요. -
Gitlab::InternalEventsTracking
모듈을 포함하고HLLRedisCounter.track_event
대신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)
-
선택 사항. 이벤트에 추가 값을 추가하세요. 일반적으로
project
와namespace
를 추가하는 것이 데이터 웨어하우스에 유용한 정보가 됩니다.- 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)
-
테스트를 업데이트하여
internal event tracking
공유 예제를 사용하세요. -
hll_redis_legacy_events에서 이벤트의 이름을 제거하세요.
-
이벤트를 hll_redis_key_overrides 파일에 추가하세요. 이 파일에서 사용되는 형식은
project_created-user: 'project_created'
이며, 여기서project_created
는 이벤트의 이름이고user
는 메트릭 정의 파일에 지정된 고유 값입니다.
프론트엔드
프론트엔드에서 프론트엔드 이벤트를 추적하기 위해 trackRedisHllUserEvent
를 호출하는 경우, 이를 mixin, 원시 JavaScript 또는 데이터 추적 속성을 사용하여 Internal Events로 변환할 수 있습니다.
빠른 시작 가이드에는 각 방법에 대한 예제가 있습니다.