JMeter在执行时,我们是看不到看不到综合场景下的每个接口的实时处理能力,而原生的实时查看结果是有些鸡肋的,如果想实时且直观地看到每个接口的处理能力,我比较推荐 JMeter+InfluxDB+Grafana 的方式,基本流程如下图所示

image-20210322143514612

InfluxDB 和 Grafana简单介绍

InfluxDB

InfluxDB 是 Go 语言编写的时间序列数据库,用于处理海量写入与负载查询。涉及大量时间戳数据的任何用例(包括 DevOps 监控、应用程序指标等)。我认为 InfluxDB 最大的特点在于可以按照时间序列面对海量数据时候的高性能读写能力,非常适合在性能测试场景下用作数据存储。

安装

  • 安装方式一:基于 CentOS 7.0,直接输入以下命令行即可

    1
    2
    3
    4
    5
    # wget htTPS://dl.influxdata.com/InfluxDB/releases/InfluxDB-1.1.0.x86_64.rpm
    # rpm -ivh InfluxDB-1.1.0.x86_64.rpm
    # systemctl enable InfluxDB
    # systemctl start InfluxDB
    # systemctl status InfluxDB (查看 InfluxDB 状态)
  • 安装方式二:基于Docker安装(推荐的方式),输入下面的命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 1. 查找镜像
    [root@lvjing ~]# docker search influxdb
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    influxdb InfluxDB is an open source time series datab… 1279 [OK]
    telegraf Telegraf is an agent for collecting metrics … 466 [OK]
    ……
    # 2. 拉去镜像
    [root@lvjing ~]# docker pull influxdb:1.7.10
    Using default tag: latest
    latest: Pulling from library/influxdb
    ……
    # 3.启动容器
    [root@lvjing ~]# docker run -d --name jmeter-influx -p 8083:8083 -p 8086:8086 influxdb:1.7.10
    cd5b2ae3d6f06cacc4f95d266139b8a76c40fef27987d67fff9b64627196b982

    注意:

    • 云服务,需要在安全组添加端口
    • InfluxDB 最新的版本(2.0.4)不支持以下的版本,因此重新拉取1.17.10的版本

基本使用

1
2
3
4
5
6
7
8
9
10
linux 命令行模式下进入数据库
# influx
查看库
# show databases
建库
create database jmeter;
使用该库
use jmeter
查看库下面的表
show measurements;

Docker安装完成InfluxDB后,进入到容器创建名为jmeter的数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@lvjing ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ab44d637061 grafana/grafana "/run.sh" 5 minutes ago Up 5 minutes 0.0.0.0:3000->3000/tcp grafana
7089ca3c8fe3 influxdb "/entrypoint.sh infl…" 10 minutes ago Up 10 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp jmeter-influx
# 进入容器
[root@lvjing ~]# docker exec -it 7089ca3c8fe3 bash
root@7089ca3c8fe3:/# influx
Connected to http://localhost:8086 version 1.7.10
InfluxDB shell version: 1.7.10
> create database jmeter
> show databases
name: databases
name
----
_internal
jmeter
>

使用 jmeter 库,select 查看数据,这个时候应该是没有数据的

1
2
3
4
> use jmeter
Using database jmeter
> select * from jmeter
>

Grafana

Grafana 是一个跨平台的开源的度量分析和可视化工具,纯 JavaScript 开发的前端工具,通过访问库(如 InfluxDB),展示自定义报表、显示图表等。大多时候用在时序数据的监控上。Grafana 功能强大、UI 灵活,并且提供了丰富的插件。

安装

  • 安装方式一:在 linux 命令行下直接输入以下内容即可:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 1. 下载 granafa
    # wget https://dl.grafana.com/oss/release/grafana-6.4.4-1.x86_64.rpm
    # 2. 安装,遇到需要输入的直接 y 就 ok;
    # yum install Grafana-6.4.4-1.x86_64.rpm
    # 3.启动 Grafana
    # systemctl start Grafana-server
    # systemctl enable Grafana-server
    # 4. 配置文件路径,一般保持默认配置即可。
    # /etc/Grafana/Grafana.ini
    # 5.查看防火墙状态,防止出现其他干扰问题,最好关闭
    # systemctl  status   firewalld.service

    登录访问 Grafana 访问:http://ip:3000(ip 自行替换,3000 为默认端口)
    默认账号/密码:admin/admin

  • 安装方式二:基于Docker安装(推荐的方式),输入下面的命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 1.查找镜像
    [root@lvjing ~]# docker search grafana
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    grafana/grafana The official Grafana docker container 1811
    kamon/grafana_graphite All in one image running StatsD, Graphite an… 154
    ……
    # 2. 拉取镜像
    [root@lvjing ~]# docker pull grafana/grafana
    Using default tag: latest
    latest: Pulling from grafana/grafana
    ……
    # 3.启动容器
    [root@lvjing ~]# docker run -d --name grafana -p 3000:3000 grafana/grafana
    3ab44d637061dde41914caa6cdab075f880e0c8244015218b1f3cbf709e249bf

    浏览器访问:http://ip:3000

    image-20210322145746161

    默认账号/密码:admin/admin,会提示修改密码

    image-20210322145920398

JMeter脚本设置

完成上面的安装,接下来我们要学习如何将JMeter结合InfluxDB和Granfana展示结果了

JMeter的测试数据导入influxDB

需要在Jmeter中使用Backend Listener配置

image-20210322155255524

查看Backend Listener中的配置

image-20210322155914411

主要配置说明:

  • implementation选择influxdb所对应的:

    image-20210322155806404

  • influxdbUrl:需要改为自己influxdb的部署ip和映射端口,我这里是部署在本地,所以就是localhost,端口是容器启动时映射的8086端口,db后面跟的是刚才创建的数据库名称

  • application:可根据需要自由定义,只是注意后面在grafana中选对即可

  • measurement:表名,默认是jmeter,也可以自定义

  • summaryOnly:选择true的话就只有总体的数据,false会将每个transaction都分别记录

运行验证

运行Jmeter脚本,然后再次在influxdb中查看数据,发现类似下面的数据说明输入导入成功:

image-20210322160828092

Granfana配置数据展示

  1. 添加数据源

    image-20210322161137341

  2. 搜索Influxdb数据源,进行添加

    image-20210322161256818

  3. 配置数据源

    image-20210322161444696

    数据源创建成功时会有绿色的提示:

    image-20210322161520004

  4. 导入模板

    image-20210322161612512

    模板导入分别有以下3种方式

    • 直接输入模板id号
    • 直接上传模板json文件
    • 直接输入模板json内容
  5. 下载模板,在Grafana的官网下载我们需要的展示模板:https://grafana.com/grafana/dashboards?dataSource=influxdb&search=jmeter

    image-20210322162525793

    image-20210322162556314

  6. 导入模板,我这里选择的是导入json文件的方式,导入后如下,配置好模板名称和对应的数据源,然后import即可

    image-20210322162656417

    确认信息,点击导入

    image-20210322162923019

    完成导入后,选择数据源,注意:刚进来由于没有选数据源会报很多错,这是不要担心,选择数据源就好了

    image-20210322164423295

查看执行成果

以上就已经完成了JMeter+InfluxDB+Granfana平台的搭建了,下面我们就可以运行JMeter查看执行的结果了

image-20210322165116357

image-20210322165137507

image-20210322165619604

image-20210322165649465