在项目研发管理过程中,使用仓库管理系统,可以轻松有效的对项目代码进行管控,这已经是大家的共识。像 SVN、GitHab、GitLab 都是当下使用率很高的项目源码管理平台。
这一类管理平台在项目研发,缺陷管理,版本控制过程中都起到了重要作用,同时也支持简单的统计分析功能,比如研发人员的代码提交量,Issue的完成情况和完成比率等。但是,仓库管理平台提供的分析功能,不支持动态、实时、复杂、自定义的统计分析,也没有可视化仪表盘展现,无法满足一些灵活度比较高的统计分析需求,这就需要结合专业的数据分析平台 —— SaCa DataInsight,对日志数据进行实时采集和实时分析。
获取 GitLab 日志数据源
- GitLab 数据库
可以直接对 GitLab 数据库中的数据进行挖掘和分析。但是这种方式需要访问数据库,耦合度高,灵活性差,容易对数据库性能造成影响。
- GitLab 的 webhook 功能
GitLab 提供了 webhook 功能,能够把项目中的代码提交,缺陷管理,版本历史等操作过程发送给外部 Agent 接收,实现各种定制化操作。基于 webhook,我们可以通过 Agent 采集到 GitLab 各种操作事件的日志数据。
- GitLab 网络请求“抓包”
SaCa DataInsight 提供了对应用程序网络请求进行“抓包”的 Agent 采集器。基于它,我们可以轻松的获取到 GitLab 每个请求的日志数据。
下面,我们将为大家讲解,如何通过 webhook 和网络请求“抓包”的方式,采集GitLab 日志数据。
1、通过 webhook 功能采集数据
首先,我们需要编写了一个 Agent 程序(java,python 等)用来接收 webhook 的消息推送,GitLab 的 webhook 使用 HTTP 协议推送消息。本次演示我们使用 java 版本的 Agent 接收 webhook 消息,目标是生成 JSON 类型日志数据。(java 版 Agent 程序代码在此不做详细介绍)
- 启动 Agent,与 webhook 对接
通过 Agent 程序在1337端口号上开启监听,用于接收 GitLab 的 webhook 消息推送。

- 配置 GitLab 的 webhook
在项目下拉菜单中选择 webhook。填写部署了 Agent 的服务器 ip 和端口号。点击“Add Webhook”按钮,增加 webhook。点击“Test”按钮,测试 webhook 是否配置成功,返回 HTTP 200,即为成功。
- 查看 Agent 接收 webhook 推送后,生成的日志文件
配置成功后,在 GitLab 项目下的操作事件和内容就会被 webhook 实时的推送给Agent,在 Agent 中经过处理,即可生成 JSON 数据,保存在日志文件中。


- 部署 SaCa DataInsight 日志采集程序,监控 webhook 日志文件,增量采集数据
在上一个步骤中,我们已经完成了 webhook 的对接和日志文件的生成工作。下面,我们使用 SaCa DataInsight 日志采集程序,对 webhook 生成的日志文件进行实时监控、增量采集,并将数据进行预处理,存储在 SaCa DataInsight 数据库中。
在日志文件所在的服务器上部署 SaCa DataInsight 采集程序,对日志数据进行实时监控,增量采集。
采集到的数据会发送到 SaCa DataInsight 服务端,进行数据预处理,把杂乱无章的非结构化数据通过定义模板的方式,梳理成规律、整齐的结构化数据,让数据的进一步分析变得更加灵活,容易。
2、通过网络请求“抓包”采集数据
webhook 采集的日志数据,受限于 GitLab 提供的几个固定的操作事件,覆盖面积有限,比如统计用户操作行为,用户访问情况等,webhook 是无法采集到的。这就需要我们通过 SaCa DataInsight 提供的 Agent 采集器,对 GitLab 的网络请求进行实时“抓包”,进一步的对数据进行采集工作。
- 启动网络请求“抓包” Agent 采集程序
通过配置和部署 SaCa DataInsight 的 Agent 采集程序,我们就可以轻松的实现对 GitLab 网络请求“抓包”。

- 数据发送到 SaCa DataInsight 服务端进行数据预处理
部署成功后,GitLab 的每次网络访问请求都会被 Agent 监控,并将访问过程中的生成日志数据,发送到 SaCa DataInsight 服务端,进行数据预处理。
3、Gitlab 日志数据的预处理
经过上述过程,我们已经通过 webhook 和网络请求“抓包”方式实现了日志数据的采集工作。然后,SaCa DataInsight 的采集程序会自动将采集的数据发送到 SaCa DataInsight 服务端进行数据的预处理工作,
具体的流程如下图所示:

- webhook 数据的预处理

如上图所示,webhook 的日志数据,缺乏规律、层次复杂,通过传统的工具无法对其进行有效统计和分析。SaCa DataInsight 采集器对日志文件内的数据经过识别和采集后,将数据发送到服务端的预处理模块进行数据重组和分类,最后生成结构化的“KV数据”。
预处理后效果:

- 网络请求“抓包”数据的预处理

如上图所示,通过网络抓包采集的数据,相比 webhook 日志数据更加复杂、无结构。如果没有针对性的分析工具,很难对这类高度复杂的机器数据进行分析。
SaCa DataInsight 针对网络数据提供了完善的预处理机制,可以将这些复杂的非结构化数据转换成为有规律的结构化数据。
预处理后效果:

这样,数据经过预处理后,数据结构和数据类型都变得清晰明朗起来,接下来就可以使用 SaCa DataInsight 强大的 DSL 搜索语言,进行复杂的统计分析。
4、SaCa DataInsight 智能 DSL 统计分析
SaCaDataInsight 提供了强大,灵活的 DSL 查询分析语言,并且支持大数据情况下的并行计算,保障大数据下的查询性能。而且,通过 DSL 简单的语法,就可以实现复杂的数据查询和统计功能。
下面是针对通过 webhook 采集到的 GitLab 日志数据,进行统计分析的例子:
- 查询项目人员30天内创建的 issues 数量,并形成 issues 名称列表
* | where object_kind== “issue” | where user_username == “tangliang”

- 统计30天内 DataInsight 项目下所有子模块的 issues 数量,并进行排序
* | where project_namespace== “DataInsight” | where object_kind== “issue” | where object_attributes_action == “open” | group project_name | stat count(project_name) | sort count_project_name

- 统计30天内 DataInsight 项目下开发人员代码 commit 次数,并进行排序
* | where project_namespace== “DataInsight” | where object_attributes_noteable_type == “Commit” | group user_username | stat count(user_username) | sort count_user_username

5、SaCa DataInsight监控仪表盘
综合上述的 GitLab 日志查询结果,我们可以根据针对不同的需求,设计不同的图表,并灵活的进行图表排版和展示。SaCa DataInsight 提供了强大的在线图表编辑功能,每个 DSL 查询分析语句查询出的结果都可以通过编辑,以图表的形式展现出来,企业用可以对相关的多条 DSL 查询图表汇总成仪表盘,实现定制化的数据监控和展现。
SaCa DataInsight 在线图表设计工具的操作,如下图所示:


