575.md 12.6 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
# Telemetry Guide

> 原文:[https://docs.gitlab.com/ee/development/telemetry/](https://docs.gitlab.com/ee/development/telemetry/)

*   [Our tracking tools](#our-tracking-tools)
    *   [Snowplow JS (Frontend)](#snowplow-js-frontend)
    *   [Snowplow Ruby (Backend)](#snowplow-ruby-backend)
    *   [Usage Ping](#usage-ping)
    *   [Database import](#database-import)
    *   [Log system](#log-system)
*   [What data can be tracked](#what-data-can-be-tracked)
    *   [Database counts](#database-counts)
    *   [Pageview events](#pageview-events)
    *   [UI Events](#ui-events)
    *   [CRUD or API events](#crud-or-api-events)
    *   [Event funnels](#event-funnels)
    *   [PostgreSQL data](#postgresql-data)
    *   [Logs](#logs)
    *   [External services](#external-services)
*   [Telemetry systems overview](#telemetry-systems-overview)
    *   [GitLab Inc](#gitlab-inc)
    *   [Self-managed](#self-managed)
    *   [Differences between GitLab Inc and Self-managed](#differences-between-gitlab-inc-and-self-managed)
*   [Snowflake data warehouse](#snowflake-data-warehouse)
    *   [Data sources](#data-sources)

# Telemetry Guide[](#telemetry-guide "Permalink")

在 GitLab,我们收集遥测信息,以帮助我们构建更好的 GitLab. 收集有关如何使用 GitLab 的数据,以更好地了解 GitLab 的哪些部分需要改进以及下一步要构建的功能. 遥测还可以帮助我们的团队更好地理解人们使用 GitLab 的原因,并且借助这一知识,我们能够做出更好的产品决策.

我们还鼓励用户启用跟踪功能,并且我们的跟踪方法完全透明,因此可以轻松理解和信任它. 通过启用跟踪,用户可以:

*   回馈更广泛的社区.
*   帮助 GitLab 改进产品.

本文档包含三个指南,概述了 GitLab 的遥测.

遥测指南:

1.  [Our tracking tools](#our-tracking-tools)
2.  [What data can be tracked](#what-data-can-be-tracked)
3.  [Telemetry systems overview](#telemetry-systems-overview)
4.  [Snowflake data warehouse](#snowflake-data-warehouse)

[Usage Ping Guide](usage_ping.html)

1.  [What is Usage Ping](usage_ping.html#what-is-usage-ping)
2.  [Usage Ping payload](usage_ping.html#usage-ping-payload)
3.  [Disable Usage Ping](usage_ping.html#disable-usage-ping)
4.  [Usage Ping request flow](usage_ping.html#usage-ping-request-flow)
5.  [How Usage Ping works](usage_ping.html#how-usage-ping-works)
6.  [Implementing Usage Ping](usage_ping.html#implementing-usage-ping)
7.  [Developing and testing Usage Ping](usage_ping.html#developing-and-testing-usage-ping)

[Snowplow Guide](snowplow.html)

1.  [What is Snowplow](snowplow.html#what-is-snowplow)
2.  [Snowplow schema](snowplow.html#snowplow-schema)
3.  [Enabling Snowplow](snowplow.html#enabling-snowplow)
4.  [Snowplow request flow](snowplow.html#snowplow-request-flow)
5.  [Implementing Snowplow JS (Frontend) tracking](snowplow.html#implementing-snowplow-js-frontend-tracking)
6.  [Implementing Snowplow Ruby (Backend) tracking](snowplow.html#implementing-snowplow-ruby-backend-tracking)
7.  [Developing and testing Snowplow](snowplow.html#developing-and-testing-snowplow)

更有用的链接:

*   [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/)

## Our tracking tools[](#our-tracking-tools "Permalink")

我们使用几种不同的技术来收集产品使用数据.

### Snowplow JS (Frontend)[](#snowplow-js-frontend "Permalink")

Snowplow 是企业级营销和产品分析平台,可帮助跟踪用户与我们的网站和应用程序互动的方式. [Snowplow JS](https://github.com/snowplow/snowplow/wiki/javascript-tracker)是客户端事件的前端跟踪器.

### Snowplow Ruby (Backend)[](#snowplow-ruby-backend "Permalink")

Snowplow 是企业级营销和产品分析平台,可帮助跟踪用户与我们的网站和应用程序互动的方式. [Snowplow Ruby](https://github.com/snowplow/snowplow/wiki/ruby-tracker)是服务器端事件的后端跟踪器.

### Usage Ping[](#usage-ping "Permalink")

用法 Ping 是 GitLab Inc 收集 GitLab 实例上的用法数据的一种方法. 用法 Ping 主要由实例数据库中不同表的行数组成. 通过逐月比较这些计数(或逐周比较),我们可以大致了解实例如何使用产品中的不同功能. 这些高级数据用于帮助我们的产品,支持和销售团队.

有关更多详细信息,请阅读《 [用法](usage_ping.html)说明》指南.

### Database import[](#database-import "Permalink")

数据库导入是将数据完全导入到 GitLab 的数据仓库中. 对于 GitLab.com,每 6 小时将 PostgreSQL 数据库加载到 Snowflake 数据仓库中. 有关更多详细信息,请参见[数据团队手册](https://about.gitlab.com/handbook/business-ops/data-team/platform/#extract-and-load) .

### Log system[](#log-system "Permalink")

系统日志是通过运行 GitLab Rails 应用程序生成的应用程序日志. 有关更多详细信息,请参阅[日志系统](../../administration/logs.html)[日志记录基础结构](https://gitlab.com/gitlab-com/runbooks/tree/master/logging/doc#logging-infrastructure-overview) .

## What data can be tracked[](#what-data-can-be-tracked "Permalink")

我们不同的跟踪工具使我们能够跟踪不同类型的事件. 下面概述了事件类型和可以跟踪哪些数据的示例.

| 事件类型 | 扫雪机 JS(前端) | 扫雪机 Ruby(后端) | 使用情况 | 数据库导入 | 日志系统 |
| --- | --- | --- | --- | --- | --- |
| 数据库计数 |  |  |  |  |  |
| 浏览量事件 |  |  |  |  |  |
| UI 事件 |  |  |  |  |  |
| CRUD 和 API 事件 |  |  |  |  |  |
| 活动渠道 |  |  |  |  |  |
| PostgreSQL 数据 |  |  |  |  |  |
| Logs |  |  |  |  |  |
| 外部服务 |  |  |  |  |  |

### Database counts[](#database-counts "Permalink")

*   唯一用户创建的项目数
*   Number of users logged in the past 28 day

数据库计数是实例数据库中不同表的行计数. 这些是经过过滤,分组或聚合的 SQL 计数查询,可提供高级使用情况数据. 可用表的完整列表可以在[structure.sql 中](https://gitlab.com/gitlab-org/gitlab/-/blob/master/db/structure.sql)找到.

### Pageview events[](#pageview-events "Permalink")

*   访问/ dashboard / groups 页面的会话数

### UI Events[](#ui-events "Permalink")

*   单击按钮或链接的会话数
*   关闭模式的会话数

UI 事件是浏览器中任何界面驱动的动作,包括点击数据.

### CRUD or API events[](#crud-or-api-events "Permalink")

*   Git 推送次数
*   GraphQL 查询数
*   对 Rails 操作或控制器的请求数

这些是后端事件,包括记录的创建,读取,更新,删除以及其他可能从界面中可用层以外的层触发的事件.

### Event funnels[](#event-funnels "Permalink")

*   依次执行操作 A,B 和 C 的会话数
*   从步骤 A 到步骤 B 的转化率

### PostgreSQL data[](#postgresql-data "Permalink")

这些是原始数据库记录,可使用 Sisense 等商业智能工具进行浏览. 可用表的完整列表可以在[structure.sql 中](https://gitlab.com/gitlab-org/gitlab/-/blob/master/db/structure.sql)找到.

### Logs[](#logs "Permalink")

这些是原始日志,例如[生产日志](../../administration/logs.html#production_jsonlog)[API 日志](../../administration/logs.html#api_jsonlog)[Sidekiq 日志](../../administration/logs.html#sidekiqlog) . 有关更多详细信息,请参见[日志记录基础结构概述](https://gitlab.com/gitlab-com/runbooks/tree/master/logging/doc#logging-infrastructure-overview) .

### External services[](#external-services "Permalink")

这些是 GitLab 实例与之交互的外部服务,例如[外部存储提供程序](../../administration/static_objects_external_storage.html)[外部容器注册表](../../administration/packages/container_registry.html#use-an-external-container-registry-with-gitlab-as-an-auth-endpoint) . 这些服务必须能够将数据发送回 GitLab 实例,以便跟踪数据.

## Telemetry systems overview[](#telemetry-systems-overview "Permalink")

系统概述是一个简化的图,显示了 GitLab Inc 与自我管理实例之间的交互.

[![Telemetry_Overview](img/1f5aad8fb69a4afb74547a2d31fcbc66.png)](../img/telemetry_system_overview.png)

[Source file](https://app.diagrams.net/#G13DVpN-XnhWGz9tqReIj8pp1UE4ehk_EC)

### GitLab Inc[](#gitlab-inc "Permalink")

为了进行遥测,GitLab Inc 具有三个主要组件:

1.  [数据基础架构](https://about.gitlab.com/handbook/business-ops/data-team/platform/infrastructure/) :包含我们数据团队管理的所有内容,包括用于可视化的 Sisense 仪表板,用于数据仓库的 Snowflake,传入数据源(例如 PostgreSQL Pipeline 和 S3 Bucket)以及最后是数据收集器[GitLab.com 的 Snowplow Collector](https://about.gitlab.com/handbook/engineering/infrastructure/library/snowplow/)和 GitLab 的 Versions 应用程序.
2.  GitLab.com:这是生产的 GitLab 应用程序,由客户端和服务器组成. 在客户端或浏览器端,使用 Snowplow JS 跟踪器(前端)来跟踪客户端事件. 在服务器或应用程序端,使用 Snowplow Ruby 跟踪器(后端)来跟踪服务器端事件. 该服务器还包含使用率 Ping,它利用 PostgreSQL 数据库和 Redis 内存数据存储来报告使用率数据. 最后,服务器还包含通过运行 GitLab 应用程序生成的系统日志.
3.  [监视基础结构](https://about.gitlab.com/handbook/engineering/monitoring/) :这是用于确保 GitLab.com 正常运行的基础结构. 系统日志从 GitLab.com 发送到我们的监视基础结构,并由 FluentD 收集器收集. 从 FluentD,日志可以通过 Stackdriver 发送到长期的 Google Cloud Services 冷存储,或者通过 Cloud Pub / Sub 发送到我们的 Elastic Cluster,可以使用 Kibana 进行实时浏览.

### Self-managed[](#self-managed "Permalink")

出于遥测目的,自我管理实例具有两个主要组成部分:

1.  数据基础结构:在自助式实例上,设置数据基础结构是可选的. 如果您想为自己管理的实例收集 Snowplow 跟踪事件,则可以设置自己的自我管理 Snowplow 收集器,并将 Snowplow 事件配置为指向自己的收集器.
2.  GitLab:一个自我管理的 GitLab 实例包含与上述 GitLab.com 相同的所有组件.

### Differences between GitLab Inc and Self-managed[](#differences-between-gitlab-inc-and-self-managed "Permalink")

如橙色线所示,在 GitLab.com 上,Snowplow JS,Snowplow Ruby,Using Ping 和 PostgreSQL 数据库将所有流导入到 GitLab Inc 的数据基础结构中. 但是,在自我管理上,只有 Usage Ping 流入 GitLab Inc 的数据基础架构.

如绿线所示,在 GitLab.com 上的系统日志流进入 GitLab Inc 的监视基础结构. 在自我管理下,没有日志发送到 GitLab Inc 的监视基础结构.

GitLab.com 和自我管理之间的区别总结如下:

| Environment | 扫雪机 JS(前端) | 扫雪机 Ruby(后端) | 使用情况 | 数据库导入 | 日志系统 |
| --- | --- | --- | --- | --- | --- |
| GitLab.com |  |  |  |  |  |
| Self-Managed | (1) | (1) |  |  |  |

注意(1):Snowplow JS 和 Snowplow Ruby 在自我管理上可用,但是,Snowplow Collector 端点设置为 GitLab Inc 无法访问的自我管理 Snowplow Collector.

## Snowflake data warehouse[](#snowflake-data-warehouse "Permalink")

Snowflake 数据仓库是我们保存 GitLab Inc 所有数据的地方.

### Data sources[](#data-sources "Permalink")

Snowflake 和 Sisense 中有多个数据源可用,每个数据源代表沿转换管道的数据的不同视图.

| Source | Description | Access |
| --- | --- | --- |
| raw | 这些表是原始数据源 | Access via Snowflake |
| analytics_staging | 这些表几乎没有经过任何数据转换,这意味着它们基本上是原始数据源的克隆. | 通过雪花或 Sisense 访问 |
| analytics | 这些表通常经历了更多的数据转换. 它们通常以`_xf`以表示它们已转换的事实 | 通过雪花或 Sisense 访问 |

如果您是对原始数据感兴趣的产品经理,则可能会关注于`analytics``analytics_staging`源. 原始资源仅限于数据和基础架构团队. 有关更多信息,请参阅[产品经理数据:analytics_staging 和 analytics 之间有什么区别?](https://about.gitlab.com/handbook/business-ops/data-team/programs/data-for-product-managers/#whats-the-difference-between-analytics_staging-and-analytics)