SaCa DataInsight —— GitLab“多维度”日志分析

在项目研发管理过程中,使用仓库管理系统,可以轻松有效的对项目代码进行管控,这已经是大家的共识。像 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 在线图表设计工具的操作,如下图所示:

 

相关产品

2018-12-12T14:25:50+00:00