====== K6: Нагрузочное тестирование сайтов ======
Для нагрузочного тестирования сайтов существует популярное и удобное решение от Grafana - **[[https://github.com/grafana/k6|k6]]** . Покажу, как это выглядит на практике.
{{ https://fatalex.cifro.net//lib/plugins/ckgedit/fckeditor/userfiles/image/devops/2024-05-0809.40.27.jpg?nolink&1906x1272 |2024-05-0809.40.27.jpg}}
K6 много чего умеет. Он вообще очень развитый и продвинутый инструмент, где тесты можно писать в том числе на **JavaScript**. Продукт позиционирует себя как **Tests as code**. Его легко поднять и начать тестирование, используя готовые примеры. Показываю на практике.
Поднимаем связку Grafana + Influxdb:
git clone https://github.com/grafana/k6 && cd k6
Там готовый docker-compose.yml. В принципе, можно ничего не менять, конфиг простой, без необходимости указания переменных. Запускаем связку:
docker compose up -d influxdb grafana
Можно сходить, проверить графану по стандартному урлу и порту: [[http://server-ip:3000/login|http://server-ip:3000/login]]. Учётка стандартная - admin / admin. В графане уже должен быть настроен в Data sources myinfluxdb с урлом из соседнего контейнера.
Теперь нужно выбрать Dashboard. Их очень много разных для k6, [[https://grafana.com/grafana/dashboards/?search=k6|выбирайте любой]]. Наиболее функциональный и удобный [[https://grafana.com/grafana/dashboards/13719-k6-load-testing-results-by-groups/|вот этот]], за счёт того, что там есть группировка по тэгам, группам, урлам. Идём в
**Dashboards ⇨ Import ⇨ ID 13719** .
Всё готово для запуска тестов. В репозитории, в директории examples очень много примеров. Эта директория мапится в контейнер с k6 в docker-compose. Тест можно запустить вот так:
docker compose run k6 run /scripts/stages.js
Данные сразу потекут в Influxdb, так что их сразу можно наблюдать в Grafana. Тест не обязательно запускать на этой же машине. Можно из любого другого места, а передать данные через отдельный параметр. Примерно так:
k6 run --out influxdb=http://1.2.3.4:8086 stages.js
Вот пример простого конфига для теста в 10 потоков в течении 30 секунд:
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
vus: 10,
duration: '30s',
};
export default function () {
http.get('https://test.k6.io');
sleep(1);
}
Соответственно, конфиг легко расширяется дополнительными урлами, тестами, выполняемыми действиями. У продукта хорошая документация и много [[https://grafana.com/docs/k6/latest/examples/|готовых примеров]]. Знать JavaScript не обязательно.
**[[https://k6.io/|Сайт]]** / **[[https://github.com/grafana/k6|Исходники]]**