Skip to content

一、架构设计背景 ​

在执行高并发负载测试时,单纯依靠 Locust 默认的 Web UI 存在几个明显的局限:

  1. 指标维度单一:默认面板主要展示请求数、失败率和平均响应时间,无法实时关联被测系统的 CPU、内存利用率与网络 I/O。
  2. 缺乏历史回溯:压测一旦停止或重启,历史瞬时波动数据容易丢失,不利于多轮次基线对比。
  3. 报警协同能力弱:无法基于指标阈值联动企业微信或钉钉告警。

通过构建 Locust + Exporter + Prometheus + Grafana 监控监控链路,可以将压测客户端指标、系统硬件指标汇聚至时序数据库,实现企业级压测大盘观测。

text
┌─────────────────┐       ┌─────────────────────────┐
│   Locust 压测机  │ ───►  │ locust-metrics-exporter │ ───┐
└─────────────────┘       └─────────────────────────┘    │
                                                          │ Pull 指标
┌─────────────────┐       ┌─────────────────────────┐    │ (15s 间隔)
│ 被测 Linux 节点 │ ───►  │      node-exporter      │ ───┼──► ┌────────────┐       ┌─────────┐
└─────────────────┘       └─────────────────────────┘    │    │ Prometheus │ ────► │ Grafana │
                                                          │    └────────────┘       └─────────┘
                                                          │                           ▲
                                                          └───────────────────────────┘

二、Docker Compose 极速编排配置 ​

使用 docker-compose.yml 统一拉起整个监控支撑套件:

yaml
version: '3.8'

services:
  # 1. 宿主机硬件指标采集器
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    network_mode: "host"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    restart: unless-stopped

  # 2. Locust 指标转换适配器
  locust-metrics-exporter:
    image: containersol/locust_exporter
    network_mode: "host"
    environment:
      # 指向实际运行 Locust Web 服务的监听地址
      - LOCUST_EXPORTER_URI=http://127.0.0.1:8089
    restart: unless-stopped

  # 3. Prometheus 时序数据库
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    network_mode: "host"
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.retention.time=15d
    volumes:
      - ./configs/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - ./data/prometheus:/prometheus
    restart: always

  # 4. Grafana 可视化面板
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    network_mode: "host"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=your_secure_password
    volumes:
      - ./data/grafana:/var/lib/grafana
    restart: always

三、Prometheus 抓取配置(prometheus.yml) ​

在 ./configs/prometheus.yml 中声明数据采集作业:

yaml
global:
  scrape_interval: 15s     # 抓取间隔
  evaluation_interval: 15s

scrape_configs:
  # 监控 Prometheus 自身
  - job_name: 'prometheus'
    static_configs:
      - targets: ['127.0.0.1:9090']

  # 监控 Linux 宿主机物理指标
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['127.0.0.1:9100']

  # 监控 Locust 实时压测状态
  - job_name: 'locust'
    static_configs:
      - targets: ['127.0.0.1:9646'] # locust_exporter 默认监听端口

启动编排服务:

bash
docker compose up -d

四、Grafana 仪表盘导入与核心观测面板 ​

  1. 打开浏览器访问 http://<server-ip>:3000,输入管理员账号密码登录;
  2. 在 Data Sources 中添加 Prometheus,URL 填入 http://127.0.0.1:9090 并保存测试连通;
  3. 在 Dashboards -> Import 中导入官方推荐的 Locust 看板(模板 ID:11985 或 12051):
    • RPS 吞吐曲线:实时展示总请求速率与每秒失败请求走势;
    • 响应耗时热力图:展示 P50、P90、P99 分位数的延迟分布;
    • 活动并发用户数(Active Users):实时反映加压梯度与 Worker 协同状态;
    • 关联系统监控看板(Dashboard ID: 8919):同步对照测试期间服务端 CPU、内存与磁盘 I/O 的压测拐点。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win