美文网首页自动化测试
Jenkins influxdb结合Grafana分析展示

Jenkins influxdb结合Grafana分析展示

作者: smooth00 | 来源:发表于2019-03-18 10:53 被阅读12次

    我们通过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分析展示

        本文链接:https://www.haomeiwen.com/subject/ynxvmqtx.html