Access Log压测

性能测试PTS的Access Log压测功能,仅依赖网关日志,对服务端零侵入,通过PTS界面的简单配置,可以快速实现真实的网关流量回放。本文介绍如何使用Access Log压测功能。

方案概览

image

Access Log压测通过简单的配置即可实现网关真实流量回放,并且将压测请求参数化,自动创建压测场景,以及通过简单的登录接口配置即可解决登录态过期的问题。其配置主要分为四个模块:

  • 配置日志生产者:您的访问日志可能来自于负载均衡ALB、CLB、MSE网关或者云服务器ECS中自建的Web服务,首先需要将访问日志投递到日志服务SLS中。关于日志投递可以参考配置ALB访问日志配置CLB访问日志MSE开启网关日志投递使用Nginx配置模式采集日志

  • 配置日志服务:用于接收日志生产者投递的日志。

  • 配置Access Log压测:分析日志服务中存储的日志,获取待压接口并构造压测场景。

  • 编辑PTS场景:待Access Log压测场景构造完成后,将跳转到PTS场景编辑页面,您可在此页面做进一步配置,也可以直接调试场景并启动压测。

日志规范

重要
  1. URL字段索引和值存在,且索引名在["request_uri", "path", "request_url", "url", "uri", "requestURI", "requestURL"]中。如果URL的路径和参数是分开记录的,参数字段值存在,且索引名在["method", "http_method", "request_method"]中。

  2. 如需回放POST请求,必须满足以下要求:

    • HTTP POST body字段索引和值存在,且索引名在["body", "http_body", "http_request_body", "request_body"]中。当前仅支持application/x-www-form-urlencodedtext/plainapplication/json格式的body,不支持二进制数据body。

    • Content-Type字段索引和值存在,且索引名在["content_type", "contentType"]中,否则PTS将自动推断Content-Type

    • 若您使用MSE网关,可参考将完整的请求应答信息添加到访问日志,将POST请求的body打印到网关日志中。如此打印的POST请求,PTS会直接支持回放。

  3. 如使用简单模式,还需满足以下规范,不符合规范的日志会被忽略:

    • 域名字段索引和值存在,且索引名在["host", "http_host", "authority"]中。

    • HTTP协议字段索引和值存在,且索引名在["http_protocol", "protocol", "scheme", "http_scheme"]中,且值为httphttps,否则将默认使用http

前提条件

步骤一:创建Access Log压测场景

  1. 登录PTS控制台,在左侧导航栏选择性能测试 > 创建场景,然后单击Access Log压测image

  2. 查询 / 分析日志

    选择Access Log所在SLS日志 region日志 project日志库,设置查询参数,时间段,单击查询/分析查询需要回放的日志。日志索引需要满足日志规范要求,不符合规范的日志将被忽略。image

步骤二:选择压测模式

创建Access Log 压测场景页面,打开简单回放模式开关并单击选择目标接口即可进入简单模式;关闭简单回放模式开关并单击选择目标接口即可进入标准模式。

image

重要

简单模式直接回放日志记录的流量,不解析请求结构,不限制不同的域名和接口数量,但只能控制整个场景的RPS,并且不关心登录态。

标准模式能配置登录态,能分析各接口的请求数和MaxQPS分布,并能精确控制每个接口的压力值,但限制不同的域名和接口数量。

您可根据具体需求选择简单模式或标准模式做日志回放,对比如下:

压测模式

说明

简单模式

  • 当前仅支持GET和POST请求的回放,PTS会原样回放记录在日志中的请求(对于不带body的POST请求会用空body进行回放),可以选择是否回放POST请求。

  • 流量回放场景会根据HTTP 请求方法(GET/POST),协议类型(HTTP/HTTPS),以及POST Body的Content-Type字段将请求进行分类。PTS会使用不同的抽象接口回放各类接口,如HTTP GET请求和HTTPS GET请求分属于两个不同的抽象接口。每个接口之间是并行关系,使用从日志中抽取的参数。

  • 简单模式不关心登录态,如果有配置登录态的需求,请使用标准模式

标准模式

  • 当前仅支持GET和POST请求的回放,并自动过滤请求静态资源的接口。不带请求body的POST请求将不做回放。流量回放时每个接口之间是并行关系,使用从日志中抽取的参数。

  • 登录态默认使用Cookie,使用的Cookie数为登录接口的参数文件的行数且最多100个,默认不配置请求Header。如果有进一步的要求,可以在生成PTS压测场景后,在场景编辑页面进行进一步编辑。

简单模式

  1. 配置回放参数

    简单模式分析结果展示所选时段内有效请求数,您可以进行以下参数的配置:

    • 是否回放POST请求:开启开关后PTS将为您回放POST请求,但如果您的Request Body并未打到Access Log中, 回放POST请求将不带Body, 可能会出错,谨慎开启。

    • 是否重复回放:若开启重复回放,回放到日志末尾时将会从头循环回放请求。 若关闭重复回放,回放到末尾时将停止发压,但未达到指定时长回放不会自动停止,请在请求发送完后手动停止回放避免更多VUM消耗。

    • 回放时长(分钟):流量回放的持续时长,默认十分钟。

    • 每秒请求数:配置流量回放的速率,PTS会以该速率回放您的Access Log流量,该数值会以平均原则分配到每个抽象接口上。image

  2. 构造压测场景

    单击构造压测场景,PTS会总结回放配置的结论,单击确认,将跳转到PTS场景编辑页面。您可在此页面进一步编辑生成的场景,也可以跳过 配置PTS场景直接启动压测

标准模式

说明

如果日志中包含请求域名,且字段名在["host", "http_host", "authority"]中,PTS将会自动补全host,同时你也可以自行修改。当前仅支持单host, 所有接口共享这个host。如果您需要回放多个域名,可以依次选择接口去创建场景,然后在压测场景中做进一步修改即可。

  1. 选择目标接口

    PTS 展示所选的时间段从 access log 获知的频数和 QPS 维度下 TOP10 接口,可单击接口旁的灰色圆圈选择待压接口。已选的接口会展示在已选目标接口区域。image

  2. 配置压测参数

    如果待压接口无需登录,则打开目标接口无需登录开关;如果待压接口需要登录态信息,则需要配置登录接口信息,配置方法如下所示:

    a. 从接口选择:如果查询出的接口中包括登录接口,可以选择此项PTS会自动将该接口作为登录接口,使用日志中的参数,导出Cookie登录态使用,无需您手动配置。image

    b. 配置登录接口:如果展示出的接口没有登录的接口,您也可以手工配置。输入登录接口地址,如http://example.com/login。配置登录接口的body参数,如username、password。可以用${}引用参数,用到的参数请点击配置参数文件,更多信息,请参见数据源image

  3. 确认配置无误后,单击构造压测场景,将跳转至PTS场景编辑页面。您可在此页面进一步编辑生成的场景,也可以跳过配置PTS场景直接启动压测

(可选)步骤三: 配置PTS场景

  1. 单击数据导出,可编辑使用的Cookie数。如需要使用其他登录态比如token,单击登录接口后,设置出参,并在数据导出节点配置导出,详见数据导出指令image

  2. 单击任意接口,可为接口添加Header。image

  3. 施压配置请参考:压力模型指定施压IP数

步骤四: 启动压测

  1. 调试场景可验证配置是否合理,避免压测失败。若需进行场景调试,单击调试场景即可进入场景调试页面。更多信息,请参见调试场景

  2. 单击保存去压测,在温馨提示页面,选择立即执行并勾选确认本次压测已获得准许并遵守当地法律,然后单击启动压测

分析压测结果

压测结束后,系统会自动获取压测数据,例如压测场景指标、业务详情数据、监控详情数据和API采样日志等,生成压测报告。更多信息,请参见查看PTS压测报告