当前位置:首页 > 技术 > 正文内容

基于Docker构建JMeter与Grafana及InfluxDB的实时性能监控平台

访客 技术 2026年6月24日 1

基于Docker构建JMeter与Grafana及InfluxDB的实时性能监控平台

在软件交付生命周期中,性能测试是验证系统高并发处理能力与稳定性的关键环节。传统的JMeter GUI模式不仅消耗大量本地资源,且难以实现测试数据的实时可视化分析。通过引入InfluxDB作为时序数据存储层,结合Grafana进行数据渲染,可以构建出一套轻量、高效的实时监控看板。本文将详细阐述如何利用Docker容器化技术,快速部署并整合这三大组件。

一、 部署 InfluxDB 时序数据库

InfluxDB 负责收集并存储 JMeter 产生的实时性能指标。为了保证与 JMeter 后端监听器的兼容性,建议选用 1.8.x 版本。我们通过 Docker 启动服务,并利用非交互式命令直接初始化数据库。

# 启动 InfluxDB 容器,映射默认端口并挂载数据卷以实现持久化
docker run -d \
  --name tsdb-influx \
  -p 8086:8086 \
  -v influxdb-data:/var/lib/influxdb \
  influxdb:1.8.10

# 使用 -execute 参数直接创建用于存储压测数据的数据库
docker exec -it tsdb-influx influx -execute "CREATE DATABASE load_testing"

# 验证数据库是否创建成功
docker exec -it tsdb-influx influx -execute "SHOW DATABASES"

二、 部署 Grafana 可视化看板

Grafana 用于连接 InfluxDB 数据源,并将枯燥的指标数据转化为直观的折线图与仪表盘。在容器启动时,我们可以通过环境变量预先配置管理员账号,避免首次登录时的繁琐设置。

# 启动 Grafana 容器,配置默认管理员凭证及持久化存储
docker run -d \
  --name dashboard-grafana \
  -p 3000:3000 \
  -e "GF_SECURITY_ADMIN_USER=admin" \
  -e "GF_SECURITY_ADMIN_PASSWORD=PerfMonitor2023!" \
  -v grafana-storage:/var/lib/grafana \
  grafana/grafana:9.5.1

服务启动后,可通过浏览器访问 http://<宿主机IP>:3000 进入控制台,使用预设的账号密码登录,并在 Data Sources 中添加 InfluxDB 数据源(URL 为 http://tsdb-influx:8086,需确保容器在同一 Docker 网络下)。

三、 构建与运行 JMeter 压测容器

为了保持测试环境的一致性,我们将 JMeter 运行环境封装为 Docker 镜像。以下是优化后的 Dockerfile,采用了更轻量的 Alpine 基础镜像,并简化了目录结构。

FROM amazoncorretto:8-alpine

ARG JMETER_VERSION=5.5
ENV JMETER_HOME=/opt/apache-jmeter-${JMETER_VERSION}
ENV PATH=${JMETER_HOME}/bin:${PATH}

# 安装依赖并下载解压 JMeter
RUN apk add --no-cache wget bash tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    wget -q https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz -O /tmp/jmeter.tgz && \
    tar -xzf /tmp/jmeter.tgz -C /opt && \
    rm -rf /tmp/jmeter.tgz

WORKDIR /workspace

在 Dockerfile 所在目录执行镜像构建:

docker build -t custom-jmeter:5.5 .

镜像构建完成后,启动容器并挂载本地的测试脚本与结果输出目录。为了保持容器在后台运行以便后续执行命令,我们使用 tail -f /dev/null 维持进程。

# 启动 JMeter 容器并映射工作目录
docker run -d \
  --name jmeter-executor \
  -v $(pwd)/scripts:/workspace/scripts \
  -v $(pwd)/results:/workspace/results \
  custom-jmeter:5.5 \
  tail -f /dev/null

# 进入容器执行非 GUI 模式的压测任务
docker exec -it jmeter-executor jmeter -n \
  -t /workspace/scripts/api_load_test.jmx \
  -l /workspace/results/metrics.jtl \
  -e -o /workspace/results/html_report

上述命令中,-n 指定非 GUI 运行模式,-t 指向测试脚本,-l 记录采样结果日志。新增的 -e-o 参数用于在测试结束后自动生成 HTML 格式的可视化测试报告。配置好 JMeter 的 Backend Listener 指向 InfluxDB 后,压测过程中的 TPS、响应时间等指标将实时推送到 Grafana 看板中呈现。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。