Docker+JMeter+InfluxDB+Grafana從容器內部發起壓測

一、自由定製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

# 退出容器

訪問:

http://127.0.0.1:3000/

帳號:admin

密碼:admin

首次登陸會要求修改密碼並二次確認

 

添加數據源,使用InfluxDB:

 

 

 

添加儀表盤:

 

去官網選擇一個模板:

https://grafana.com/grafana/dashboards?dataSource=influxdb

例如JMeter模板:

https://grafana.com/grafana/dashboards/5496

填入5496:

等待一下子:

 

相關文章
相關標籤/搜索