除雪車開発ガイドライン

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 flow

Snowplowトラッキングの有効化

トラッキングを有効にするには

  • インスタンスレベルで、フロントエンドとバックエンドの両方のレイヤーのトラッキングを有効にします。
  • ユーザーレベル。ユーザーのトラッキングはユーザーごとに無効にすることができます。GitLabはDo Not Track標準を尊重しているため、ブラウザでDo Not Trackオプションを有効にしているユーザーはユーザーレベルでトラッキングされません。

Snowplowトラッキングは、GitLab.comのデータをGitLabが設定したコレクターに送信するように設定されています。デフォルトでは、セルフマネージドインスタンスにはコレクターが設定されておらず、Snowplow経由でデータを収集しません。

カスタムSnowplowコレクターを使用するように、セルフマネージドGitLabインスタンスを設定することができます。

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、設定 > 一般を選択します。
  4. Snowplowを展開します。
  5. Enable Snowplow trackingを選択し、Snowplowの設定情報を入力します。例えば

    名前
    コレクターホスト名your-snowplow-collector.net
    アプリIDgitlab
    クッキードメイン.your-gitlab-instance.com
  6. 変更を保存を選択します。

除雪依頼の流れ

次の例は、以下のコンポーネント間の基本的なリクエスト/レスポンスの流れを示しています:

sequenceDiagram participant Snowplow JS (Frontend) participant Snowplow Ruby (Backend) participant GitLab.com Snowplow Collector participant S3 Bucket participant Snowflake DW participant Sisense Dashboards Snowplow JS (Frontend) ->> GitLab.com Snowplow Collector: FE Tracking event Snowplow Ruby (Backend) ->> GitLab.com Snowplow Collector: BE Tracking event loop Process using Kinesis Stream GitLab.com Snowplow Collector ->> GitLab.com Snowplow Collector: Log raw events GitLab.com Snowplow Collector ->> GitLab.com Snowplow Collector: Enrich events GitLab.com Snowplow Collector ->> GitLab.com Snowplow Collector: Write to disk end GitLab.com Snowplow Collector ->> S3 Bucket: Kinesis Firehose Note over GitLab.com Snowplow Collector, S3 Bucket: Pseudonymization S3 Bucket->>Snowflake DW: Import data Snowflake DW->>Snowflake DW: Transform data using dbt Snowflake DW->>Sisense Dashboards: Data available for querying

アーキテクチャの詳細については、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進数)を記述します。これは入力値である可能性があります。例えば、internal visibilityをクリックしたときの10
コンテキストベクトルfalse属性が十分でない場合、イベントを記述するための自己記述型 JSON形式の追加データ。データの整合性を保証するために、各コンテキストにはスキーマが定義されていなければなりません。詳しくは GitLab で定義されているコンテキストのリストを参照してください。

使用例

カテゴリーレーベルアクションプロパティ
[root:index]main_navigationclick_navigation_link[link_label]-
[groups:boards:show]toggle_swimlanesclick_toggle_button-[is_active]
[projects:registry:index]registry_deleteclick_button--
[projects:registry:index]registry_deleteconfirm_deletion--
[projects:blob:show]congratulate_first_pipelineclick_button[human_access]-
[projects:clusters:new]chart_optionsgenerate_link[chart_link]-
[projects:clusters:new]chart_optionsclick_add_label_button[label_id]-
API::NpmPackagescounts.package_events_i_package_push_package_by_deploy_tokenpush_packagenpm-

* カテゴリーを省略する場合は、デフォルトを使用できます。
** 変数文字列にはプロパティを使用します。

参照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固有のパラメータを追加します。