为 Gitlab 和 Jenkins 添加 InfluxDB 支持
概述
量化和监控对现在的开发运维工作的重要性是毋庸置疑的。在大肆鼓吹 DevOps 的今天,一体化的数据采集和可视化展示就尤为重要了。
为了能在同一视图下对 Jenkins 和 Gitlab 的操作进行监控,本来写了一些数据采集的脚本,后发现这两个系统都有实现向 InfluxDB 发送指标数据的能力,虽说结构和数据的细致程度可能不及定制脚本,但懒人方案始终是更快的解决办法。
非常对不起各位的是,下面的内容主要是堆代码了。
环境准备
Docker
为方便部署,这里采用 Docker 作为执行环境,过程中需要下载一些镜像,所以这里可能要配置代理或者其他途径来获得镜像文件并导入。
这里假设宿主机 IP 为 10.211.55.5
网络
因为几个组件之间互相需要访问,因此我们首先用如下命令创建一个虚拟网络:
docker network create devops
InfluxDB
启动
首先启动我们的 InfluxDB,因为 GitLab 只能连接 InfluxDB 的 udp 端口,而官方版本的镜像并未提供这一功能的方便设置,所以这里采用了一个第三方镜像。
这也是 DockerHub 上的常态 —— 嫡出被庶出灭了。
#!/bin/sh
docker run -d --name=influxdb \
--restart=always \
--network=devops \
-v /var/volume/influxdb:/data \
-p 20002:8083 \
-p 20003:8086 \
-p 20004:8089/udp \
-e UDP_PORT=8089 \
-e UDP_DB=gitlab \
appcelerator/influxdb
稍微做一下解释:
- 使用了上文创建的虚拟网络
- 镜像为 appcelerator/influxdb
- 宿主机上的
/var/volume/influxdb
目录被加载到容器的/data
目录,用于数据存储的持久化。 - 开放了三个端口:
- 8083:管理界面,可用浏览器访问
- 8086:HTTP API
- 8089:UDP 端口
- UDP 端口对应的数据库名为 gitlab
初始化
镜像成功启动之后,就可以使用浏览器打开 http://10.211.55.5:20002
,用户名密码缺省为 admin
,主机和端口分别为 10.211.55.5
和 20003
,这些填写结束后,就可以对 influxdb 进行管理了。
分别为 gitlab 和 jenkins 创建数据库:
CREATE DATABASE "gitlab"
CREATE DATABASE "jenkins"
Gitlab
启动
类似的,我们用如下脚本启动 Gitlab:
#!/bin/sh
docker run -d --name=gitlab \
--restart=always \
--network=devops \
-v /var/volume/gitlab/data:/var/opt/gitlab \
-v /var/volume/gitlab/conf:/etc/gitlab \
-v /var/volume/gitlab/log:/var/log/gitlab \
-p 21001:80 \
gitlab/gitlab-ce
跟前面的 InfluxDB 类似,或者说更加简单,连环境变量也不需要了。映射端口为 21001,加入同一个网络。
配置
浏览器登录页面之后,进入 URL: http://10.211.55.5:21001/admin/application_settings
,对 Gitlab 进行设置。
在 Metrics 一节,会看到 InfluxDB 的配置信息,选中 Enable 之后,只需要填写主机和 UDP 端口即可,因为有虚拟网络的配置,这里主机我们直接填写 influxdb,端口就是 8089 了。
变更配置后,利用 docker kill/rm
命令停止 gitlab,并重新启动。
验证
接下来我们可以选择一个项目进行 commit/push 操作,然后进入前面提到的 InfluxDB 控制台。
页面右上角的数据库选择 gitlab
,在查询输入框中输入 SHOW MEASUREMENTS
并执行,会看到 gitlab 在这一数据库中建立了各个数据表。
继续输入 select * from events
,会看到我们刚刚进行的提交记录。
Jenkins
启动
这里用了我自己的 Jenkins 镜像,完成的还是映射端口、挂接存储的任务。
#!/bin/sh
docker run -d --name=jenkins \
--restart=always \
--network=devops \
-v /var/volume/jenkins/data:/data/jenkins \
-v /var/volume/jenkins/maven:/data/maven \
-v /var/volume/jenkins/sonar:/data/sonar \
-v /var/volume/jenkins/kube:/data/kube \
-v /var/volume/jenkins/robot:/data/robot \
-p 21003:8080 \
dustise/jenkins
配置
启动之后访问http://10.211.55.5:21003
,对 Jenkins 进行配置。
http://10.211.55.5:21003/pluginManager/available
在这一界面查找 InfluxDB
插件,进行安装启用。
InfluxDB 插件启用之后,就可以在 http://10.211.55.5:21003/configure
找到其配置内容,这里也就是设置一个 InfluxDB 连接到我们之前启动的数据库。
点击 New InfluxDB Target
按钮,在弹出的输入项目中,URL 填写为 http://influxdb:8086
,用户名密码同上,数据库为 jenkins
。
retentionPolicy
一项可以清空。
exposeExceptions
这一项目表示,向 InfluxDB 汇报数据的任务如果失败,是否标记所属 Build 过程为失败。
验证
首先我们创建一个新的 FreeStyle 项目,内容很简单,执行一个 echo "Hello world"
。
在构建后步骤中,可以看到 Post Build Actions
新增了 Publish build data to InfluDB
的动作。
添加这一动作之后,选择我们刚才建立的 InfluxDB Target。
Job 创建完成,就可以开始 Build 了。
Build 成功之后,我们可以在 InfluxDB 控制台上,切换到 Jenkins 数据库,执行 SHOW MEASUREMENTS
,可以看到 Jenkins 创建的数据表。运行 SELECT * FROM jenkins_data
进行查询,就会看到我们刚才的 Build 数据。
Robot 等插件也会将结果插入 InfluxDB
展示
有了这些数据,我们就可以以项目为单位,利用 Grafana 或者其他可视化工具,对结果进行叠加和展示了。