Docker+JMeter+InfluxDB+Grafana从容器内部发起压测
1、自由定制JMeter镜像:
Dockerfile文件:
FROM java:8
# 基础镜像
MAINTAINER yangjianliang <526861348@qq.com>
# 作者
ENV http_proxy ""
ENV https_proxy ""
RUN mkdir /test && \
chmod -R 777 /test
# 创建/test目录,用于存放jmx脚本、jtl结果文件、html测试报告文件
ENV JMETER_VERSION=5.1.1
ENV JMETER_HOME=/usr/local/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}
# 设置JMeter环境变量
ADD apache-jmeter-${JMETER_VERSION}.tgz /usr/local
# 添加JMeter
RUN sed -i '$a sampleresult.default.encoding=UTF-8' /usr/local/apache-jmeter-${JMETER_VERSION}/bin/jmeter.properties && \
sed -i '159s/256/512/g' /usr/local/apache-jmeter-${JMETER_VERSION}/bin/jmeter
# 修改JMeter配置文件
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 设置时区
docker build -t jmeter .
# 打包JMeter镜像
mkdir test
# 在当前路径创建test目录
docker run -d -it --name jmeter5.1.1 -v $PWD/test:/test jmeter
# 启动
docker exec -it jmeter5.1.1 /bin/bash
# 进入容器内部
java -version
# 查看java版本
jmeter -v
# 查看jmeter版本
exit
# 退出
2、InfluxDB
docker pull influxdb
# 拉取influxdb官方镜像
mkdir influxdb
# 在宿主局当前目录下创建influxdb目录
docker run -d --name influxdb1.7.9 -p 8086:8086 -v $PWD/influxdb:/var/lib/influxdb influxdb
# 启动
暴露的端口:
8086 HTTP API端口
2003 Graphite支持
从1.1.0版开始不推荐使用管理员界面,并且将从1.3.0版中删除。
docker run --rm influxdb influxd config > influxdb.conf
# 生成默认配置文件
docker runn --rm表示在容器退出时自动清理内部的文件系统
会在宿主机当前目录下同步生成influxdb.conf配置文件
vim influxdb.conf
# 修改配置文件
把第96行enabled = false改为
enabled = true
把第98行database = "graphite"改为
database = "jmeter"
docker kill influxdb1.7.9
# 杀掉容器进程
docker rm influxdb1.7.9
# 删除容器
docker run -d --name influxdb1.7.9 -p 8086:8086 -p 2003:2003 -v $PWD/influxdb:/var/lib/influxdb -v $PWD/influxdb.conf:/etc/influxdb/influxdb.conf:ro influxdb
# 重启容器
docker exec -it influxdb1.7.9 /bin/bash
# 进入容器内部
influx
# 进入influx命令行
create database jmeter
# 创建jmeter数据库
show databases
# 查看所有数据库
use jmeter
# 切换到jmeter库
select * from jmeter
# 查看jmeter库里面所有的数据
exit
# 退出influx命令行
exit
# 退出容器
docker restart influxdb1.7.9
# 重启容器
docker inspect influxdb1.7.9
# 查看容器IP地址
3、发起压测
JMeter Backend Listener后端监听器:
influxdbMetricsSender:org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
influxdbUrl:http://host_to_change:8086/write?db=jmeter,例如:http://172.17.0.5:8086/write?db=jmeter
application:application name,被测试的应用名称,例如:测试应用,此值也作为名为“application”的标记存储在“events”中
measurement:jmeter,使用默认的”jmeter“就行
summaryOnly:false,为true的情况下,只输出所有请求的集合数据报告,为flase的情况下,输出每条数据的详情报告
samplersRegex:.*,正则表达式将与样本名称匹配并发送到后端,默认匹配所有
percentiles:90;95;99,要发送到后端的百分位数,多个值已;分割
testTitle:Test name,测试名称,默认的设置为Test name,该值作为名为“text”的字段存储在“transaction”度量中
eventTags:自定义标签,可以根据需要添加任意数量的自定义标签,对于它们中的每一个,只需创建一个新行并在其名称前加“TAG_”
docker restart jmeter5.1.1
# 先把baidu.jmx脚本放到宿主机的$PWD/test目录下,然后重启容器,这样容器的/test目录也会同步
docker exec -it jmeter5.1.1 /bin/bash
# 再次进入容器内部
jmeter -JN=20 -JT=60 -n -t /test/baidu.jmx -l /test/baidu.jtl -e -o /test/html
# 发起压测
cat jmeter.log
# 查看日志,理论上没报错的话数据应该已经写入了InfluxDB
exit
# 退出容器
压测停止后,宿主机$PWD/test目录下也会同步生成baidu.jtl结果文件与html测试报告目录
4、Grafana
docker pull grafana/grafana
# 拉取grafana官方镜像
mkdir grafana
# 在宿主局当前目录下创建grafana目录
chmod 777 -R ./grafana/
# 赋予grafana目录读写权限
docker run -d --name=grafana6.5.3 -p 3000:3000 -v $PWD/grafana:/var/lib/grafana grafana/grafana
# 启动
docker exec -it grafana6.5.3 /bin/bash
进入容器内部
cat VERSION
# 查看版本
exit
# 退出容器
访问:
账号:admin
密码:admin
首次登录会要求修改密码并二次确认
添加数据源,使用InfluxDB:
添加仪表盘:
去官网选择一个模板:
https://grafana.com/grafana/dashboards?dataSource=influxdb
例如JMeter模板:
https://grafana.com/grafana/dashboards/5496
填入5496:
等待一会儿: