k6 тест может генерировать множество метрик. Большое количество метрик подразумевает получение достаточного количества данных для анализа и больше возможностей выявить и сопоставить снижение производительности. Однако избыток данных может затруднить анализ и принятие решений.
Когда объём тестовых метрик велик, важным инструментом анализа тестирования производительности становится визуализация. К счастью, помимо генерации множества метрик, Grafana k6 поддерживает различные форматы вывода. Эти данные могут быть использованы в качестве входных данных для различных систем хранения и инструментов визуализации.
k6 отличается гибкостью: он позволяет представлять данные так, как это наиболее целесообразно для ваших целей тестирования и рабочего окружения. Итоговый отчёт теста можно преобразовать в графический обзор или визуализировать CSV-вывод в электронной таблице. Помимо этого, результаты можно передавать в структурированном формате, например, через Prometheus remote-write, и визуализировать их с помощью фронтенд-инструментов, таких как Grafana. k6 также поддерживает расширения, поэтому, если встроенные форматы вывода не удовлетворяют вашим требованиям, можно разработать собственное расширение.
Существует множество способов визуализации результатов k6 тестов.
Рекомендации по визуализации результатов
В этом разделе рассмотрим ключевые метрики для визуализации и общие рекомендации по визуальным индикаторам производительности системы.
Ключевые метрики для визуализации
Прежде чем двигаться дальше, задайте себе вопрос: какова цель вашего теста? Каждая метрика даёт разную перспективу производительности теста, поэтому выбор наиболее подходящих метрик зависит от ваших целей.
Однако если вы не уверены, на каких метриках следует сосредоточиться, можно отталкиваться от метрик, измеряющих число запросов, уровень ошибок и длительность запросов (основные критерии метода RED):
http_reqs
— измеряет количество запросовhttp_req_failed
— измеряет уровень ошибокreq_duration
— измеряет длительность запросов
Примечание: В другой терминологии эти метрики соответствуют трафику (в запросах), доступности (в уровне ошибок) и задержке (в длительности запроса). Специалисты по SRE могут узнать в них три из четырёх «золотых сигналов».
Помимо встроенных метрик вам, вероятно, также потребуется визуализировать результаты проверок (checks) и кастомные метрики. Если их нет в ваших тестовых результатах, подумайте, нужны ли они вашему сценарию.
Стабильная производительность обычно отображается в виде горизонтальной линии
Стабильная производительность системы, как правило, остаётся неизменной. В визуализациях такое поведение проявляется в виде горизонтальных линий.
Часто сравнивают показатели пропускной способности с длительностью запросов или уровнем ошибок. Например, если система сохраняет доступность при увеличении нагрузки, уровень ошибок должен оставаться на одном уровне, даже когда количество запросов в секунду (RPS) возрастает. Если же система теряет доступность под нагрузкой, уровень ошибок будет расти вместе с RPS.
Обычно доступность и задержка системы остаются стабильными до определённого уровня нагрузки, после чего резко ухудшаются. На графике такое ухудшение проявляется в виде резкого подъёма. В некоторых публикациях по тестированию производительности этот эффект называют «точкой перегиба» (knee).
![](https://habrastorage.org/getpro/habr/upload_files/f1b/61b/d84/f1b61bd84ee4c9cb3d6c12e5ff3543fc.png)
Визуализация итоговых сводок теста
Прежде чем переходить к детализированной визуализации результатов, стоит отметить, что k6 также формирует агрегированные статистические данные в итоговой сводке теста. С помощью функции handleSummary()
можно создать кастомную сводку.
Если вам нужен только общий обзор производительности, handleSummary
поможет сформировать графическое представление результатов. Например, в сообществе k6 существует проект k6-reporter, который создаёт HTML-отчёт по итогам теста.
Однако у итоговых сводок есть ограничения в глубоком анализе. Они агрегируют данные за весь тест и не позволяют отслеживать изменения во времени. Для этого необходимы более детализированные данные.
Детализированные форматы вывода и визуализации
На каждом этапе теста k6 генерирует метрики с их значениями и временными метками. k6 может структурировать этот вывод в различных форматах. Данные можно передавать в потоковом режиме в сервис, записывать в файл или делать и то, и другое одновременно.
Можно выбрать структуру и инструмент визуализации, которые соответствуют вашему рабочему процессу. Например, типичный процесс обработки данных включает следующие этапы:
k6 выводит метрики в определённом формате и отправляет их агенту, который может принять этот формат.
Агент передаёт метрики в базу данных для хранения.
Фронтенд запрашивает данные из базы и визуализирует их.
![](https://habrastorage.org/getpro/habr/upload_files/3c4/2b7/ebd/3c42b7ebd2dc8a4c2733b95eb74576c3.png)
Синтаксис
Выходные форматы и места назначения для k6 задаются с помощью флага --out
в команде k6 run. Аргумент принимает форму <key>=<value>
(<ключ>=<значение>), где ключ — это тип выходного формата, а значение — путь к файлу или удалённый адрес. В одном скрипте можно передавать несколько выходных форматов.
Например, следующая команда выводит результаты одновременно в формате JSON, записывая их в файл test.json
, и в формате InfluxDB, отправляя их в порт на localhost
.
k6 run script.js \
--out json=test.json \
--out influxdb=http://localhost:8086/k6
Локальные файлы
Форматы CSV и JSON поддерживаются наибольшим количеством инструментов. Многие библиотеки и программы могут строить графики на основе данных в этих форматах, поэтому они дают максимальную гибкость для визуализации.
CSV
Чтобы вывести результаты k6 в формате CSV, укажите CSV как ключ аргумента и путь к файлу как значение:
k6 run --out CSV=file.csv script.js
Визуализировать данные из CSV можно различными способами: с помощью электронных таблиц, Tableau или множества других инструментов с открытым исходным кодом. Один из примеров — GNUplot.
За структурой вывода в формате CSV обратитесь к разделу документации о CSV-выводе.
JSON
Чтобы вывести результаты k6 в формате JSON, используйте json в качестве ключа, а путь к файлу — в качестве значения аргумента:
k6 run --out json=file.json script.js
Как и в случае с CSV, для JSON-файлов доступны различные инструменты визуализации. Например, популярная библиотека ChartJS для JavaScript или pandas, если вы работаете в Python.
За структурой вывода в формате JSON обратитесь к соответствующему разделу документации.
Серверные события с xk6-dashboard
Для первой визуализации мы хотим выделить отличный проект сообщества — xk6-dashboard
. Этот инструмент запускает локальный веб-сервер и в реальном времени визуализирует метрики во время выполнения теста.
![](https://habrastorage.org/getpro/habr/upload_files/227/9ec/d27/2279ecd277b44cd646647387e8f112c1.png)
Вы можете использовать его как любое другое расширение:
1. Установите xk6:
go install go.k6.io/xk6/cmd/xk6@latest
2. Соберите бинарный файл:
xk6 build --with github.com/szkiba/xk6-dashboard@latest
3. Запустите тест с кастомным бинарником, используя dashboard в качестве аргумента --out:
./k6 run --out dashboard script.js
4. Перейдите в браузере на локальный сервер и наблюдайте за результатами в реальном времени. По умолчанию дашборд доступен по адресу: http://127.0.0.1:5665/
Актуальные инструкции можно посмотреть в репозитории xk6-dashboard. Если вы хотите создать свой собственный инструмент визуализации, исходный код этого проекта может послужить хорошей основой.
Форматы потокового вывода
k6 также может отправлять метрики в режиме, близком к реальному времени, в различных форматах. Это позволяет мониторить тесты в процессе их выполнения или сохранять результаты для последующей визуализации.
Prometheus Remote Write (PrometheusRW)
k6 имеет встроенную поддержку вывода результатов с использованием протокола Prometheus remote-write. Это открывает множество возможностей для удалённых конечных точек и хранения данных.
Для визуализации можно использовать Grafana — либо в Grafana Cloud, либо в самостоятельно развёрнутом экземпляре.
![](https://habrastorage.org/getpro/habr/upload_files/cb4/a50/0d0/cb4a500d0fc88e1a1616ee7d044e1cbf.png)
Подробные инструкции по отправке метрик и их визуализации см. в документации k6 о Prometheus Remote Write.
StatsD
k6 также может выступать в качестве клиента для демона statsD. k6 предоставляет инструкции по использованию вывода в формате statsD для отправки метрик k6 в различные сервисы, включая:
![](https://habrastorage.org/getpro/habr/upload_files/360/3f6/836/3603f6836672fbb8782be8d6d13f456c.png)
![](https://habrastorage.org/getpro/habr/upload_files/5b8/d1c/432/5b8d1c4329d26155f155cbcfa4b90620.png)
![](https://habrastorage.org/getpro/habr/upload_files/4f2/08d/32b/4f208d32b796616865820e9753268fe7.png)
![](https://habrastorage.org/getpro/habr/upload_files/d44/c93/5fb/d44c935fb512321f5f3879e8885e04b4.png)
Параметры, относящиеся к StatsD, можно посмотреть в документации k6 по StatsD.
Другие форматы вывода данных, предназначенные для конкретных инструментов
k6 также поддерживает вывод результатов в различные агенты или базы данных с помощью встроенных форматов или расширений. Среди доступных опций:
Дашборды Grafana
Помимо Prometheus Remote Write, k6 позволяет передавать результаты, которые затем можно визуализировать в Grafana. В Grafana можно создавать кастомные дашборды и запрашивать данные из любого бэкенда.
Уже существует множество готовых дашбордов, созданных сообществом. Кроме того, для следующих хранилищ данных доступны преднастроенные дашборды Grafana:
Grafana Cloud k6: управляемое решение для тестирования производительности
Существует множество инструментов нагрузочного тестирования, а также сервисов для мониторинга производительности. Однако отдельно стоит упомянуть облачное решение Grafana Cloud k6.
Помимо гибкости, Grafana Cloud k6 предлагает несколько стандартных визуализаций с ключевыми метриками. Более того, результаты можно интегрировать с другими дашбордами, чтобы сопоставлять их с другими данными наблюдаемости системы.
Подробнее о сервисе можно узнать в документации Grafana Cloud k6.
Один тест — несколько вариантов вывода данных
k6 является расширяемым инструментом, который позволяет передавать метрики в разных форматах. На основе этих хранилищ данных вы можете создать собственную визуализацию или использовать готовый инструмент для визуализации.
Если в k6 нет нужного формата вывода, вы можете разработать собственное расширение.
Подробнее:
Документация по форматам вывода
13 февраля пройдёт открытый урок на тему: «Работа с Ultimate Thread Group в JMeter. Расчёт параметров теста».
На этом занятии вы узнаете, как пользоваться инструментом, а также получите Excel-таблицу, которая проведёт расчёт параметров за вас. Записаться можно на странице курса «Нагрузочное тестирование».
Список всех бесплатных уроков по тестированию, разработке и другим ИТ-направлениям можно посмотреть в календаре.