之前压测一直用的是jmeter自带的聚合报告来分析结果,但是对tps,qps等性能指标进行页面可视化显示效果不是很好,so,引入了grafana+influxdb,会有一个非常炫酷的可视化页面和全面的视图分析。

在搭建之前,先简单了解下grafana和influxdb是什么。

influxdb简介

Influx DB是一个开源时间序列数据库。那么问题来了,什么叫时序数据库?想详细了解可以查看这篇文章

influxdb有三个特性

  1. Time Series (时间序列):可以使用与时间有关的相关聚合函数
  2. Metrics(度量):可以实时对大量数据进行计算
  3. Eevents(事件):它支持任意的事件数据

它的核心概念(以mysql作为参照):

  1. database相当于mysql中的database
  2. measurement相当于mysql中的表
  3. point相当于mysql中的行
  4. tag相当于mysql中的索引,只支持字符串类型
  5. field相当于mysql中的列,支持多种类型
  6. retention policy保存策略,这是influxdb特有的属性,rp指定数据在influxdb中的保存时间,时间已过,influxdb会自动清除数据。influxdb不支持修改语句,虽然有删除语句,但是不建议使用
  7. continuous queries 特色功能之一,相当于定时任务。

一些基本语法(其实和mysql差不多,注意table是measurement):

  1. create database “db_name” #创建数据库
  2. show databases #显示所有的数据库
  3. drop database “db_name” #删除数据库
  4. use db_name #使用数据库
  5. show measurements #显示该数据库中所有的表
  6. insert test,host=127.0.0.1,monitor_name=test count=1 #创建表,直接在插入数据的时候指定表名
  7. drop measurement “measurement_name” #删除表
  8. select * from access_list #查询access_list表

它具有的以上特点让其与数据实时监控形成完美契合。成为开发监控系统的首选数据库之一。

grafana简介

grafana是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。

  1. 面板:包含图形、singlestat 、表、热图、提醒清单,文本、仪表板列表
  2. 仪表板功能:变量(variables)、注释(animation)、文件夹、播放列表、搜索、分享、时间范围、进出口、脚本仪表板,JSON模型等
  3. 数据源:Graphite、Promthus、influxDB、mysql等
  4. 警报:引擎规则、度量、通知

更多页面详细介绍,可以查看官方文档

话不多说,下面我们开始部署~

部署流程

我们采用方便快速的docker进行部署。

docker分别拉取grafana和influxdb镜像

1
docker pull influxdb:1.7.10
1
docker pull grafana:6.6.2

创建一个自定义网络,将两个容器加入到这个网络中,那么这两个容器就能通过名字互相通信

1
docker network create grafana

运行容器

1
docker run -d --name=influxdb --network grafana -p 8086:8086 -v   ${PWD}/influxdb/:/var/liv/influxdb/ influxdb:1.7.10

${PWD}/influxdb/:/var/liv/influxdb/将容器里/var/liv/influxdb/目录下挂载到宿主机的${PWD}/influxdb/的目录下

进入influxdb容器内,创建一个数据库

1
2
3
docker exec -it influxdb influx
# 进入容器后,创建一个名为jmeter的数据库
create database jmeter;

查看两个容器已经启动

登录grafana网站进行配置(默认账号密码为admin,admin)

数据源配置

jmeter支持两种:graphite和influxdb

数据同步时间5秒,jmeter隔5秒写入数据到db中,这里设置grafana间隔5秒读取db中的数据。

面板配置

导入jmeter的面板地址: https://grafana.com/grafana/dashboards/5496

也可以下载后导入json文件。

jmeter配置

配置完成,发起接口请求即可在grafana实时显示接口相关图表

数据流转

最后,我们来捋一捋,从jmeter开始发起请求到最后在grafana上的数据展示,响应数据是如何进行流转的。

jmeter

jmeter使用命令行发起接口请求后,会产生一个**.jtl**的文件,里面记录着每个请求的一些线程数、响应码、响应时间等信息。

influxdb

在jmeter中添加了后端监听器,并选择了通过inlufxdb实现后端监听,因此,步骤1中的响应数据,会写入到influxdb的数据库中。

进入influxdb容器内,查看数据

使用select * from jmeter查看数据

记录了每个请求的详细响应信息。

grafana

由于我们配置的数据源是influxdb,因此面板展示的所有数据其实都是从influxdb的jmeter这个数据库中拿的。

so,整个数据流转,即jmeter产生jtl—>存储到influxdb—>grafana从influxdb拿数据。