k6 Loki extension load testing
Grafana k6 is a modern load-testing tool. Its clean and approachable scripting API works locally or in the cloud. Its configuration makes it flexible.
The xk6-loki extension permits pushing logs to and querying logs from a Loki instance. It acts as a Loki client, simulating real-world load to test the scalability, reliability, and performance of your Loki installation.
Before you begin
k6 is written in Golang. Download and install a Go environment.
Installation
xk6-loki
is an extension to the k6 binary.
Build a custom k6 binary that includes the xk6-loki
extension.
-
Install the
xk6
extension bundler:go install go.k6.io/xk6/cmd/xk6@latest
-
Check out the
grafana/xk6-loki
repository:git clone https://github.com/grafana/xk6-loki cd xk6-loki
-
Build k6 with the extension:
make k6
Usage
Use the custom-built k6 binary in the same way as a non-custom k6 binary:
./k6 run test.js
test.js
is a Javascript load test.
Refer to the k6 documentation to get started.
Scripting API
The custom-built k6 binary provides a Javascript loki
module.
Your Javascript load test imports the module:
import loki from 'k6/x/loki';
Classes of this module are:
class | description |
---|---|
Config |
configuration for the Client class |
Client |
client for writing and reading logs from Loki |
Config
and Client
must be called on the k6 init context (see
Test life cycle) outside of the
default function so the client is only configured once and shared between all
VU iterations.
The Client
class exposes the following instance methods:
method | description |
---|---|
push() |
shortcut for pushParameterized(5, 800*1024, 1024*1024) |
pushParameterized(streams, minSize, maxSize) |
execute push request (POST /loki/api/v1/push) |
instantQuery(query, limit) |
execute instant query (GET /loki/api/v1/query) |
client.rangeQuery(query, duration, limit) |
execute range query (GET /loki/api/v1/query_range) |
client.labelsQuery(duration) |
execute labels query (GET /loki/api/v1/labels) |
client.labelValuesQuery(label, duration) |
execute label values query (GET /loki/api/v1/label/<name>/values) |
client.seriesQuery(matchers, duration) |
execute series query (GET /loki/api/v1/series) |
Javascript load test example:
import loki from 'k6/x/loki';
const timeout = 5000; // ms
const conf = loki.Config("http://localhost:3100", timeout);
const client = loki.Client(conf);
export default () => {
client.pushParameterized(2, 512*1024, 1024*1024);
};
Refer to
grafana/xk6-loki
for the complete k6/x/loki
module API reference.
Related Enterprise Logs resources
Grafana Enterprise Logs: Logging with security and scale
Join us for this webinar, which will cover: Challenges with logging as organizations scale and the volume of logs explodes, how Grafana Enterprise Logs enables organizations to make logs available to any team members who need them, features available in GEL and how to get access, a live product demo so you can see GEL for the first time
VIDEO: Watch this first-look demo of the new Grafana Enterprise Logs
Based on Loki, Grafana Enterprise Logs is part of the Grafana Enterprise Stack for composing and scaling observability on your own infrastructure.
Introducing Grafana Enterprise Logs, a core part of the Grafana Enterprise Stack integrated observability solution
Powered by the Loki open source project, the Enterprise Logs offering joins metrics and dashboards in our enterprise-ready stack for self-managed observability.