菜单
开源 RSS

使用 k6 进行负载测试

Grafana k6 是一个现代的负载测试工具。其简洁易用的脚本 API 可以在本地或云端工作。其配置使其非常灵活。

xk6-loki 扩展 允许向 Loki 实例推送日志和查询日志。它作为一个 Loki 客户端,模拟真实世界的负载来测试您的 Loki 安装的可扩展性、可靠性和性能。

开始之前

k6 用 Go 语言编写。请 下载并安装 Go 环境。

安装

xk6-loki 是 k6 二进制文件的一个扩展。构建一个包含 xk6-loki 扩展的自定义 k6 二进制文件。

  1. 安装 xk6 扩展捆绑器

    bash
    go install go.k6.io/xk6/cmd/xk6@latest
  2. 检出 grafana/xk6-loki 仓库

    bash
    git clone https://github.com/grafana/xk6-loki
    cd xk6-loki
  3. 构建包含扩展的 k6

    bash
    make k6

使用方法

使用自定义构建的 k6 二进制文件的方式与使用非自定义 k6 二进制文件的方式相同

bash
./k6 run test.js

test.js 是一个 Javascript 负载测试脚本。请参阅 k6 文档 以开始使用。

脚本 API

自定义构建的 k6 二进制文件提供一个 Javascript loki 模块。

您的 Javascript 负载测试脚本导入该模块

js
import loki from 'k6/x/loki';

此模块的类包括

描述
ConfigClient 类的配置
Client用于从 Loki 写入和读取日志的客户端

ConfigClient 必须在默认函数外部的 k6 初始化上下文 (参见 测试生命周期) 中调用,以便客户端只配置一次并在所有 VU 迭代之间共享。

Client 类暴露以下实例方法

方法描述
push()pushParameterized(5, 800*1024, 1024*1024) 的快捷方式
pushParameterized(streams, minSize, maxSize)执行 push 请求 (POST /loki/api/v1/push
instantQuery(query, limit)执行即时查询 (GET /loki/api/v1/query
client.rangeQuery(query, duration, limit)执行范围查询 (GET /loki/api/v1/query_range
client.labelsQuery(duration)执行标签查询 (GET /loki/api/v1/labels
client.labelValuesQuery(label, duration)执行标签值查询 (GET /loki/api/v1/label/<name>/values
client.seriesQuery(matchers, duration)执行系列查询 (GET /loki/api/v1/series

Javascript 负载测试示例

js
import loki from 'k6/x/loki';

const timeout = 5000; // ms
const conf = loki.Config("https://:3100", timeout);
const client = loki.Client(conf);

export default () => {
   client.pushParameterized(2, 512*1024, 1024*1024);
};

请参阅 grafana/xk6-loki 以获取完整的 k6/x/loki 模块 API 参考。