使用Docker+Grafana+InfluxDB可视化展示Jenkins构建信息

20210410 Update docker-compose.yml.

环境搭建完成后,最终展示效果如下图所示:

docker-compose.yml

内容如下:

version: '3'
services:
    influxdb:
        image: influxdb:1.8.0
        container_name: influxdb
        restart: always
        ports:
            - "8086:8086"
        volumes:
            - /opt/docker/influxdb:/var/lib/influxdb
            - /etc/localtime:/etc/localtime
        hostname: influxdb
        environment:
            - ADMIN_USER=root
            - INFLUXDB_INIT_PWD=YOUR_PWD
            - PRE_CREATE_DB=jenkins
    chronograf:
        image: chronograf:1.8
        container_name: chronograf
        restart: always
        ports:
            - 8888:8888
        volumes:
            - /opt/docker/chronograf:/var/lib/chronograf
    grafana:
        image: grafana/grafana:7.3.0
        container_name: grafana
        restart: always
        links:
            - influxdb:influxdb
        ports:
            - "3000:3000"
        user: root
        volumes:
            - /etc/localtime:/etc/localtime
            - /opt/docker/grafana/grafana-data:/var/lib/grafana
            - /opt/docker/grafana/grafana-logs:/var/log/grafana
        environment:
            - INFLUXDB_HOST=influxdb
            - INFLUXDB_PORT=8086
            # 设置管理员登录密码, 默认为admin, 首次登录时需要进行修改
            - GF_SECURITY_ADMIN_PASSWORD=YOUR_PWD
            # 设置要安装的插件
            - GF_INSTALL_PLUGINS=grafana-piechart-panel

搭建过程中,有几个需要注意的地方,下面来稍微说说。

  1. 不需要额外为influxDB容器开放8083端口,这是因为从InfluxDB 1.3以及之后的版本,已经取消了自带的web管理页面了,取而代之的是使用Chronograf;
  2. 创建Chronograf容器是可选的,容器启动后,访问:HTTP://IP:8888,可以进入chronograf 控制台页面,如下:
    第一项Connection URL不要用localhost,可能出现访问不通的情况,Username 和 Password可以保持空白后面再设置,Telegraf的默认数据库名称为telegraf,直接点击按钮下一步就好。
  3. influxdb 容器启动成功后,进入容器内的/usr/bin目录,这里面存放了Influxdb相关的工具,如下。 当然也可以在Chronograf控制台页面进行数据库的CURD相关操作。
docker exec -it influxdb bash
cd /usr/bin
find | grep influx
./influx_stress
./influx_inspect
./influx
./influxd
./influx_tsm

# 查看版本
./influx -version
InfluxDB shell version: 1.8.0

# 进入Influxdb客户端命令行
./influx

# 创建jenkins数据库
`CREATE DATABASE  jenkins
  1. grafana这里使用了7.3.0版本,如果从低版本迁移到高版本会有权限问题(坑!!),详见:https://grafana.com/docs/grafana/latest/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later。 另外,考虑到要为Jenkins做一个构建成功率和构成失败率统计,所以为Grafana预安装了饼图插件,相关的方法在上面的链接中也有详细介绍。

Jenkins

Jenkins需要安装influxdb插件,承担数据采集的角色,在项目构建完成后,将本次构建信息推送到数据库中,后续Grafana配置好数据源后,就可以将数据进行可视化展示。

插件安装完成后,进入系统配置页面,设置下InfluxDB Targets:


image.png

配置保存成功后,进入项目配置页面,添加构建后操作。

当项目构建完成后,会自动上报十分详细的构建信息到数据库中,可以看到一些数据表已经自动被创建了。

Grafana目录代理(可选)

使用Nginx为grafana做了代理,以实现在公网下通过域名+"/grafana"的形式访问,点击查看官方文档,步骤如下:

  1. 修改Nginx配置(nginx.conf),红色部分为新增,proxy_pass后面一定要有"/"(用以去掉/grafana/匹配本身)
server {

listen 80;
root /usr/share/nginx/www;
index index.html index.htm;

location /grafana/ {
proxy_pass http://localhost:3000/;
}
}
  1. 修改grafana配置(grafana.ini),由于grafana以容器形式启动,所以先拷贝配置文件到宿主机
 docker cp grafana:/etc/grafana/grafana.ini /opt/docker/grafana-data/etc

然后修改配置文件中的以下内容:

[server]
domain = 你的域名
root_url = %(protocol)s://%(domain)s/grafana/

配置文件修改完成后,重启容器再挂载宿主机配置文件目录到容器中。

docker kill grafana
docker rm grafana
docker run  --user root -d --name grafana -p 3000:3000  -v /opt/docker/grafana-data/etc:/etc/grafana/ -v /opt/docker/grafana-data/grafana:/var/lib/grafana  grafana:mc
  1. reload nginx

配置Grafana 数据源

数据源可以配置多个,配置项和Jenkins中一致就可以了。

Jenkins Dashboard

Grafana提供了导入Dashboards模板的功能,在官网可以搜索很多别人已经实现的模板,我们只需要按需导入即可,十分方便,这里以Jmeter为例,进入官网 Grafana Dashboards 搜索页面,点击搜索结果中的第一条:


在页面右侧可以看到模板ID为5496,复制此ID,进入Grafana控制台页面,点击左侧的加号,选择Import然后输入模板ID,并导入即可,导入成功后,会自动新建一个 Jmeter Dashboard。

这里尝试去搜索Jenkins相关的模板,发现并没有符合我们要求的模板,所以后续是通过手动配置的方式来完成的,需要手动创建一个名为Jenkins的Dashboard,然后在进行后续操作。

创建环境变量
采集到的数据是包括所有jenkins项目的构建数据,在利用这部分数据时,可以创建项目名称变量(projectName),这个变量实际就是Jenkins的Job Name,配置如下:

保存完成后,在Dashboard页面,会发现多了一个名为"项目名称"的筛选项:

后续配置Panel时,在InfluxQL中可以通过$projectName的方式使用这个自定义的变量。

**Add Panel **
下面是一些我用到视图类型以及对应的InlfuxQL,Visualization配置可以按照喜欢自行调整。

  • Pie Chart
# Title构建成功
SELECT count("build_result") FROM jenkins_data  WHERE ("build_result" = 'SUCCESS' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)

# Title 构建成功
SELECT count("build_result") FROM jenkins_data  WHERE ("build_result" = 'FAILURE' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)
  • Graph
# Title  构建耗时
SELECT "build_time" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC tz('Asia/Shanghai')
  • Gauge
# Title 健康指数
SELECT project_build_health FROM jenkins_data  WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter
  • Table
# Title 构建记录
SELECT "build_agent_name", "build_number", "build_result", "build_status_message", "build_time", "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY "project_name" ORDER BY time DESC


除了Jenkins构建结果外,Jmeter压测结果也可以通过后置处理器非常方便的采集到InfluxDB中,并利用Grafana进行展示。
To be continued....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容