标签:影响 存储空间 arch www 集成 sam lan 图表 异步
Jmeter是一款性能测试,压力测试的开源工具,被大量的测试人员拿来测试产品的性能,负载等等。 Jmeter除了强大的预置的各种插件,各种可视化图表工具以外,也有些固有的缺陷,例如:
本文会尝试将JMeter的sample数据写入ElasticSearch,然后通过Kibana强大的搜索和可视化能力,进行各种维度的性能分析,帮助开发测试人员找出性能的瓶颈,监控系统性能的变化情况,给整个开发,测试和运维团队发布各种报告
信息采集上这里有两种可行的方案,
对于数据采集,技术上,我们采用了开发一个JMeter的Backend Listener插件,这个插件会处理JMeter的每个Sample的结果
与BackendListener有关的信息可以查看 http://jmeter.apache.org/api/org/apache/jmeter/visualizers/backend/BackendListenerClient.html
我们着重看看SampleResult包含的信息,基本上我们可以拿到:
这些信息已经足够我们用来分析性能了,在具体采集上,我们也会看自己的需要,只保存感兴趣的参数,用来节省ElasticSearch的存储空间,例如只保存出错的响应的body
关于SampleResult,具体可以参见 https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
对于保存采样结果,技术上也有几个选择:
三种方式性能是依次提高的,能实现的功能也是逐个增强的。因为我们只是保存数据,并没有ElasticSearch的管理的需求,但是对性能有很强的需求,所以我们选择了TransportClient, 关于三种连接方式的具体介绍,可以参见:
JMeter本身就需要生成和管理多个Threads,所以一般情况下,并不建议JMeter 的Test Plan中,包含图形化的分析插件,或者尽量减少各种分析插件的使用。我们引入一个Backendlistener,当然也不希望影响JMeter的性能,或者尽量减少对JMeter本身的影响,我们的策略是:
采用异步的策略,每50个采样的结果,通过ElasticSearch bulk ingest的API,存入ElasticSearch,减少网络的开销。当然,这里的50是可以自己配置的,根据自己的机器性能、采样数据的大小和网络状况确定
可以定制化的数据保存策略,例如只保存感兴趣的采样信息
而JMeter本身的BackendListener也是异步的,JMeter的Load并不会等待结果的存储是否完成
当然,具体的性能影响,也需要严格的测试确定,这里我就不展开了,可能接下来会进行一些相关的测试
初步看下来,JMeter是把各个Server的Sample信息传给Controller处理的,所以呢,当JMeter部署规模比较大的时候,Controller的Sample信息处理会重一些,好在我们一般情况下,Controller上并不会有Load需要处理,所以也还好。。。但是对于插件的使用上,我接下来会部署几台JMeter的server确认下,是各个Server来处理SampleResult还是传回Controller,这个我会在更新中详细介绍,公司的网络,各种限制,还没有机会做这部分。
比如我们希望保存当前部署的产品的版本号,这个在比较各个不同版本的性能的时候,非常有用。我们在插件中,会把当前机器的以自定义的字符串开头的环境变量都存储到每条JMeter的记录中去。事后,用户就可以很灵活的使用这些自定义的参数来分析性能了(例如,地域代码,产品部署相关的各种参数)
由于时间的问题,今天先介绍下大概的情况,接下来我会更新
接下来我会把相关的Code放到Github上,并把相关代码开源, 请关注后续的更新。
如何保存JMeter的性能测试数据到ElasticSearch上,并且使用Kibana进行可视化分析(1)
标签:影响 存储空间 arch www 集成 sam lan 图表 异步
原文地址:http://www.cnblogs.com/Neil--Wang/p/6160959.html