关于Jmeter长时间压测的可视化监控报告

最近有个测试项目,是针对云平台的数据库连接稳定性测试,一般做稳定性测试想到的工具是Loadrunner,因为“成熟稳定”,但是这么重量级的工具不适合搬到云平台上开展测试。于是就想到了Jmeter,Jmeter是优秀的开源测试工具,但是其稳定性还有待验证。

       首先将Jmeter轻量包(免安装)上传到云平台,这次肯定是要分布式测试了(因为要测试20台虚拟机与阿里Mysql连接的稳定性),每一台虚拟机都部署上JDK和Jmeter,并启动jmeter-server。主控机的jmeter肯定不能用GUI模式调用了(要是那样的话不得内存溢出或卡到死),直接通过以下命令调用(好处就不说了):

jmeterHome3.1\bin\jmeter -n -t jmeterHome3.1\bin\MysqlTest.jmx -R 10.2.116.116,10.2.116.118,[省略后面的IP] -l DashReport\log-20180413.csv -e -o DashReport\htmlReport-20180413

对于远程负载机较多的情况,就可以在jmeter-server文件上配置,然后用 -r (上面是用-R)来表示启动远程压力机。上面的命令除了生成报告日志csv,还有通过DashReport自动生成视图报告。关于如何产生DashReport可视化测试报告,可以参考我的另一篇文章 Jmeter和Ant的html报告优化及Dashboard Report介绍【https://blog.csdn.net/smooth00/article/details/78728060】。

       按理到这一步,就达到我的要求了,但是经过实际操作后发现问题的严峻性了,那就是随着测试时间的延长(不到4小时),发现log-20180413.csv报告文件越来越大,当超过1G后,问题就暴露了,这么大的监控日志如何转换成html报告(实际上只有最近1个小时的监控数据能够转换,再长时间的就处理不过来了,更别提我要进行跨天的测试监控),另外一个严峻的问题是,随着测试文件的越来越大,对Jmeter造成了挑战,这就是最大的不稳定因素,磁盘的读写瓶颈,随时都可能让它崩溃。(注:这个问题在Windows下表现尤为明显,在Linux下就算产生再大的报告文件也不至于让Jmeter出现运行异常,但是最终要将超过几个G的报告转为html报告也会是件要命的事,需要找个内存高的机器专门用来转换html报告)

        这时候我的想法就是如何将测试监控日志保存到数据库,第一个方案就是通过Beanshell来计算JDBC请求的响应时间,分别通过BeanShell PreProcessor和BeanShell PostProcessor来获取请求前和请求后的时间戳,然后相减算出时间差:

import java.util.Date;

long planDate2 = System.currentTimeMillis();//planDate是在PreProcessor生成的时间戳

long conTime=planDate2-Long.valueOf(vars.get("planDate")).longValue();

vars.put("connTime",conTime.toString());

 同时获取每台压力机的IP

String addr = InetAddress.getLocalHost().getHostAddress();//获得各个压力机IP

vars.put("addrIP",addr);

       然后把请求的响应时间、压力机IP、请求开始的时间戳,把这些数据通过JDBC的insert请求插入到数据库表中,作为监控数据,然后通过可视化平台展现出来(我用的是我们APM工具当中的自定义轮询查询的方式),展现效果如下:

       按理这样也算达到我的目的了,但是接着又出现一个新问题,就是这种轮询展现的方式过于机械化,因为轮询的时间是1分种一次,精度上不够,又不能灵活的选择监控时间段,这样随着测试时间的拉长,测试曲线图密度越来越大,最后就不直观了。而且还有个更严重的问题,如果Jmeter出问题了,也没法第一时间发现和排查。

       看来我的想法跟实际还是有不小差距,上网专门查了一下,发现Jmeter其实是有相关的功能的,即 Jmeter + Grafana + InfluxDB的方式,于是我又开始用最短的时间,配置了InfluxDB、Grafana(开始以为这个部署过程会很长,没想到这两工具也是轻量化的,不用安装也能运行)。

1、下载,grafana-5.0.4.windows-x64.zip和influxdb-1.5.1_windows_amd64.zip,为什么下载Windows版本,主要是因为懒得在Linux下配置,先用顺Windows下的再说。

(1)到官网下载influxdb,https://portal.influxdata.com/downloads,说是要翻墙下,其实也不用,只要右键查看网站源码,就能看到下载链接:

(2)到官网下载grafana,https://grafana.com/grafana/download?platform=windows

2、直接解压,就可以开始配置和使用

(1)针对influxdb,修改influxdb.conf文件(jmeter通过2003端口连)

[[graphite]]

  enabled = true

  database = "jmeter"

  bind-address = ":2003"

  protocol = "tcp"

  consistency-level = "one"

把http的8086端口的注释也去掉(grafana通过8086端口连)

[http]

  # Determines whether HTTP endpoint is enabled.

  enabled = true

  # The bind address used by the HTTP service.

  bind-address = ":8086"

启动influxdb,通过CMD到influxdb的目录下,直接命令 influxd -config influxdb.conf 启动

(2)针对Jmeter,添加“监听器 -> Backend Listener”,并配置“Backend Listener”,主要配置Host,如下图:

     以上的配置,跟默认情况不一样的是,将summaryOnly设为false,useRegexpForSamplersList设为true,并配置了samplersList的正则表达试为JDBC.*,目的是可以监听所有以JDBC名称开头的Request请求。

(3)针对grafana,很简单,到Grafana安装目录中的bin目录下,双击grafana-server.exe启动程序

访问http://localhost:3000,用admin(密码admin)登录,开始配置:

第一步、配置数据库,在设置-->Data Sources,添加,配置以下画圈的部分就可以了,然后直接保存通过

第二步,在面板中添加Graph,选择Data Source为jmeter,在查询条件中,选择你要监控的指标,可以添选多个指标

配置好了,就能看到图了。如果看不到图,请用Jmeter多发几次请求。可以选择最右上角的监控时间段来精确化的监控指定时间段的测试数据:

       以上是我配置后产生的监控效果图,由于可以实时监控,查看历史监控,按15分种、半小时、1小时、1天的不同时段展现,很好的解决了我要求长时间监控测试的目的。测试数据不再通过文件保存,避免了磁盘IO限制的问题,也解决了测试时间过长,报告无法读取和展现的问题。

另外用这种测试模式,我们还可以达到Jmeter分布式集群的去中心化,让Master不再负责各节点测试数据的收集和处理(交给influxdb来完成),只专注于slave的调度,甚至可以进行多master-slave部署,由Jenkins进行同步调度测试。

附:几种我们常用的监控指标:

为了能方便的同时启动influxDB和Grafana,我专门写了启动脚本,有两份,一份是windows版的,一份是Linux版的

Windows版的启动脚本:

@echo off

startcmd /k""%~dp0influxdb-1.5.1/influxd.exe" -config "%~dp0influxdb-1.5.1/influxdb.conf""

cd"%~dp0grafana-5.0.4\bin"

startcmd /k"grafana-server.exe"

Linux版的启动脚本(为了后台运行并且避免进程冲突,linux版的写的比较复杂一些):

#!/bin/bash

# Author:zheng

# Date:2018-04-18

InstanceCount=1

Cur_Dir=$(cd"$(dirname "$0")";pwd)

influxdb_v=influxdb-1.5.1

grafana_v=grafana-5.0.4

chmod -R 777$Cur_Dir/$influxdb_v/bin

chmod -R 777$Cur_Dir/$grafana_v/bin

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"----Current directory is "$PWD

# 检查$ProcessName实例是否已经存在

#while [ 1 ] ; do

#$PROCESS_NUM获取指定进程名的数目

PROCESS_NUM=`ps -ef | grep"influxd"| grep -v"grep"| wc -l`

if[$PROCESS_NUM-lt$InstanceCount];

then

StopCount=`expr$InstanceCount-$PROCESS_NUM`

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"----influxd service [total$StopCount] was not started."

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"----Starting influxd service[total$StopCount] ."

(nohup$Cur_Dir/$influxdb_v/bin/influxd -config$Cur_Dir/$influxdb_v/influxdb.conf) >>/dev/null 2>&1 &

else

PROCESS_PID=`pidof -s influxd | awk'{print $1}'`

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"---kill influxd [pid$PROCESS_PID]"

pidof -s influxd | awk'{print $1}'| xargskill-9

sleep 2

echo"----Restart influxd service[total$InstanceCount]."

(nohup$Cur_Dir/$influxdb_v/bin/influxd -config$Cur_Dir/$influxdb_v/influxdb.conf) >>/dev/null 2>&1 &

fi

PROCESS_NUM=`ps -ef | grep"grafana-server"| grep -v"grep"| wc -l`

if[$PROCESS_NUM-lt$InstanceCount];

then

StopCount=`expr$InstanceCount-$PROCESS_NUM`

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"----grafana service [total$StopCount] was not started."

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"----Starting grafana service[total$StopCount] ."

cd$Cur_Dir/$grafana_v/bin

(nohup ./grafana-server) >>/dev/null 2>&1 &

else

PROCESS_PID=`pidof -s grafana-server | awk'{print $1}'`

echo-n `date +'%Y-%m-%d %H:%M:%S'`

echo"---kill grafana-server [pid$PROCESS_PID]"

pidof -s grafana-server | awk'{print $1}'| xargskill-9

sleep 2

echo"----Restart grafana service[total$InstanceCount]."

cd$Cur_Dir/$grafana_v/bin

(nohup ./grafana-server) >>/dev/null 2>&1 &

fi

sleep 2

Grafana作为一款轻量级的报表工具,功能还是很强大的,以下是我配置的指标效果图(有点花哨):

补充说明:

针对Jmeter的Backend Listener如果在implementation选项中选择第二项,我们将会得到不一样的监控效果:

重新配置一下参数:

 再次发起测试,我们会发现influxDB的表结构出现了变化,变成单独创建一个总的jmeter表(原来的方式是一个统计指标创建一张表,会有很多张表):

这样的表信息量大,可以方便构建更直观的监控视图:

本文为博主原创文章,请勿随意装载,请标明出处 smooth的博客:https://blog.csdn.net/smooth00

测试监控完全依赖端口的连通性,请确保2003和8086端口的通达,否则监控不到数据时,也不会有相关的报错提示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容