Концепции
Стриминг живых метрик
Метрики во время прогона — что движок шлёт, пока тест работает, как доставка спроектирована, чтобы не мешать генератору нагрузки, и как читать данные вживую или из Grafana
Обзор
Прогон наблюдаем, пока он ещё подаёт нагрузку — а не только когда придёт итоговая сводка. Движок на машине каждые несколько секунд снимает кумулятивный снапшот всех собранных метрик и стримит его на платформу; страница прогона рисует графики по мере прихода сэмплов, а тот же поток питает дашборд Metrics, Prometheus-совместимый query API и Remote Write. Никаких InfluxDB и внешних коллекторов — поток встроен в сам прогон.
Как включить
Добавьте блок report: с during_run: true в Configuration, с которой
запускается тест, — в редакторе конфигураций для этого есть сниппет
During-run metrics:
report:
during_run: true # по умолчанию false — только итоговая сводка
interval_ms: 5000 # интервал снапшотов/флаша, минимум 1000
batch_size: 500 # запечатать батч при таком числе сэмплов
max_cpu_percent: 90 # CPU-гейт; 0 отключает его (Linux)
max_pending: 24 # мягкий предел — предупреждение, батчи не выбрасываются
Остальное делает агент: он аутентифицирует поток машинным токеном и метит
каждый сэмпл лейблами task_id и machine_id, так что распределённый прогон
чисто раскладывается по генераторам нагрузки.
Стриминг работает для нативного движка. Скрипты k6, JMeter и Locust по-прежнему дают нормализованную итоговую сводку и живые логи, но during-run сэмплы не стримят.
Что шлёт движок
Каждый снапшот разворачивает все семейства метрик прогона в сэмплы по конвенциям Prometheus (длительности в секундах):
| Метрика движка | Отправляемые сэмплы |
|---|---|
Гистограмма (http_req_duration, свои тренды) | <name>{quantile="0.5"/"0.9"/"0.95"/"0.99"}, <name>_count, <name>_sum |
| Счётчик | <name>_total |
Доля ошибок (http_req_failed, …) | <name>_total (вызовы), <name>_failed_total (ошибки) |
GPU-гауг (при gpu.enabled) | gpu_utilization_pct, gpu_memory_used_mib, gpu_temperature_c, gpu_power_w по устройствам — на Apple Silicon также ane_power_w, cpu_power_w, package_power_w |
Пользовательские метрики ваших шагов — латентность gRPC, время запросов к БД,
llm_ttft_ms, счётчики WebSocket — подхватываются автоматически; настраивать
ничего не нужно.
Снапшоты кумулятивные (гистограммы и счётчики не сбрасываются в середине прогона); платформа диффает соседние снапшоты, чтобы рисовать значения за интервал. GPU-гауги — точечные значения и чартятся как есть.
Как ведёт себя доставка
Батч запечатывается при batch_size сэмплов или по тику interval_ms — что
наступит раньше — и уходит на платформу со строго возрастающим seq.
Ингест дедуплицирует по (task_id, seq), так что переотправленный батч
никогда не задвоит данные. Когда прогон завершается, всё оставшееся в очереди
сливается (финальный дренаж, предел 30 секунд), а следом приходит обычная
итоговая сводка.
Защита генератора нагрузки
Shipper живёт по одному правилу: генерация нагрузки всегда важнее отчётности о ней.
- Движок никогда не блокируется на метриках — снапшоты идут через ограниченный канал, а переполненный канал выбрасывает снапшот, а не тормозит виртуальных пользователей.
- CPU-гейт: пока busy-CPU машины держится на уровне
max_cpu_percentили выше (по умолчанию 90%, Linux), shipper придерживает все батчи и складывает входящие снапшоты в очередь, а не выбрасывает их — ноль отправок, пока машина не придёт в себя, затем накопленные точки уходят по порядку. Если генератор упёрся в потолок, perfscale замолкает, а не дерётся с виртуальными пользователями за последние ядра. - Точки не выбрасываются в середине прогона: запечатанные, но
недоставленные батчи хранятся, сколько бы ни длился сбой.
max_pending— мягкий предел: при превышении пишется предупреждение, а доставка продолжается по порядку, как только платформа отвечает. - Сетевые ошибки, 5xx и 429 ретраят тот же батч с тем же
seq(бэкофф с потолком 60 с); любой другой 4xx выбрасывает отравленный батч и идёт дальше.
Полный инженерный контракт — в OSS-справочнике: During-run metrics.
Как читать метрики
- Страница прогона — графики рисуются по мере прихода сэмплов: перцентили задержки, пропускная способность, доля ошибок, кривые GPU. Без обновления страницы и ожидания сводки.
- Дашборд Metrics — определяет протокол прогона по стримящимся семействам и подставляет подходящий набор плиток (Протокольные метрики).
- Grafana — платформа отдаёт Prometheus-совместимый query API. Settings →
Integrations показывает URL датасорса
(
<инстанс>/api/v1/integrations/prometheus); аутентификация — персональным API-токеном из Settings → Keys (Authorization: Bearer psk_…). Запрашивайте как любой Prometheus —rate(http_req_duration_count[1m]), раскладка поmachine_idи т.д. - Remote Write — удобнее своё хранилище? Settings → Integrations → Prometheus Remote Write пушит каждый принятый сэмпл в ваш Prometheus, Mimir, VictoriaMetrics или Grafana Cloud, с опциональной basic/bearer аутентификацией.
Дальше
- Прогоны и живые метрики — жизненный цикл задачи вокруг потока.
- Переменные окружения — держите секреты вне скриптов и логов.
- OSS: справочник метрик — семейства метрик движка и полный during-run контракт.
- OSS: справочник YAML — все ручки
report:.