在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化。
Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息。 这个数据结构允许我们在Charts标签页中查看不同时间点的性能指标,但是正因为Locust WebUI上展示的数据实际上是存储在内存中的。所以在Locust测试结束后,这些数据将不再可用。 如果我们需要长期保存以便后续分析测试数据,可以考虑将Locust的测试数据上报到外部的数据存储系统,如InfluxDB,并使用Grafana等可视化工具进行展示和分析。
本文将介绍如何使用Locust进行负载测试,并将测试数据上报到InfluxDB。同时,我们将使用Grafana对测试数据进行展示和分析。
最终效果:
influxDB
InfluxDB是一款开源的时间序列数据库,专为处理大量的时间序列数据而设计。时间序列数据通常是按照时间顺序存储的数据点,每个数据点都包含一个时间戳和一个或多个与之相关的值。这种数据类型在许多场景下都非常常见,如监控系统、物联网设备、金融市场数据等。在这些场景下,数据上报是一种关键的需求,因为它可以帮助我们实时了解系统的状态和性能。
注: InfluxDB 开源的时单机版本,集群版本并未开元,但是对于普通用户的日常场景已经完全够用。
以下是关于InfluxDB的关键特性和优势的表格:
特性 | 优势 |
---|---|
高性能 | 针对时间序列数据进行了优化,可以快速地写入和查询大量数据。 |
数据压缩 | 使用了高效的数据压缩算法,在磁盘上节省大量空间。 |
自带查询语言 | 具有一种名为InfluxQL的查询语言,类似于SQL,便于查询和分析数据。 |
数据保留策略 | 支持设置数据保留策略,可以自动清除过期的数据。 |
易于集成 | 具有丰富的API和客户端库,可以轻松地与其他系统和工具集成。 |
安装运行InfluxDB
如果你已经安装了Docker,可以直接使用官方的InfluxDB镜像来运行InfluxDB:
docker run -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb:1.8
此命令将在Docker容器中启动InfluxDB,并将主机上的8086端口映射到容器的8086端口。
点击查看在如何在不同操作系统中如何安装 InfluxDB
使用Python 上报数据到influxdb
首先,确保已经安装了influxdb
库:
pip install influxdb
然后,使用以下代码上报数据到InfluxDB:
以下是一个使用Python操作InfluxDB上报数据的示例,对照MySQL进行注释:
import time
from influxdb import InfluxDBClient
# 连接到InfluxDB(类似于连接到MySQL数据库)
client = InfluxDBClient(host='localhost', port=8086)
# 创建数据库(类似于在MySQL中创建一个新的数据库)
client.create_database('mydb')
# 切换到创建的数据库(类似于在MySQL中选择一个数据库)
client.switch_database('mydb')
# 上报数据(类似于在MySQL中插入一条记录)
data = [
{
# 在InfluxDB中,measurement相当于MySQL中的表名
"measurement": "cpu_load",
# tags相当于MySQL中的索引列,用于快速查询
"tags": {
"host": "server01",
"region": "us-west"
},
# time为时间戳,是InfluxDB中的关键字段
"time": int(time.time_ns()),
# fields相当于MySQL中的数据列,用于存储实际的数据值
"fields": {
"value": 0.64
}
}
]
# 写入数据(类似于在MySQL中执行INSERT语句)
client.write_points(data)
在这个示例中,我们首先连接到InfluxDB(类似于连接到MySQL数据库),然后创建一个名为mydb
的数据库(类似于在MySQL中创建一个新的数据库),国产精品suv并切换到创建的数据库(类似于在MySQL中选择一个数据库)。接着,我们准备了一条名为cpu_load
的数据(在InfluxDB中,measurement相当于MySQL中的表名),并为数据添加了host
和region
标签(类似于MySQL中的索引列)。最后,我们将数据写入到InfluxDB中(类似于在MySQL中执行INSERT语句)。
执行上面的代码后我们可以看到我们的操作成功了:
如果我们安装了influx-cli就可以在命令行中直接查询刚才写入的数据:
bingohe@MacBook-Pro ~ $ /usr/local/Cellar/influxdb@1/1.11.1/bin/influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.11.1
> show databases;
name: databases
name
----
_internal
mydb
> use mydb
Using database mydb
> show measurements;
name: measurements
name
----
cpu_load
> select * from cpu_load;
name: cpu_load
time host region value
---- ---- ------ -----
1688874870046897000 server01 us-west 0.64
点击查看如何使用命令行访问InfluxDB