How to configure extension xk6-Prometheus for distributed testing

We would like to use the xk6-Prometheus extension to make test metrics available for Prometheus.

k6 is being used for distributed testing with TestRun CRD. So far, it hasn’t been possible to provide the generated metrics through TestRun CRD via the extension (pls find config below).

Environment
Extension xk6-prometheus: GitHub - szkiba/xk6-prometheus: Prometheus HTTP exporter for k6
kube-prometheus-stack: Version 61.1.0

Question
Is there a guide on how to use or configure the extension in conjunction with TestRun CRD?

Configurations
Here, I’d like to share my configurations:

Dockerfile - Image creation with the xk6-Prometheus extension

FROM grafana/xk6:0.11.0 as builder

# Build k6 with extensions
RUN xk6 build \
    --with github.com/szkiba/xk6-prometheus@latest \
    && cp k6 $GOPATH/bin/k6

# Use Alpine as the final image
FROM alpine:3.13

# Install CA certificates and create a non-root user
RUN apk add --no-cache ca-certificates && \
    adduser -D -u 12345 -g 12345 k6

# Copy the k6 binary from the builder stage
COPY --from=builder /go/bin/k6 /usr/bin/k6

# Set the user to run the container
USER 12345

# Set the entrypoint to k6
ENTRYPOINT ["k6"]

TestRund CRD - Prometheus HTTP exporter will accessible on port 5656 (default)

apiVersion: k6.io/v1alpha1
kind: TestRun
metadata:
  name: k6-test-run
  namespace: testing
  labels:
    app: k6-test-run
    release: kube-prometheus-stack
spec:
  parallelism: 1
  script:
    configMap:
      name: k6-config-map
      file: script.js
  arguments: -o prometheus
  ports:
    - name: prometheus
      containerPort: 5656
  runner:
    image: k6-extensions:1.0.1
    env:
      - name: K6_OUT
        value: prometheus

ServiceMonitor CRD (Prometheus)

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: k6-prometheus-monitor
  namespace: monitoring
  labels:
    app: kube-prometheus-stack
    release: kube-prometheus-stack
spec:
  endpoints:
    - port: prometheus
      path: /metrics
      interval: 15s
  namespaceSelector:
    any: true  # or specify the namespace if needed
  selector:
    matchLabels:
      app: k6-test-run
      release: kube-prometheus-stack

I’m afraid this won’t work, it’s due to architectural reasons.

The xk6-prometheus extension does not perform distributed metric collection, so it cannot be used with the k6-operator. It is unlikely that this will change in the near future.

1 Like

Thank you for your quick reply. It is good to know that this extension does not currently work with k6-operator.