【干货最详细】Jmeter + Grafana + InfluxDB 性能测试监控平台搭建

 

1、首先我们需要了解Jmeter

相信做it的没有人不知道jemter 就算没用过但是至少是听说过的

1.1 Jmeter的基本介绍

官网:https://jmeter.apache.org/

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

1.2 Jmeter的作用

1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。

2.完全的可移植性和100% 纯java。

3.完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。

4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。

5.精心的GUI设计允许快速操作和更精确的计时。

6.缓存和离线分析/回放测试结果。

JMeter的高可扩展性

1.可链接的取样器允许无限制的测试能力。

2.各种负载统计表和可链接的计时器可供选择。

3.数据分析和可视化插件提供了很好的可扩展性以及个性化。

4.具有提供动态输入到测试的功能(包括Javascript)。

5.支持脚本编程的取样器(在1.9.2及以上版本支持BeanShell)。

1.3 jmeter的安装(忽略)直接看官方指导手册,免安装开箱即用

1.4 话不多说开始搭建

说起来Jmeter原生的监控确实太丑了。作为一名测试人员,有着一颗精益求精的心。之前看到用InfluxDB+Grafana对性能结果进行实时监控,把JMeter的压测结果写入InfluxDB,然后通过Grafana展示出来 ,确实漂亮。

看到有东西可以替代那原生的监控数据,果断亲自动手部署了一套

系统:Centos7

基础工作:安装docker 可联网

可用的jmeter(本地或是服务器均可)

数据库:influxdb(因为jmeter默认支持的是这个所以我们选择这个)

Jmeter原生的报告 性能监控平台(Jmeter+InfluxDB+Grafana)

1、不具备实时性

2、报告中的数据是测试时间段内的

3、展示不友好

4、操作起来繁琐(每次有新的报告还要另存为或者覆盖)

5、虽然有html的但是命令行每次都得输入也比较麻烦

1、实时展示Jmeter压测数据

2、数据范围可选

3、界面更友好

4、可以切换历史数据,具有持续性

 

附jmeter生成html报告的命令:

jmeter -n -t test.jmx -l 测试聚合报告.jtl -e -o 生成的html文件夹路径

示例:
jmeter -n -t C:\test.jmx -l C:\聚合报告.jtl -e -o C:\html

2、介绍一下InfluxDB(用于数据存储)

InfluxDB 是一个开源分布式时序、事件和指标数据库。
使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
InfluxDB 包括用于存储和查询数据,在后台处理ETL或监视和警报目的,用户仪表板以及可视化和探索数据等的API。

2.1 InfluxDB的主要功能

  • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);

  • 可度量性:你可以实时对大量数据进行计算;

  • 基于事件:它支持任意的事件数据;

2.2 InfluxDB的主要特点

  • 无结构(无模式):可以是任意数量的列
  • 可拓展的
  • 支持 min, max, sum, count, mean, median 等一系列函数,方便统计
  • 原生的 HTTP 支持,内置HTTP API
  • 强大的类 SQL 语法
  • 自带管理界面,方便使用

官网:https://portal.influxdata.com/downloads/

在这里我们用docker 安装InfluxDB   这里前提是已经安装的docker,没有安装docker 的可以参考 https://www.cnblogs.com/ningy1009/p/12910215.html 进行安装

2.3、首先 是下载influxdb 的docker 镜像

在 https://hub.docker.com/_/influxdb/

先查找一下现在的镜像,然后进行对应的下载安装

[root@kycxtest121 ~]# docker search influxdb
INDEX       NAME                                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/influxdb                                   InfluxDB is an open source time series dat...   1270      [OK]
docker.io   docker.io/telegraf                                   Telegraf is an agent for collecting metric...   463       [OK]
docker.io   docker.io/chronograf                                 Chronograf is a visualization tool for tim...   263       [OK]
docker.io   docker.io/tutum/influxdb                             InfluxDB image - DEPRECATED. See https://d...   220                  [OK]
docker.io   docker.io/arm32v7/influxdb                           InfluxDB is an open source time series dat...   18
docker.io   docker.io/prom/influxdb-exporter                     A server that accepts InfluxDB metrics via...   7
docker.io   docker.io/influxdb/influxdb                                                                          5
docker.io   docker.io/sillydong/influxdb-ui                      web ui for influxdb query                       5
docker.io   docker.io/arm64v8/influxdb                           InfluxDB is an open source time series dat...   4
docker.io   docker.io/vptech/influxdb-relay                      Replicate InfluxDB data for high availabil...   3                    [OK]
docker.io   docker.io/appcelerator/influxdb                      InfluxDB Docker image                           2                    [OK]
docker.io   docker.io/bitnami/influxdb                                                                           2
docker.io   docker.io/drpsychick/influxdb                        Influxdb multi-arch docker image based on ...   1
docker.io   docker.io/hassioaddons/influxdb-amd64                                                                1
docker.io   docker.io/matisq/influxdb                            TIG Stack - InfluxDB                            1                    [OK]
docker.io   docker.io/thedrhax/influxdb-timeshift-proxy          Proxy for InfluxDB that adds time shifting...   1                    [OK]
docker.io   docker.io/turbonomic/influxdb                                                                        1
docker.io   docker.io/amd64/influxdb                             InfluxDB is an open source time series dat...   0
docker.io   docker.io/bitnami/influxdb-relay                     Bitnami InfluxDB Relay Docker Image             0
docker.io   docker.io/digitalwonderland/influxdb                 Latest InfluxDB - clusterable                   0                    [OK]
docker.io   docker.io/forestscribe/influxdb-docker-collect       collect docker stats from mesos and transm...   0                    [OK]
docker.io   docker.io/map3/influxdb                                                                              0
docker.io   docker.io/monasca/influxdb-init                                                                      0
docker.io   docker.io/teamidefix/influxdb-boshrelease-pipeline                                                   0
docker.io   docker.io/teamidefix/influxdb-deployment-pipeline                                                    0
[root@kycxtest121 ~]#
docker pull influxdb

拉取后确认镜像是否存在

[root@kycxtest121 ~]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
docker.io/sonarqube                                               latest              e9571d789e3a        12 days ago         494 MB
registry.cn-qingdao.aliyuncs.com/metersphere/metersphere          v1.7.0              a3874600f904        5 weeks ago         416 MB
registry.cn-qingdao.aliyuncs.com/metersphere/ms-data-streaming    v1.7.0              e1959d362249        5 weeks ago         193 MB
registry.cn-qingdao.aliyuncs.com/metersphere/ms-node-controller   v1.7.0              ad8cf5f3adb1        5 weeks ago         156 MB
docker.io/grafana/grafana                                         latest              13afb861111c        7 weeks ago         187 MB
docker.io/influxdb                                                latest              0454d5d215cc        7 weeks ago         307 MB

接下来开始启动容器

docker run -d -p 8086:8086 --name influxdb influxdb
-d:容器在后台运行
-p:将容器内端口映射到宿主机端口,格式为 宿主机端口:容器内端口;8086是influxdb的HTTP API端口
–name:容器名称

这时候我们已经在docker中启动了influxdb,使用的是默认配置项和默认的数据存储空间,并且没有在docker中的influxdb上创建数据库,这样的docker很显然是不能用于生产环境的,因此我们要解决两个问题:

挂载宿主机器上的配置,存储空间等
手动创建一个数据库
针对上面的问题,我们继续
注意:influxdb在1.0版本以下的时候是支持在端口8083上web管理的,之后的版本官方去掉了这个功能

2.4 配置使用docker-influxdb

1、创建宿主目录
创建宿主机上的influxdb环境目录

mkdir -p /home/influxdb/data /home/influxdb/conf /home/influxdb/meta /home/influxdb/wal
[root@kycxtest121 influxdb]# ll
总用量 0
drwxr-xr-x. 2 root root 27 2月   2 10:17 conf
drwxr-xr-x. 2 root root  6 2月   2 10:08 data
drwxr-xr-x. 2 root root  6 2月   2 10:08 meta
drwxr-xr-x. 2 root root  6 2月   2 10:08 wal

2、拷贝配置
1)可以先启动influxdb的docker环境,从docker中拷贝配置,这种方式可以在没有influxdb环境时做,简单操作步骤:
查看influxdb的容器id:

docker ps -a

拷贝配置到/home/influxdb/conf下:

docker cp 容器ID或容器name:/etc/influxdb/influxdb.conf /home/influxdb/conf/influxdb.conf

3、启动容器

docker run -d -p 8083:8083 -p 8086:8086 --name influxdb -v /home/influxdb/conf/influxdb.conf:/etc/influxdb/influxdb.conf -v /home/influxdb/data:/var/lib/influxdb/data -v /home/influxdb/meta:/var/lib/influxdb/meta -v /home/influxdb/wal:/var/lib/influxdb/wal influxdb

说明:
-p  将宿主的8083/8086端口(:左)映射到docker镜像的8083端口(:右),8083端口为web管理端,默认不开启
-v  将宿主的目录(:左)挂载到docker镜像的目录(:右),注意右边的路径,是固定的

4、查看容器状态

[root@kycxtest121 influxdb]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
ec2065477b66        influxdb            "/entrypoint.sh in..."   4 seconds ago       Up 3 seconds        0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

5、进入容器

docker exec -it influxdb /bin/bash

6、启动influxdb 客户端创建数据库

root@ec2065477b66:/# influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
> show databases;
name: databases
name
----
telegraf
_internal
> create database jmeter;
> show databases;
name: databases
name
----
telegraf
_internal
jmeter
>

7、安装完默认是没有用户的

#安装完之后,默认无用户,因此可以直接使用如下命令进行查看:


> show users;
user admin
---- -----
>

这里我们先暂时不创建用户后续用到再进行创建

3、开始在jmeter 配置influxdb的链接

我这里是启动本机的jmeter(windows环境)

1、添加后端监听器

2、选择influxdb

3、配置influxdb 的基本信息

4、运行jmeter 验证influxdb中是否收集到 测试数据

这里以百度获取天气的接口作为测试demo

5、再次进入influxdb中查看,发现多了两个表,查询jmeter 表中的数据,发现多了百度获取天气的数据,说明数据收集成功

> SHOW measurements;
name: measurements
name
----
events
jmeter
>
> select * from jmeter;
name: jmeter
time                application   avg count countError endedT hit max maxAT meanAT min minAT pct90.0 pct95.0 pct99.0 rb    sb  startedT statut transaction
----                -----------   --- ----- ---------- ------ --- --- ----- ------ --- ----- ------- ------- ------- --    --  -------- ------ -----------
1615278150068000000 influxdb_test                      0              0     0          0                                       0               internal
1615278150354000000 influxdb_test 174 1     0                 1   174              174       174     174     174     22778 256          all    all
1615278150355000000 influxdb_test 174 1                           174              174       174     174     174     22778 256          all    百度获取天气
1615278150356000000 influxdb_test 174 1                           174              174       174     174     174                        ok     百度获取天气
1615278150356000000 influxdb_test                      1              1     1          1                                       1               internal
>

5、开始安装部署Grafana

1、下载镜像

docker pull grafana/grafana

2、镜像


docker run -d --name=grafana --link=influxdb:influxdb -p 3000:3000 grafana/grafana:latest


# link 就是要指向我们的influxdb镜像 否则无法使用

3、查看镜像

[root@kycxtest121 ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
db9bbd6e25e1        grafana/grafana:latest   "/run.sh"                8 seconds ago       Up 7 seconds        0.0.0.0:3000->3000/tcp                           grafana
ec2065477b66        influxdb                 "/entrypoint.sh in..."   49 minutes ago      Up 49 minutes       0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb
6efa4c7ebe25        sonarqube                "bin/run.sh bin/so..."   7 days ago          Up 7 days           0.0.0.0:9001->9000/tcp                           sonarqube

4、进入grafana web页面

http://ip:3000/login

5、登录 并开始配置influxdb  默认admin/admin  登录后会提示修改密码

进入后

 

 3、开始配置

 

 

测试连接提示成功

接下来开始 配置展示面板

查看所有展示面板 

https://grafana.com/grafana/dashboards

这里我们选择  id 为5496的 

https://grafana.com/grafana/dashboards/5496

 

 

原文地址:https://www.cnblogs.com/ningy1009/p/14505094.html