Telemetry Guide
Telemetry Guide
在 GitLab,我们收集遥测信息,以帮助我们构建更好的 GitLab. 收集有关如何使用 GitLab 的数据,以更好地了解 GitLab 的哪些部分需要改进以及下一步要构建的功能. 遥测还可以帮助我们的团队更好地理解人们使用 GitLab 的原因,并且借助这一知识,我们能够做出更好的产品决策.
我们还鼓励用户启用跟踪功能,并且我们的跟踪方法完全透明,因此可以轻松理解和信任它. 通过启用跟踪,用户可以:
- 回馈更广泛的社区.
- 帮助 GitLab 改进产品.
本文档包含三个指南,概述了 GitLab 的遥测.
遥测指南:
- What is Snowplow
- Enabling Snowplow
- Implementing Snowplow JS (Frontend) tracking
- Developing and testing Snowplow
更有用的链接:
我们使用几种不同的技术来收集产品使用数据.
Snowplow 是企业级营销和产品分析平台,可帮助跟踪用户与我们的网站和应用程序互动的方式. 是客户端事件的前端跟踪器.
Snowplow Ruby (Backend)
Snowplow 是企业级营销和产品分析平台,可帮助跟踪用户与我们的网站和应用程序互动的方式. 是服务器端事件的后端跟踪器.
Usage Ping
有关更多详细信息,请阅读《 说明》指南.
Database import
数据库导入是将数据完全导入到 GitLab 的数据仓库中. 对于 GitLab.com,每 6 小时将 PostgreSQL 数据库加载到 Snowflake 数据仓库中. 有关更多详细信息,请参见 .
Log system
系统日志是通过运行 GitLab Rails 应用程序生成的应用程序日志. 有关更多详细信息,请参阅和日志记录基础结构 .
我们不同的跟踪工具使我们能够跟踪不同类型的事件. 下面概述了事件类型和可以跟踪哪些数据的示例.
- 唯一用户创建的项目数
- Number of users logged in the past 28 day
数据库计数是实例数据库中不同表的行计数. 这些是经过过滤,分组或聚合的 SQL 计数查询,可提供高级使用情况数据. 可用表的完整列表可以在找到.
Pageview events
- 访问/ dashboard / groups 页面的会话数
UI Events
- 单击按钮或链接的会话数
- 关闭模式的会话数
UI 事件是浏览器中任何界面驱动的动作,包括点击数据.
CRUD or API events
- Git 推送次数
- GraphQL 查询数
- 对 Rails 操作或控制器的请求数
这些是后端事件,包括记录的创建,读取,更新,删除以及其他可能从界面中可用层以外的层触发的事件.
Event funnels
- 依次执行操作 A,B 和 C 的会话数
- 从步骤 A 到步骤 B 的转化率
这些是原始数据库记录,可使用 Sisense 等商业智能工具进行浏览. 可用表的完整列表可以在structure.sql 中找到.
Logs
这些是原始日志,例如生产日志 , 或Sidekiq 日志 . 有关更多详细信息,请参见 .
External services
这些是 GitLab 实例与之交互的外部服务,例如或外部容器注册表 . 这些服务必须能够将数据发送回 GitLab 实例,以便跟踪数据.
GitLab Inc
为了进行遥测,GitLab Inc 具有三个主要组件:
- 数据基础架构 :包含我们数据团队管理的所有内容,包括用于可视化的 Sisense 仪表板,用于数据仓库的 Snowflake,传入数据源(例如 PostgreSQL Pipeline 和 S3 Bucket)以及最后是数据收集器和 GitLab 的 Versions 应用程序.
- GitLab.com:这是生产的 GitLab 应用程序,由客户端和服务器组成. 在客户端或浏览器端,使用 Snowplow JS 跟踪器(前端)来跟踪客户端事件. 在服务器或应用程序端,使用 Snowplow Ruby 跟踪器(后端)来跟踪服务器端事件. 该服务器还包含使用率 Ping,它利用 PostgreSQL 数据库和 Redis 内存数据存储来报告使用率数据. 最后,服务器还包含通过运行 GitLab 应用程序生成的系统日志.
- 监视基础结构 :这是用于确保 GitLab.com 正常运行的基础结构. 系统日志从 GitLab.com 发送到我们的监视基础结构,并由 FluentD 收集器收集. 从 FluentD,日志可以通过 Stackdriver 发送到长期的 Google Cloud Services 冷存储,或者通过 Cloud Pub / Sub 发送到我们的 Elastic Cluster,可以使用 Kibana 进行实时浏览.
Self-managed
出于遥测目的,自我管理实例具有两个主要组成部分:
- GitLab:一个自我管理的 GitLab 实例包含与上述 GitLab.com 相同的所有组件.
如橙色线所示,在 GitLab.com 上,Snowplow JS,Snowplow Ruby,Using Ping 和 PostgreSQL 数据库将所有流导入到 GitLab Inc 的数据基础结构中. 但是,在自我管理上,只有 Usage Ping 流入 GitLab Inc 的数据基础架构.
如绿线所示,在 GitLab.com 上的系统日志流进入 GitLab Inc 的监视基础结构. 在自我管理下,没有日志发送到 GitLab Inc 的监视基础结构.
GitLab.com 和自我管理之间的区别总结如下:
注意(1):Snowplow JS 和 Snowplow Ruby 在自我管理上可用,但是,Snowplow Collector 端点设置为 GitLab Inc 无法访问的自我管理 Snowplow Collector.
Snowflake 数据仓库是我们保存 GitLab Inc 所有数据的地方.
Data sources
Snowflake 和 Sisense 中有多个数据源可用,每个数据源代表沿转换管道的数据的不同视图.