内部イベントトラッキングのクイックスタート
より効率的でスケーラブルな統一トラッキングAPIを提供するために、GitLabは既存のRedisHLLとSnowplowトラッキングを廃止します。その代わりに、新しいtrack_event
メソッドを実装します。このアプローチでは、RedisHLL のカウンターを更新したり Snowplow のイベントを送信したりすることができます。
内部イベントトラッキングでコードを計測するためには、3つのことが必要です:
- イベントの定義
- 1つまたは複数のメトリクスを定義します。
- イベントのトリガー
イベントとメトリクスの定義
イベントとメトリクスの定義を作成するには、internal_events
ジェネレータを使用します。
この例では、project_created
というイベントのイベント定義と、7日と28日ごとに集計される2つのメトリクス定義を作成します。
bin/rails g gitlab:analytics:internal_events \
--time_frames=7d 28d \
--group=project_management \
--stage=plan --section=dev \
--event=project_created \
--unique=user.id \
--mr=https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121544
トリガーイベント
イベントをトリガーしてメトリクスを更新する方法は、バックエンドとフロントエンドで若干異なります。以下の関連セクションを参照してください。
バックエンドのトラッキング
イベントをトリガーするには、Gitlab::InternalEvents.track_event
メソッドを必要な引数とともに呼び出します:
Gitlab::InternalEvents.track_event(
"i_code_review_user_apply_suggestion",
user: user,
namespace: namespace,
project: project
)
このメソッドは、イベントi_code_review_user_apply_suggestion
に関連するすべての RedisHLL メトリクスを自動的にインクリメントし、すべての名前付き引数と標準コンテキストを持つ対応する Snowplow イベントを送信します(SaaS のみ)。
フロントエンドのトラッキング
Vueコンポーネント
Vueコンポーネントでは、Vue mixinを使用してトラッキングを行うことができます。
Vueコンポーネントのトラッキングを実装するには
-
InternalEvents
ライブラリをインポートし、mixin
メソッドを呼び出します:import { InternalEvents } from '~/tracking'; const trackingMixin = InternalEvents.mixin();
-
コンポーネントで mixin を使用します:
export default { mixins: [trackingMixin], data() { return { expanded: false, }; }, };
-
track_event
メソッドを呼び出します。トラッキングオプションは2番目のパラメータとして渡すことができます:this.track_event('i_code_review_user_apply_suggestion');
または、テンプレート内部で
track_event
メソッドを使用します:<template> <div> <button data-testid="toggle" @click="toggle">Toggle</button> <div v-if="expanded"> <p>Hello world!</p> <button @click="track_event('i_code_review_user_apply_suggestion')">Track another event</button> </div> </div> </template>
生のJavaScript
任意のフロントエンド JavaScript コードから直接イベントをトラッキングするために、生の JavaScript 用のモジュールが提供されています。これは Mixin を利用できないコンポーネントコンテキストの外部で使用することができます。
import { InternalEvents } from '~/tracking';
InternalEvents.track_event('i_code_review_user_apply_suggestion');
データトラック属性
この属性によって、ボタンのGitLab内部イベントをトラッキングしたい場合、ClickハンドラにJavaScriptコードを書く必要がなくなります。その代わりに、イベントの値をdata-event-tracking属性に追加するだけで動作します。これはhamlビューでも使えます。
<gl-button
data-event-tracking="i_analytics_dev_ops_adoption"
>
Click Me
</gl-button>
ハムル
= render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle', data: { event_tracking: 'action' }}) do
レンダリング時の内部イベント
コンポーネントのレンダリング時やロード時に内部イベントを送信したい場合があります。このような場合は、data-event-tracking-load="true"
属性を追加します:
= render Pajamas::ButtonComponent.new(button_options: { data: { event_tracking_load: 'true', event_tracking: 'i_devops' } }) do
= _("New project")
制限事項
unique
、user.id
、project.id
、namespace.id
、これらは標準コンテキストの一部として記録されます。現在のところ、merge_request.id
のような値を置く場所はありません。これは自己記述イベントによって変わるでしょう。