本次部署说明:
InfluxDB+Grafana 部署在Azure 云端 linux(CentOS)
Jmeter部署在本地windows
一、背景
在使用jmeter做性能测试的时候,监控系统性能的时候,无论是使用插件还是报告生成,都比较麻烦,比如监控服务的tps信息。为了能够实时看到比较美观的图表,我们可以通过jmeter的AbstractBackendListenerClient类,使用Backend Listener发送数据到数据库的存储实时结果。
JMeter 3.2的Backend Listener中引入了 InfluxDBBackendListenerClient允许使用UDP或HTTP协议将统计指标发送到InfluxDB。
此类提供的功能:
- 实时数据
- 漂亮图表
- 能够对比2个以上的测试计划
- 能够向图表添加注释
- 只要jmeter产生相同的Backend,就可以存储监控数据
二、Influxdb简介
InfluxDB是用Go语言编写的高性能、高可用的分布式时序数据存储数据库,无其他依赖,安装简单快速。该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。
- 无结构(无模式):可以是任意数量的列
- 可以设置metric的保存时间
- 支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计
- 支持存储策略:可以用于数据的删改。(influxDB没有提供数据的删除与修改方法)
- 支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量。
- 原生的HTTP支持,内置HTTP API
- 支持类似sql语法select * from mysql.user
- 支持设置数据在集群中的副本数
- 支持定期采样数据,写入另外的measurement,方便分粒度存储数据。
schemaless: 结构型数据库类似Mysql需要先定义列,influxdb无需预先定义,无结构的
与传统数据库中的名词比较
influxDB中的名词 | 传统数据库的概念 |
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据
|
三、InfluxDB下载安装
下载
[root@jmeter ~]#wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm --no-check-certificate
安装
[root@jmeter opt]# rpm -ivh influxdb-1.7.0.x86_64.rpm
修改influxDB配置文件
[root@jmeter opt]# vim /etc/influxdb/influxdb.conf (在配置文件中找到graphite配置项,去掉前面的“#”号)
[[graphite]]
# Determines whether the graphite endpoint is enabled.
enabled = true
database = "jmeter" # 数据库名称
retention-policy = ""
bind-address = ":2003" # 端口
protocol = "tcp"
consistency-level = "one"
修改以下信息
[meta]
dir = "/usr/local/influxdb/meta" #存放最终存储的数据,文件以.tsm结尾
[data]
dir = "/usr/local/influxdb/data" #存放数据库元数据 wal
wal-dir = "/usr/local/influxdb/wal" #存放预写日志文件
修改HTTP端口信息
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true
# The bind address used by the HTTP service.
bind-address = ":8086"
创建目录更新权限
[root@jmeter ~]#mkdir -p /usr/local/influxdb/
[root@jmeter ~]#chown -R influxdb:influxdb /usr/local/influxdb/
修改完成之后,可以使用以下命令启动influxDB服务
两种方法:
1、[root@jmeter ~]# influxd -config /etc/influxdb/influxdb.conf
2、添加到环境变量中(推荐)
[root@jmeter ~]# vim /etc/profile
export INFLUXDB_CONFIG_PATH=/etc/influxdb/influxdb.conf
[root@jmeter ~]# source /etc/profile
[root@jmeter ~]# influxd &
influxDB的tcp端口:8088
查看端口有没有起来
[root@jmeter ~]# netstat -anp|grep 8088
influxDB数据库操作
[root@jmeter ~]# influx # 登录数据库
Connected to http://localhost:8086 version 1.6.0
InfluxDB shell version: 1.6.0
> show databases # 查看数据库
name: databases
name
----
_internal
jmeter
> create database "jmeter" # 创建数据库
> use jmeter #切换数据库
Using database jmeter
> create user "admin" with password '123456' with all privileges # 创建管理员权限的用户
四、Grafana下载安装配置
Grafana是一款可视化工具,大多使用在时序数据的监控方面,如同Kibana类似。Grafana的UI更加灵活,有丰富的插件,功能强大,数据源可以使用zabbix、influxdb等
grafana的下载和安装。
下载:wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1.x86_64.rpm
安装插件:
yum -y install fontconfig
yum -y install urw-fonts
安装grafana:rpm -ivh grafana-5.2.1-1.x86_64.rpm
启动:
[root@jmeter ~]# service grafana-server start
http://40.XX.XX.200:3000/login (grafana服务的监听端口 3000) grafana的默认用户名密码都是admin,第一次登录会要求更改密码
创建influxDB数据源
看到下图,说明保存成功、连接成功。
导入Dashboard模版
官网模版库:https://grafana.com/dashboards
搜索看板模版
下载
导入模板
加载模板
选择模板数据源
重启Jmeter
五、Jmeter 配置
创建一个测试计划,并添加Backend Listenter
执行效果
注意:
2003端口:Jmeter往数据库发数据的端口
8086端口:Grafana从数据库取数据的端口
3000端口:Grafana自身服务端口
安装配置好以后,执行压测脚本,如果数据库还是没有数据,一定要看下jmeter所在服务器跟influxdb所在服务器联通性,端口是否开放
六 调用 linux jmx文件执行压测
在安装jmeter的linux服务器上新建文件夹mytest
[root@product mytest]# pwd
/usr/local/jmeter/mytest
1、上传jmx文件到此目录
点击xshell菜单
打开sftp窗口,切换到/home/producttest/
拖jmx文件到光标输入处
查看已上传成功
2、放到待运行目录 mv Console-API-query-1.jmx /usr/local/
3.运行压测。 使用jmeter.sh
运行jmx
文件,将压测结果输出到result.jtl
文件中,命令如下。
sh /usr/local/apache-jmeter-5.4.1/bin/jmeter.sh -n -t Console-API-query-1.jmx -l result.jtl
如果不能执行,很可能是权限问题,运行命令:chmod -R 777 apache-jmeter-5.4.1
Grafana已显示执行结果