# Snowplow Guide > 原文:[https://docs.gitlab.com/ee/development/telemetry/snowplow.html](https://docs.gitlab.com/ee/development/telemetry/snowplow.html) * [What is Snowplow](#what-is-snowplow) * [Snowplow schema](#snowplow-schema) * [Enabling Snowplow](#enabling-snowplow) * [Snowplow request flow](#snowplow-request-flow) * [Implementing Snowplow JS (Frontend) tracking](#implementing-snowplow-js-frontend-tracking) * [Tracking in HAML (or Vue Templates)](#tracking-in-haml-or-vue-templates) * [Tracking within Vue components](#tracking-within-vue-components) * [Tracking in raw JavaScript](#tracking-in-raw-javascript) * [Tests and test helpers](#tests-and-test-helpers) * [Implementing Snowplow Ruby (Backend) tracking](#implementing-snowplow-ruby-backend-tracking) * [Performance](#performance) * [Developing and testing Snowplow](#developing-and-testing-snowplow) * [Snowplow Analytics Debugger Chrome Extension](#snowplow-analytics-debugger-chrome-extension) * [Snowplow Inspector Chrome Extension](#snowplow-inspector-chrome-extension) * [Snowplow Micro](#snowplow-micro) * [Snowplow Mini](#snowplow-mini) # Snowplow Guide[](#snowplow-guide "Permalink") 本指南概述了 Snowplow 的工作原理以及实施细节. 有关遥测的更多信息,请参见: * [Telemetry Guide](index.html) * [Usage Ping Guide](usage_ping.html) 更有用的链接: * [Telemetry Direction](https://about.gitlab.com/direction/telemetry/) * [Data Analysis Process](https://about.gitlab.com/handbook/business-ops/data-team/#data-analysis-process/) * [Data for Product Managers](https://about.gitlab.com/handbook/business-ops/data-team/programs/data-for-product-managers/) * [Data Infrastructure](https://about.gitlab.com/handbook/business-ops/data-team/platform/infrastructure/) ## What is Snowplow[](#what-is-snowplow "Permalink") Snowplow 是企业级营销和产品分析平台,可帮助跟踪用户与我们的网站和应用程序互动的方式. [扫雪机](https://github.com/snowplow/snowplow)由以下松耦合子系统组成: * **Trackers** fire Snowplow events. Snowplow has 12 trackers, covering web, mobile, desktop, server, and IoT. * **收集器**从跟踪**器**接收 Snowplow 事件. 我们有三个不同的事件收集器,可将事件同步到 Amazon S3,Apache Kafka 或 Amazon Kinesis. * **Enrich**清理原始的 Snowplow 事件,丰富它们并将其存储. 我们有一个基于 Hadoop 的扩充流程,以及一个基于 Kinesis 或基于 Kafka 的流程. * 扫雪机事件所在的位置是**存储** . 我们将 Snowplow 事件存储在 S3 上的平面文件结构中以及 Redshift 和 PostgreSQL 数据库中. * **数据建模**是将事件级别的数据与其他数据集合并在一起,并聚合为较小的数据集,然后应用业务逻辑. 这将产生一组干净的表,从而使对数据的分析更加容易. 我们有 Redshift 和 Looker 的数据模型. * 在 Snowplow 事件或汇总表上执行**分析** . [![snowplow_flow](img/d366ea5b34fa89da8adbcbd7ec51bc2a.png)](../img/snowplow_flow.png) ## Snowplow schema[](#snowplow-schema "Permalink") 我们有 Snowplow 模式的许多定义. 我们有一个积极的问题要[对此模式](https://gitlab.com/gitlab-org/gitlab/-/issues/207930)进行[标准化,](https://gitlab.com/gitlab-org/gitlab/-/issues/207930)包括以下定义: * 前端和后端分类法如下所示 * [Feature instrumentation taxonomy](https://about.gitlab.com/handbook/product/product-processes/#taxonomy) * [Self describing events](https://github.com/snowplow/snowplow/wiki/Custom-events#self-describing-events) * [Iglu schema](https://gitlab.com/gitlab-org/iglu/) * [Snowplow authored events](https://github.com/snowplow/snowplow/wiki/Snowplow-authored-events) ## Enabling Snowplow[](#enabling-snowplow "Permalink") 可以在以下位置启用跟踪: * 实例级别,可以在前端层和后端层上进行跟踪. * 用户级别,尽管可以按用户禁用用户跟踪. GitLab 跟踪遵循["不跟踪"](https://www.eff.org/issues/do-not-track)标准,因此不会在用户级别跟踪浏览器中启用了"不跟踪"选项的任何用户. 我们将 Snowplow 用作大多数跟踪策略,并且已在 GitLab.com 上启用了它. 在自我管理的实例上,可以通过导航到以下地址来启用 Snowplow: * 用户界面中的**管理区域>设置>集成** . * 浏览器中的`admin/application_settings/integrations` . 需要以下配置: | Name | Value | | --- | --- | | Collector | `snowplow.trx.gitlab.net` | | Site ID | `gitlab` | | Cookie 域 | `.gitlab.com` | ## Snowplow request flow[](#snowplow-request-flow "Permalink") 下面的示例显示以下组件之间的基本请求/响应流: * GitLab.com 上的 Snowplow JS / Ruby Trackers * [GitLab.com Snowplow Collector](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/library/snowplow/index.md) * 亚搏体育 app 的 S3 桶 * GitLab 的 Snowflake 数据仓库 * Sisense: sequenceDiagram 参与者 Snowplow JS(前端)参与者 Snowplow Ruby(后端)参与者 GitLab.com Snowplow Collector 参与者 S3 Bucket 参与者 Snowflake DW 参与者 Sisense Dashboards Snowplow JS(前端)->> GitLab.com Snowplow Collector:FE 跟踪事件 Snowplow Ruby(后端) ->> GitLab.com Snowplow 收集器:使用 Kinesis Stream 跟踪事件循环过程 GitLab.com Snowplow 收集器->> GitLab.com Snowplow 收集器:记录原始事件 GitLab.com Snowplow 收集器->> GitLab.com Snowplow 收集器:丰富事件 GitLab.com 扫雪机-> GitLab.com 扫雪机:写入磁盘端 GitLab.com 扫雪机->> S3 桶:K​​inesis Firehose S3 桶->>雪花 DW:导入数据 Snowflake DW->> Snowflake DW:转换 dbt Snowflake DW->> Sisense 仪表盘获取数据:可用于查询的数据 ## Implementing Snowplow JS (Frontend) tracking[](#implementing-snowplow-js-frontend-tracking "Permalink") GitLab 提供了`Tracking` ,该接口包装了[Snowplow JavaScript Tracker](https://github.com/snowplow/snowplow/wiki/javascript-tracker)以跟踪自定义事件. 有几种利用跟踪的方法,但是每种方法通常至少需要一个`category`和一个`action` . 可以提供符合我们[功能仪表分类法的](https://about.gitlab.com/handbook/product/product-processes/#taxonomy)其他数据. | field | type | 默认值 | description | | --- | --- | --- | --- | | `category` | string | document.body.dataset.page | 在其中捕获事件的页面或页面的子部分. | | `action` | string | ‘generic’ | 用户正在采取的行动. 单击应该是`click` ,应该`activate` ,因此,例如,聚焦表单字段将是`activate_form_input` ,单击按钮将是`click_button` . | | `data` | object | {} | 如[我们的功能仪表分类法中](https://about.gitlab.com/handbook/product/product-processes/#taxonomy)所述的其他数据,例如`label` , `property` , `value`和`context` . | ### Tracking in HAML (or Vue Templates)[](#tracking-in-haml-or-vue-templates "Permalink") 在 HAML(或 Vue 模板)中工作时,我们可以向感兴趣的元素添加`data-track-*`属性. 具有`data-track-event`属性的所有元素都会自动对点击绑定事件跟踪. 以下是分配给按钮的`data-track-*`属性的示例: ``` %button.btn{ data: { track: { event: "click_button", label: "template_preview", property: "my-template" } } } ``` ```