菜单
开源

生成用于测试的日志数据

您可以使用 k6 生成用于负载测试的日志数据。

使用 pushParameterized

使用 pushParameterized 向 Loki 推送日志。此方法随机生成流的批次。此方法需要三个参数

namedescription
streams每批次的流数量
minSize最小批次大小(字节)
maxSize最大批次大小(字节)

Javascript 示例代码片段

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

const KB = 1024;
const MB = KB * KB;

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

export default () => {
   client.pushParameterized(2, 500 * KB, 1 * MB);
};

参数 streams

此方法的第一个参数是每批次所需的流数量。您可以通过随机化该值来模拟更真实的场景,而不是在每次调用中使用固定数量的流。

Javascript 示例代码片段

JavaScript
function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
};

export default () => {
   let streams = randomInt(2, 8);
   client.pushParameterized(streams, 500 * KB, 1 * MB);
}

参数 minSize 和 maxSize

此方法的第二个和第三个参数是批次大小的下限和上限。最终的批次大小是介于这两个参数之间的随机值。这模拟了日志客户端(例如 Grafana Alloy 或 Promtail)的行为,其中日志会被缓冲,并在达到某个批次大小时或在接收到日志后达到某个大小时进行推送。

批次大小不等于有效载荷大小,因为批次大小仅计算原始日志的字节。使用 Protobuf 编码时,有效载荷可能会被压缩。

日志格式

xk6-loki 可以发出七种不同格式的日志行。流的 label format 定义了其日志行的格式。

  • Apache common (apache_common)
  • Apache combined (apache_combined)
  • Apache error (apache_error)
  • BSD syslog (rfc3164)
  • Syslog (rfc5424)
  • JSON (json)
  • logfmt (logfmt)

在底层,此扩展使用了 flog 库的一个分支来生成日志行。

标签

xk6-loki 使用以下标签名称生成流

nametypecardinality
instance固定每个 k6 worker 1 个
format固定7
os固定3
namespace变量>100
app变量>100
pod变量>100
language变量>100
word变量>100

默认情况下不使用变量标签。但是,您可以在 Config 构造函数中使用 cardinality 参数指定基数(不同标签值的数量)。

Javascript 示例代码片段

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

const cardinality = {
   "app": 1,
   "namespace": 2,
   "language": 2,
   "pod": 5,
};
const conf = loki.Config("https://:3100", 5000, 1.0, cardinality);
const client = loki.Client(conf);

不同流的总数量由所有标签值的笛卡尔积定义。请记住,高基数会对 Loki 实例的性能产生负面影响。

有效载荷编码

Loki 接受两种推送有效载荷编码:JSON 和 Protobuf。虽然 JSON 对人类更友好,但 Protobuf 针对性能进行了优化,应优先选择使用。

要定义 Protobuf 与 JSON 请求的比例,客户端配置接受 0.0 到 1.0 的值。0.0 表示 100% JSON 编码,1.0 表示 100% Protobuf 编码。

默认值为 0.9。

Javascript 示例代码片段

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

const ratio = 0.8; // 80% Protobuf, 20% JSON
const conf = loki.Config("https://:3100", 5000, ratio);
const client = loki.Client(conf);