====== 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|Исходники]]**