除雪車開発ガイドライン
Snowplowは、ユーザーが当社のウェブサイトやアプリケーションにどのように関与するかを追跡する、エンタープライズグレードのマーケティングおよびアナリティクス計測プラットフォームです。
Snowplowは疎結合のサブシステムで構成されています:
- トラッカーはSnowplowのイベントを発生させます。Snowplowにはウェブ、モバイル、デスクトップ、サーバ、IoTをカバーする12のトラッカーがあります。
- コレクターはトラッカーからSnowplowイベントを受信します。私たちはAmazon S3、Apache Kafka、またはAmazon Kinesisにイベントを同期するさまざまなイベントコレクタを使用しています。
- Enrichは生のSnowplowイベントをクリーンアップし、エンリッチしてストレージに格納します。Hadoopベースのエンリッチメントプロセスと、KinesisベースまたはKafkaベースのプロセスがあります。
- ストレージはSnowplowイベントを保存します。Snowplowイベントは、S3上のフラットファイル構造と、RedshiftとPostgreSQLのデータベースに保存されます。
- データモデリングは、イベントレベルのデータを他のデータセットと結合し、より小さなデータセットに集約し、ビジネスロジックを適用します。これにより、データ分析のためのクリーンなテーブルセットが生成されます。私たちはRedshiftとLookerにデータモデルを使用しています。
- 分析はSnowplowイベントまたは集計テーブルで実行されます。
Snowplowトラッキングの有効化
トラッキングを有効にするには
- インスタンスレベルで、フロントエンドとバックエンドの両方のレイヤーのトラッキングを有効にします。
- ユーザーレベル。ユーザーのトラッキングはユーザーごとに無効にすることができます。GitLabはDo Not Track標準を尊重しているため、ブラウザでDo Not Trackオプションを有効にしているユーザーはユーザーレベルでトラッキングされません。
Snowplowトラッキングは、GitLab.comのデータをGitLabが設定したコレクターに送信するように設定されています。デフォルトでは、セルフマネージドインスタンスにはコレクターが設定されておらず、Snowplow経由でデータを収集しません。
カスタムSnowplowコレクターを使用するように、セルフマネージドGitLabインスタンスを設定することができます。
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、設定 > 一般を選択します。
- Snowplowを展開します。
- 
Enable Snowplow trackingを選択し、Snowplowの設定情報を入力します。例えば 名前 値 コレクターホスト名 your-snowplow-collector.netアプリID gitlabクッキードメイン .your-gitlab-instance.com
- 変更を保存を選択します。
除雪依頼の流れ
次の例は、以下のコンポーネント間の基本的なリクエスト/レスポンスの流れを示しています:
- GitLab.com の Snowplow JS / Ruby Trackers
- GitLab.com Snowplow コレクター
- GitLab S3バケット
- GitLab Snowflakeデータウェアハウス
- Sisense
アーキテクチャの詳細については、Snowplow インフラストラクチャを参照してください。
イベントスキーマ
すべてのイベントは一貫していなければなりません。各機能が異なるイベントをキャプチャすると、分析が困難になります。
各イベントは、イベントを記述する属性を提供します。
| 属性 | 種類 | 必須 | 説明 | 
|---|---|---|---|
| カテゴリー | テキスト | true | アプリケーションのページまたはバックエンドのセクション。実行不可能でない限り、フロントエンドではデフォルトでRails page属性を使用し、バックエンドではnamespace + クラス名、例えば Notes::CreateService. | 
| アクション | テキスト | true | ユーザーが取るアクション、またはインスツルメンテーションされるアスペクト。最初の単語はアクションまたはアスペクトを表す必要があります。例えば、クリックは click、アクティビティはactivate、作成はcreateでなければなりません。何が実行されたかを表すには、アンダースコアを使用します。例えば、フォームフィールドのアクティブ化はactivate_form_input、ドロップダウンリストをクリックするようなインターフェイスのアクションはclick_dropdown、バックエンドからプロジェクトレコードを作成するようなアクティビティはcreate_projectです。 | 
| ラベル | テキスト | false | アクションを実行する特定の要素またはオブジェクト。例えば、 create_from_templateの場合、’Create from template’ というラベルの付いたタブなどです。テキストがない場合は一意の識別子、例えば Groups ドロップダウン・リストを閉じる場合はgroups_dropdown_closeなどです。Snowplow イベントに適合する Service Ping メトリクスの場合、これは定義ファイルから取得した完全なメトリック・キー・パスである必要があります。 | 
| プロパティ | テキスト | false | アクションを実行する要素またはオブジェクトの追加プロパティ。Snowplow イベントに適応した Service Ping メトリクスの場合、これはイベントの分析に役立つ追加情報またはコンテキストである必要があります。例えば、 usage_activity_by_stage_monthly.create.merge_requests_usersの場合、4つの異なるマージリクエストアクションが考えられます:「create”、”merge”、”comment”、”close “です。これらはそれぞれ、可能性のあるプロパティ値になります。 | 
| 値 | 10進数 | false | イベントに直接関連する数値(10進数)を記述します。これは入力値である可能性があります。例えば、 internalvisibilityをクリックしたときの10。 | 
| コンテキスト | ベクトル | false | 属性が十分でない場合、イベントを記述するための自己記述型 JSON形式の追加データ。データの整合性を保証するために、各コンテキストにはスキーマが定義されていなければなりません。詳しくは GitLab で定義されているコンテキストのリストを参照してください。 | 
使用例
| カテゴリー | レーベル | アクション | プロパティ | 値 | 
|---|---|---|---|---|
| [root:index] | main_navigation | click_navigation_link | [link_label] | - | 
| [groups:boards:show] | toggle_swimlanes | click_toggle_button | - | [is_active] | 
| [projects:registry:index] | registry_delete | click_button | - | - | 
| [projects:registry:index] | registry_delete | confirm_deletion | - | - | 
| [projects:blob:show] | congratulate_first_pipeline | click_button | [human_access] | - | 
| [projects:clusters:new] | chart_options | generate_link | [chart_link] | - | 
| [projects:clusters:new] | chart_options | click_add_label_button | [label_id] | - | 
| API::NpmPackages | counts.package_events_i_package_push_package_by_deploy_token | push_package | npm | - | 
* カテゴリーを省略する場合は、デフォルトを使用できます。
 ** 変数文字列にはプロパティを使用します。
参照SQL
直近20件のイベントreply_comment_button
SELECT
  session_id,
  event_id,
  event_label,
  event_action,
  event_property,
  event_value,
  event_category,
  contexts
FROM legacy.snowplow_structured_events_all
WHERE
  event_label = 'reply_comment_button'
  AND event_action = 'click_button'
  -- AND event_category = 'projects:issues:show'
  -- AND event_value = 1
ORDER BY collector_tstamp DESC
LIMIT 20
最新100ページビューイベント
SELECT
  -- page_url,
  -- page_title,
  -- referer_url,
  -- marketing_medium,
  -- marketing_source,
  -- marketing_campaign,
  -- browser_window_width,
  -- device_is_mobile
  *
FROM legacy.snowplow_page_views_30
ORDER BY page_view_start DESC
LIMIT 100
過去30日間にreply_comment_button を発したユーザー上位20名
SELECT
  count(*) as hits,
  se_action,
  se_category,
  gsc_pseudonymized_user_id
FROM legacy.snowplow_gitlab_events_30
WHERE
  se_label = 'reply_comment_button'
  AND gsc_pseudonymized_user_id IS NOT NULL
GROUP BY gsc_pseudonymized_user_id, se_category, se_action
ORDER BY count(*) DESC
LIMIT 20
JSON形式のデータをクエリします。
SELECT
  derived_tstamp,
  contexts:data[0]:data:extra:old_format as CURRENT_FORMAT,
  contexts:data[0]:data:extra:value as UPDATED_FORMAT
FROM legacy.snowplow_structured_events_all
WHERE event_action in ('wiki_format_updated')
ORDER BY derived_tstamp DESC
LIMIT 100
ウェブ固有のパラメータ
Snowplow JavaScriptはデフォルトですべてのWebイベントにWeb固有のパラメータを追加します。
 
