背景
前段时间,公司项目需要压测某个服务.公司所有使用的都是locust作为压测脚本,该项目延续使用locust.
用过locust的小伙伴应该都知道,locust工具本身提供一个web平台,可以实时查看数据,但是也有缺点:数据不能存储,所有测试数据存在了内存中,重启以后测试数据会消失.
当时的需求是陆续压测几天,需要有一份能持续对比的压测数据,所以想把locust持久化存储.
解决方案
基于之前使用jmeter的方案,继续沿用 grafana prometheus prometheus_exporter. 使用prometheus存储locust产出的压测的数据,grafana作为前端页面展示数据.
安装依赖
python3-devel
代码语言:javascript复制sudo yum install python3-devel
locust
代码语言:javascript复制pip3 install locust==1.6(版本必须一样)
安装prometheus
prometheus
代码语言:javascript复制docker pull prom/prometheus
prometheus.yml
代码语言:javascript复制global:
scrape_interval: 10s
evaluation_interval: 10s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: locust
metrics_path: '/export/prometheus'
static_configs:
- targets: ['127.0.0.1:8089'] # 地址修改为实际地址
labels:
instance: locust
启动命令
代码语言:javascript复制docker run -p 9091:9090 -v
graph
代码语言:javascript复制http://127.0.0.1:9091/graph
prometheus_exporter
prometheus_exporter.py
代码语言:javascript复制https://github.com/myzhan/boomer/edit/master/prometheus_exporter.py
prometheus_client
代码语言:javascript复制https://github.com/prometheus/client_python
pip3 install prometheus_client
启动master(采集数据)
代码语言:javascript复制locust --master -f prometheus_exporter.py
demo脚本
代码语言:javascript复制# !/usr/local/bin/python
# -*- coding:utf-8 -*-
from locust import HttpUser, TaskSet, task, between
class NoSlowQTaskSet(HttpUser):
host = "http://aibot.speech.api.autohome.com.cn/"
@task
def index_page(self):
r = self.client.get("/")
启动worker脚本
代码语言:javascript复制locust --worker -f demo.py
服务器设置保留端口,Locust的Web页面
配置服务器8089端口
代码语言:javascript复制http://127.0.0.1:8089
grafana前端
docker命令
代码语言:javascript复制docker run -d --name grafana -p 3000:3000 -v /data/grafana:/var/lib/grafana grafana/grafana
配置面板
grafana展示效果