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

你可能感兴趣的:(Jenkins influxdb结合Grafana分析展示)