Conteneur k6, Grafana et InfluxDB2 pour des tests de montée en charge
L'emploi d'un conteneur dans le contexte de tests de charge permet de réduire l'effort et les ressources nécessaires pour leur mise en place et leur exécution.
K6, Grafana et InfluxDB offrent une base extensible d'outils et de standards libres permettant de réaliser cela sous Docker.
Conteneur K6 avec extension InfluxDB 2
Uniquement la version 1 de InfluxDB est nativement supportée dans K6, c'est pour cela que le conteneur K6 rajoute l'extension de la version 2.
Dockerfile
FROM golang:1.23 as builder
WORKDIR /app
RUN go install go.k6.io/xk6/cmd/xk6@latest
RUN /go/bin/xk6 build --with github.com/grafana/xk6-output-influxdb
RUN chmod 777 k6
FROM grafana/k6:latest
COPY --from=builder /app/k6 /app/k6
ENTRYPOINT ["/app/k6"]
CMD ["run"]
WORKDIR /app
RUN go install go.k6.io/xk6/cmd/xk6@latest
RUN /go/bin/xk6 build --with github.com/grafana/xk6-output-influxdb
RUN chmod 777 k6
FROM grafana/k6:latest
COPY --from=builder /app/k6 /app/k6
ENTRYPOINT ["/app/k6"]
CMD ["run"]
docker-compose.yml
Et grâce à docker-compose on peut construire et interconnecter tous les services:
version: '3'
services:
influxdb:
image: influxdb:latest
container_name: influxdb
environment:
- INFLUXDB_DB=k6 # Créer une base de données 'k6' automatiquement
- INFLUXDB_ADMIN_USER=admin # identifiant administrateur
- INFLUXDB_ADMIN_PASSWORD=adminpassword # mot de passe administrateur
- INFLUXDB_HTTP_AUTH_ENABLED=true # Activer l'authentication pour InfluxDB
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=user # identifiant utilisateur pour la connexion à l'interface utilisateur web
- DOCKER_INFLUXDB_INIT_PASSWORD=userpassword # mot de passe utilisateur
- DOCKER_INFLUXDB_INIT_ORG=my_organization # nom de votre organisation. Utilisée par Telegraf
- DOCKER_INFLUXDB_INIT_BUCKET=my_organization_bucket # le bucket par défaut
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-auth-token # le jeton de sécurité utilisé par K6 pour utiliser l'API de Telegraf
ports:
- "8086:8086" # le port du service
volumes:
- ./influxdb-data:/var/lib/influxdb2:rw # Pour le stockage permanent des données InfluxDB
grafana:
image: grafana/grafana:latest
container_name: grafana
depends_on:
- influxdb
environment:
- GF_SECURITY_ADMIN_USER=admin # identifiant utilisateur pour la connexion à l'interface utilisateur web
- GF_SECURITY_ADMIN_PASSWORD=adminpassword # mot de passe utilisateur
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_BASIC_ENABLED=false
command: |
chown grafana:root /var/lib/grafana/dashboards && \
chown grafana:root /etc/grafana/provisioning
ports:
- "3000:3000"
volumes:
- ./dashboards:/var/lib/grafana/dashboards # le répertoire contentant le tableau de bord par défaut
- ./provisioning:/etc/grafana/provisioning # le répertoire pour configurer grafana afin de situer où sont les fichiers du tableau de bord et les données InfluxDB
- ./grafana.ini:/etc/grafana/grafana.ini # fichier contenant les configuration par défaut de grafana
k6-with-influxdb2:
build:
context: . # Le répertoire où est situé le Dockerfile créé ci-dessus.
dockerfile: Dockerfile # Le fichier Dockerfile (qui compile K6 avec l'extension InfluxDB2)
image: k6-with-influxdb2 # Nom de l'image résultante.
# entrypoint: /bin/sh # enlever les deux lignes de commentaire pour permettre de débuger (permet d'avoir un shell dans le conteneur)
# user: root
depends_on:
- influxdb # dépend de l'image influxdb pour les données.
volumes:
- ./scripts:/scripts # répertoire dans lequel sera stocké les scripts K6 pour les tests de charge.
command: |
chown -R root:root /scripts
environment:
- K6_INFLUXDB_ADDR=http://influxdb:8086 # pointer vers la base de données influxdb2
- K6_INFLUXDB_INSECURE=true # pas de SSL
- K6_INFLUXDB_BUCKET=my_organization_bucket
- K6_INFLUXDB_USERNAME=admin
- K6_INFLUXDB_PASSWORD=adminpassword
- K6_INFLUXDB_ORGANIZATION=my_organization
- K6_INFLUXDB_TOKEN=my-super-secret-auth-token
volumes:
influxdb-data:
dashboards:
provisioning:
scripts:
services:
influxdb:
image: influxdb:latest
container_name: influxdb
environment:
- INFLUXDB_DB=k6 # Créer une base de données 'k6' automatiquement
- INFLUXDB_ADMIN_USER=admin # identifiant administrateur
- INFLUXDB_ADMIN_PASSWORD=adminpassword # mot de passe administrateur
- INFLUXDB_HTTP_AUTH_ENABLED=true # Activer l'authentication pour InfluxDB
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=user # identifiant utilisateur pour la connexion à l'interface utilisateur web
- DOCKER_INFLUXDB_INIT_PASSWORD=userpassword # mot de passe utilisateur
- DOCKER_INFLUXDB_INIT_ORG=my_organization # nom de votre organisation. Utilisée par Telegraf
- DOCKER_INFLUXDB_INIT_BUCKET=my_organization_bucket # le bucket par défaut
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-auth-token # le jeton de sécurité utilisé par K6 pour utiliser l'API de Telegraf
ports:
- "8086:8086" # le port du service
volumes:
- ./influxdb-data:/var/lib/influxdb2:rw # Pour le stockage permanent des données InfluxDB
grafana:
image: grafana/grafana:latest
container_name: grafana
depends_on:
- influxdb
environment:
- GF_SECURITY_ADMIN_USER=admin # identifiant utilisateur pour la connexion à l'interface utilisateur web
- GF_SECURITY_ADMIN_PASSWORD=adminpassword # mot de passe utilisateur
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_BASIC_ENABLED=false
command: |
chown grafana:root /var/lib/grafana/dashboards && \
chown grafana:root /etc/grafana/provisioning
ports:
- "3000:3000"
volumes:
- ./dashboards:/var/lib/grafana/dashboards # le répertoire contentant le tableau de bord par défaut
- ./provisioning:/etc/grafana/provisioning # le répertoire pour configurer grafana afin de situer où sont les fichiers du tableau de bord et les données InfluxDB
- ./grafana.ini:/etc/grafana/grafana.ini # fichier contenant les configuration par défaut de grafana
k6-with-influxdb2:
build:
context: . # Le répertoire où est situé le Dockerfile créé ci-dessus.
dockerfile: Dockerfile # Le fichier Dockerfile (qui compile K6 avec l'extension InfluxDB2)
image: k6-with-influxdb2 # Nom de l'image résultante.
# entrypoint: /bin/sh # enlever les deux lignes de commentaire pour permettre de débuger (permet d'avoir un shell dans le conteneur)
# user: root
depends_on:
- influxdb # dépend de l'image influxdb pour les données.
volumes:
- ./scripts:/scripts # répertoire dans lequel sera stocké les scripts K6 pour les tests de charge.
command: |
chown -R root:root /scripts
environment:
- K6_INFLUXDB_ADDR=http://influxdb:8086 # pointer vers la base de données influxdb2
- K6_INFLUXDB_INSECURE=true # pas de SSL
- K6_INFLUXDB_BUCKET=my_organization_bucket
- K6_INFLUXDB_USERNAME=admin
- K6_INFLUXDB_PASSWORD=adminpassword
- K6_INFLUXDB_ORGANIZATION=my_organization
- K6_INFLUXDB_TOKEN=my-super-secret-auth-token
volumes:
influxdb-data:
dashboards:
provisioning:
scripts:
Lancer le tests de charge K6
Une fois que l'image est construite et les conteneurs lancés avec la commande docker-compose up, les scripts de tests de charge peuvent être stockés dans le répertoire local ./scripts et lancés avec la commande:
sudo docker-compose run --rm k6-with-influxdb2 run ./scripts/mon_test_charge.js -o xk6-influxdb
Aller plus loin.
Bien entendu il faudra adapter l'exemple pour prendre en compte les paramètres et contraintes de sécurité exigés, mais on
pourrait certainement étendre le concept pour l'intégrer dans
un contexte d'orchestration de services conteneurisés, par exemple dans
un pipleline CI/CD.
0 Comments:
Enregistrer un commentaire
<< Home