zoukankan      html  css  js  c++  java
  • 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官方镜像

    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:

    等待一会儿:

  • 相关阅读:
    [CSP-S模拟测试]:答题(meet in the middle)
    __AFO
    BZOJ4332 JSOI2012 分零食 【倍增 + NTT】
    CF528D Fuzzy Search 【NTT】
    uoj【UNR #3】To Do Tree 【贪心】
    uoj233/BZOJ4654/洛谷P1721 [Noi2016]国王饮水记 【dp + 斜率优化】
    BZOJ2150 部落战争 【带上下界最小流】
    洛谷P4240 毒瘤之神的考验 【莫比乌斯反演 + 分块打表】
    BZOJ3235 [Ahoi2013]好方的蛇 【单调栈 + dp】
    51nod1236 序列求和 V3 【数学】
  • 原文地址:https://www.cnblogs.com/yjlch1016/p/12232722.html
Copyright © 2011-2022 走看看