一、自由定製JMeter鏡像:html
Dockerfile文件:java
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環境變量
COPY apache-jmeter-${JMETER_VERSION}.tgz /usr/local
# 複製JMeter壓縮包
RUN cd /usr/local && \
tar -xzvf apache-jmeter-${JMETER_VERSION}.tgz
# 解壓JMeter
# 若是是基於Ubuntu或者CentOS的鏡像,COPY以後不須要解壓要這一步
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鏡像docker
mkdir test數據庫
# 在當前路徑建立test目錄apache
docker run -d -it --name jmeter5.1.1 -v $PWD/test:/test jmetervim
# 啓動後端
docker exec -it jmeter5.1.1 /bin/bashbash
# 進入容器內部併發
java -version
# 查看java版本
jmeter -v
# 查看jmeter版本
exit
# 退出
二、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地址
三、發起壓測
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測試報告目錄
四、Grafana
docker pull grafana/grafana
# 拉取grafana官方鏡像
docker run -d -p 3000:3000 --name=grafana6.5.3 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:
等待一下子: