Grafana+MySQL——Jenkins构建信息到Influxdb数据库再通过脚本导入MySQL数据库通过Grafana展示。数据库的时间戳转换、按月/周/天查询数据以及一些函数的使用

首先原本的需求是通过Grafana展示Jenkins构建信息,正好Jenkins插件中又InluxDB数据库的插件可以直接使用,所以刚开始就用这个时间序列数据库来展示,但是后边在Grafana页面调整展示数据时,发现虽然InluxDB的操作跟SQL相似,但有些字符串的截取做不到,比如我想要某个字段内数据的最后一位,sql就可以通过函数:substring_index(字段,' ',-1)来做,但在Influxdb就会报错,并且Influxdb数据库的函数大多都是对应时间,实用范围局限性,但Jenkins又没有这样的MySQL数据库插件,所以只能先通过脚本把Inluxdb数据库的信息导入到MySQL数据库,再通过Grafana来展示,来吧,展示~


先说环境,Influxdb、MySQL是在一个服务器上,Grafana、jenkins是在一个服务器,两个网络是同一网段是互通的。其中Grafana、Influxdb和Jenkins都是容器部署的,MySQL直接用的Zabbix的本地库。

再说过程,Jenkins下载插件InfluxDB Plugin,然后在全局配置里设置InfluxDB Targets,如下图

 配置好之后进到Job里在构建后操作步骤里会有下图选项:

Grafana Jenkins不用管,这个是在Grafana上创建的数据源的名字

 然后现在Job的构建信息就可以写入Influxdb数据库了,每次构建后都会写入相应的信息,可以去Influxdb数据库看一下:

ps:装完Influxdb数据库需要先创建一个库,表不用

 操作类似SQL,这里的表是measurements来表示

接下来写脚本把Influxdb数据库的信息导入MySQL数据库里:如下

第一次需要把注释掉的命令行打开,创建一张表,之后再次运行可以注释

import MySQLdb
import sys
import io

config = {'host':'localhost', //因为都是在同一台服务器所以就是本地//
          'port':3306,        //MySQL端口//
          'user':'',          //MySQL用户名和密码//
          'passwd':'',
          'charset':'utf8mb4',
          'local_infile':1
          }
conn = MySQLdb.connect(**config)
cur = conn.cursor()

def load_csv(filename,table,database='XXXXX'):   //数据库名称//
    file = io.open(filename, 'r',encoding='utf-8')
    reader = file.readline()
    b = reader.split(',')
    colum = ''
    for a in b:
        colum = colum + a + ' varchar(255),'
    colum = colum[:-1]
    create_sql = 'create table if not exists ' + table + ' ' + '(' + colum + ')' + ' DEFAULT CHARSET=utf8'
    data_sql = "LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n' IGNORE 1 LINES" % (filename,table)
    print data_sql
    cur.execute('use %s' % database)
    cur.execute('SET NAMES utf8;')
    cur.execute('SET character_set_connection=utf8;')
    #cur.execute(create_sql)
    n=cur.execute(data_sql)
    print n
    conn.commit()
    conn.close()
    cur.close()

if __name__ == '__main__':
    filename = sys.argv[1]
    table = sys.argv[2]
    load_csv(filename,table)

 关于执行这个脚本是在jenkins上新建一个job,然后通过command命令来执行,并且这个关联其他项目成为子项目来触发,如下:

 COMMAND:

//先进容器,然后把所有信息全部导入test1.csv
sudo docker exec influxdb influx -host  0.0.0.0 -port 8086 -database Influx数据库名 -execute 'SELECT * FROM jenkins_data ' -format csv >> test1.csv
//对比文件内容如有更新导入新的testnew.csv
sudo diff test.csv test1.csv > testnew.csv
//覆盖用于比对的test.csv,也等于直接删除test1
sudo mv test1.csv test.csv
//执行脚本把testnew.csv的内容写入MySQL数据库的sql_jenkins表
sudo python test.py testnew.csv sql_jenkins

如果没什么错误到这里就完成了,每一次Job的构建都会触发其下级那个带command的job构建,然后执行命令触发脚本写入新的构建信息。

关于Grafana通过MySQL的展示在这里:

Grafana+MySQL数据库的统计展示_white_1221的博客-CSDN博客

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

white_1221

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值