Jenkins influxdb结合Grafana分析展示

我们通过Jenkins的influxdb插件,可以把jenkins job和Sonarqube的相关信息和构建结果存库。然后通过Grafana进行视图展现,这样就实现了对jenkins的Job监控和分析。

步骤如下:

1、在服务器上安装influxdb(可以连grafana一起安装,写个批处理同时启动grafana和influxdb)

#!/bin/bash

# Author:smooth

# Date:2019-03-14

InstanceCount=1

Cur_Dir=$(cd "$(dirname "$0")"; pwd)

influxdb_v=influxdb-1.5.1 #nfluxdb所在目录

grafana_v=grafana-6.0.1 #grafana所在目录

chmod -R 777 $Cur_Dir/$influxdb_v/bin

chmod -R 777 $Cur_Dir/$grafana_v/bin

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "----Current directory is " $PWD

# 检查$ProcessName实例是否已经存在

#while [ 1 ] ; do

#$PROCESS_NUM获取指定进程名的数目

PROCESS_NUM=`ps -ef | grep "influxd" | grep -v "grep" | wc -l`

if [ $PROCESS_NUM -lt $InstanceCount ];

then

StopCount=`expr $InstanceCount - $PROCESS_NUM `

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "----influxd service [total $StopCount] was not started."

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "----Starting influxd service[total $StopCount] ."

(nohup $Cur_Dir/$influxdb_v/bin/influxd -config $Cur_Dir/$influxdb_v/influxdb.conf) >>/dev/null 2>&1 &

else

PROCESS_PID=`pidof -s influxd | awk '{print $1}'`

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "---kill influxd [pid $PROCESS_PID]"

pidof -s influxd | awk '{print $1}' | xargs kill -9

sleep 2

echo "----Restart influxd service[total $InstanceCount]."

(nohup $Cur_Dir/$influxdb_v/bin/influxd -config $Cur_Dir/$influxdb_v/influxdb.conf) >>/dev/null 2>&1 &

fi

PROCESS_NUM=`ps -ef | grep "grafana-server" | grep -v "grep" | wc -l`

if [ $PROCESS_NUM -lt $InstanceCount ];

then

StopCount=`expr $InstanceCount - $PROCESS_NUM `

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "----grafana service [total $StopCount] was not started."

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "----Starting grafana service[total $StopCount] ."

cd $Cur_Dir/$grafana_v/bin

(nohup ./grafana-server) >>/dev/null 2>&1 &

else

PROCESS_PID=`pidof -s grafana-server | awk '{print $1}'`

echo -n `date +'%Y-%m-%d %H:%M:%S'`

echo "---kill grafana-server [pid $PROCESS_PID]"

pidof -s grafana-server | awk '{print $1}' | xargs kill -9

sleep 2

echo "----Restart grafana service[total $InstanceCount]."

cd $Cur_Dir/$grafana_v/bin

(nohup ./grafana-server) >>/dev/null 2>&1 &

fi

sleep 2

2、在Jenkins上安装influxdb插件,并配置influx db的数据库信息(在Jenkins的系统管理中配置)

3、在Jenkins 的单个job上配置 influx db的插件(具体见https://wiki.jenkins.io/display/JENKINS/InfluxDB+Plugin

4、每次的 Jenkins Job的构建结果就会存库

5、如果需要获取sonarqube_data就要求jenkins配好sonarqube,并且项目的权限是公开(私有的话数据发送不到influxdb)

6、通过grafana读取 influxdb 的方法,直接进行查询操作,类sql

对于获取到的数据,通过influxdb的连接工具InfluxDB Studio可以看到,一般包括这三个库。

有了这三部分数据,我们就可以去配置Grafana,展现奇迹的时候了。首先我们需要Grafana上系统设置中,以【Data Sources / InfluxDB】创建数据源。然后就是配置Dashboard和添加统计面板。

(一) jenkins_data展示

这块数据包括的是所有jenkins的构建数据,在利用这部分数据时,我们建议是创建项目名称变量(projectName),这个变量就是Jenkins的Job Name。

然后我们需要获取项目构建成功和失败的数据,首先想到的是饼图,但是Grafana默认是不带有饼图的,可以通过命令 grafana-cli plugins install grafana-piechart-panel 进行安装(安装完后需要重启grafana)。

有了饼图,就可add Panel时选择视图插件Pie Chart,配置上三条SQL:

SELECT count("build_result") FROM "jenkins_data" WHERE ("build_result" = 'SUCCESS' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)

第一条语句配置ALIAS BY构建成功。第二条语句和第一条一样,就是将条件"build_result" = 'FAILURE',ALIAS BY构建失败;第三条语句也一样,就是将条件"build_result" = 'ABORTED',ALIAS BY构建中断。

最后将Visualzation配置如下:

然后配置完后预览效果如下:

 除了饼图,我们可以来个Gauge和Graph,来展现项目的健康指数和健康趋势。

Gauge配置SQL如下:

SELECT "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter

Gauge的Visualization配置如下(显示Current值,五色Thresholds配置):

Graph配置SQL如下:

SQL一:SELECT "build_time" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC,ALIAS BY构建耗时,设置Y轴的单位为Time->毫秒(ms)。

SQL二:SELECT "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC,ALIAS BY健康指数。

我们在Graph的Visualization中对第二个SQL进行差异化样式配置:

 最后显示的效果图如下:

除了饼图和Graph,我们也可以来个Table,把influxdb的jenkins_data数据显示出来。配置SQL如下(FORMAT AS Table):

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

 (二)changelog_data展示

这部分数据显示的是来自己SVN或Git提交的代码修改信息,所以依赖于这两插件推送的数据。

一样是配置table,显示列表信息,SQL如下(SQL配置可以比较灵活,以下只是供参考):

SELECT "affected_paths", "build_number", "commit_count", "commit_messages", "culprits", "display_name" FROM "changelog_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY "project_name" ORDER BY time DESC

另外我们可以灵活配置列名,方法有两种,一种是用AS的方式:

另一种是直接配置列的样式:

配置完后的显示效果如下:

 (三)sonarqube_data展示

这部分数据是由sonarqube插件推送过来的,所以需要确保装好sonarqube、SonarScanner或SonarScanner for MSBuild等插件并正常扫描代码(另外要求sonarqube对项目的权限是公开的才行)。

首先我们准备个饼图来展现各项目的代码行数,配置SQL为:SELECT "lines_of_code" FROM "sonarqube_data" WHERE $timeFilter GROUP BY "project_name",ALIAS BY为$tag_project_name。统计效果如下:

然后我们再做个代码行数变化趋势图(用Graph图),配置SQL为:SELECT "lines_of_code" AS "代码行数" FROM "sonarqube_data" WHERE $timeFilter GROUP BY "project_name",ALIAS BY为【代码行数$tag_project_name】。统计效果如下:

 最后我们配一个整体的sonarqube_data数据表,用talbe控件来实现,对应SQL如下:

SELECT "project_path" AS "项目名称", "blocker_issues" AS "阻断问题", "critical_issues" AS "严重问题", "major_issues" AS "重要问题", "minor_issues" AS "次要问题", "info_issues" AS "提示问题", "display_name" AS "构建名号", "lines_of_code" AS "代码行数" FROM "sonarqube_data" WHERE $timeFilter ORDER BY time DESC LIMIT 20

我们可以在列中添加URL链接,实现跳转到sonarqube页面上进行总览报告查看(通过id=$_cell可通过列值来访问项目名跳转到指定项目的sonarqube页面):

 我们还可以进行颜色配置来对代码问题数量进行三色预警,也可以通过URL配置跳转到具体的sonarqube查看代码问题:

配置完后的效果如下:

 以上列表中的链接,可以直接跳转到SonarQube页面,进行代码问题分析:

这样我们就实现了通过Grafana+InfluxDB来监视Jenkins的Job构建情况,以及分析代码质量,查看问题趋势变化,而且这样的配置是非常灵活的,即可以做到高大上,又能够辅助项目的管理和控制,非常实用。

版权声明:本文为博主原创文章,未经博主允许不得转载。博客 https://smooth.blog.csdn.net//article/details/88551268

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