之前压测一直用的是jmeter自带的聚合报告来分析结果,但是对tps,qps等性能指标进行页面可视化显示效果不是很好,so,引入了grafana+influxdb,会有一个非常炫酷的可视化页面和全面的视图分析。
在搭建之前,先简单了解下grafana和influxdb是什么。
influxdb简介
Influx DB是一个开源时间序列数据库。那么问题来了,什么叫时序数据库?想详细了解可以查看这篇文章。
influxdb有三个特性:
- Time Series (时间序列):可以使用与时间有关的相关聚合函数
- Metrics(度量):可以实时对大量数据进行计算
- Eevents(事件):它支持任意的事件数据
它的核心概念(以mysql作为参照):
- database相当于mysql中的database
- measurement相当于mysql中的表
- point相当于mysql中的行
- tag相当于mysql中的索引,只支持字符串类型
- field相当于mysql中的列,支持多种类型
- retention policy保存策略,这是influxdb特有的属性,rp指定数据在influxdb中的保存时间,时间已过,influxdb会自动清除数据。influxdb不支持修改语句,虽然有删除语句,但是不建议使用
- continuous queries 特色功能之一,相当于定时任务。
一些基本语法(其实和mysql差不多,注意table是measurement):
- create database “db_name” #创建数据库
- show databases #显示所有的数据库
- drop database “db_name” #删除数据库
- use db_name #使用数据库
- show measurements #显示该数据库中所有的表
- insert test,host=127.0.0.1,monitor_name=test count=1 #创建表,直接在插入数据的时候指定表名
- drop measurement “measurement_name” #删除表
- select * from access_list #查询access_list表
它具有的以上特点让其与数据实时监控形成完美契合。成为开发监控系统的首选数据库之一。
grafana简介
grafana是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
- 面板:包含图形、singlestat 、表、热图、提醒清单,文本、仪表板列表
- 仪表板功能:变量(variables)、注释(animation)、文件夹、播放列表、搜索、分享、时间范围、进出口、脚本仪表板,JSON模型等
- 数据源:Graphite、Promthus、influxDB、mysql等
- 警报:引擎规则、度量、通知
更多页面详细介绍,可以查看官方文档。
话不多说,下面我们开始部署~
部署流程
我们采用方便快速的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 | docker exec -it influxdb influx |
查看两个容器已经启动
登录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拿数据。