1、首先我们需要了解Jmeter
相信做it的没有人不知道jemter 就算没用过但是至少是听说过的
1.1 Jmeter的基本介绍
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