一、目的
- 机器资源合理配置,资源利用率最大化
- 更快排查系统瓶颈,提高系统代码质量
- 性能测试规范化、体系化,快速应对接口性能测试报告
- 把更多精力放在性能分析上,而非测试脚本开发、数据采集统计上
二、框架
![分布式性能测试框架](https://img-blog.csdnimg.cn/7d95609ca23142c6b692736920455b15.png)
1、telegraf
- 定时收集系统和服务的统计数据
- 采集传统的CPU、内存、网速等传统系统指标
- 通过其他服务或第三方API采集,如ActiveMQ、Kafka、Consul、Elasticsearch、Kubernetes、Redis
- 写入influxdb,无需用户关注influxdb表结构、索引等存储格式
- 官方文档
2、influxdb
- 时序数据库
- 监控数据统计存储,高性能地查询与存储时序型数据
- 与mysql不同之处:
概念 | MySQL | InfluxDB |
---|
数据库(同) | database | database |
表(不同) | table | measurement |
列(不同) | column | tag(带索引的,非必须)、field(不带索引)、timestamp(唯一主键) |
curl -G 'http://127.0.0.1:8086/query?pretty=true' \
--data-urlencode "db=locust" \
--data-urlencode "q=select last(event) from locust_events where event='test_stop'"
# 返回结果:
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "locust_events",
"columns": [
"time",
"last"
],
"values": [
[
"2020-07-07T13:41:39.505369Z",
"test_stop"
]
]
}
]
}
]
}
3、grafana
- 度量分析和可视化工具
- 支持读取多种数据源:InfluxDB,Prometheus,Elasticsearch等等
- 官方模板hub支持可视化模板在线导入
- 邮件告警
4、locust
- 分布式压测工具(库),轻松编写复杂的因果逻辑、完整执行流程,locustfile.py示例如下:
from locust import HttpUser, task, constant
from locust_influx import expose_metrics
expose_metrics(influx_host="127.0.0.1")
class QuickstartUser(HttpUser):
host = "http://127.0.0.1:9234"
wait_time = constant(0)
@task
def sendFile(self):
with open("/home/zhangsan/file/123", "rb") as f:
self.client.post("/sendFile",
headers={"File-Length": str(fileSize)},
files={"content": f})
locust -f locustfile.py -u 10 -r 10 -t 60s --headless
locust --web-host 127.0.0.1 --web-port 8089
locust -t 60s --headless --master --expect-workers 2
locust --worker -u 8 -r 8 --headless