Начало работы
Thresholds — SLO-пороги
Прогон падает, если задержка или доля ошибок нарушила SLO — шаг std/thresholds@v1 в after-блоке, k6-выражения, exit-коды для CI
Thresholds превращают нагрузочный тест в SLO-порог: после всех итераций движок вычисляет выражения по агрегированным метрикам прогона и валит прогон при нарушении. В CI это ненулевой exit-код — пайплайн краснеет ровно тогда, когда сервис стал медленнее, а не когда кто-то прочитал отчёт.
1. Объявите порог
Пороги — это шаг в after:-блоке сценария:
config:
vus: 10
duration: 1m
steps:
- name: query
use: std/db-query@v1
with:
id: ${{ conn.id }}
query: SELECT * FROM orders WHERE created > $1
params: ["2026-01-01"]
after:
- name: slo gate
use: std/thresholds@v1
with:
db_query_duration: ["p95<500", "max<2000"]
db_query_failed: ["rate<0.05"]
db_errors: ["count==0"]
severity: fail
message: "checkout SLO"
Выражения — строки в стиле k6: <агрегация><оператор><число>.
- Агрегации:
avg,min,max,p50,p90,p95,p99,count,rate. - Операторы:
<,<=,>,>=,==,!=. - Метрики длительностей (
http_req_duration,ws_msg_rtt,grpc_req_duration,db_connect_duration,db_query_duration, …) поддерживают перцентили и среднее. Метрики ошибок (*_failed) поддерживаютrate— доля упавших вызовов шага от всех его вызовов. Счётчики (db_errors) поддерживаютcount.
2. Статус, сообщение, exit-код
severity: fail(по умолчанию) — нарушенный порог ставит статус fail, и CLI завершается с кодом 1 (error: thresholds failed: …).severity: warn/info— нарушение записывается и показывается, но exit-код остаётся 0.message— необязательная подпись порога (интерполируется). Движок сам собирает сводку нарушений (db_query_duration p95=612ms ≥ 500ms; …) и обрезает итог до 200 символов.
Тот же блок попадает в summary JSON прогона (--summary-export):
"thresholds": {
"status": "fail",
"message": "db_query_duration p95=614.40ms ≥ 500ms; checkout SLO",
"violations": [{ "metric": "db_query_duration", "expr": "p95<500", "actual": 614.4 }]
}
На платформе страница прогона показывает карточку порогов со статусом и
нарушениями, а при падении порога срабатывает webhook-событие
run.threshold_failed — направьте его в чат или систему алертинга.
3. Заметки
- Пороги читают те же агрегаты HDR-гистограммы, что и текстовая сводка, — числа в выводе прогона и числа порога совпадают.
- Порог по несуществующей метрике валит прогон с config error — опечатка в имени не сможет «молча пропустить» ваш SLO.
- Для точечных проверок одного ответа (а не всего прогона) используйте
std/check@v1на самом шаге — thresholds про распределение.
Дальше
- Тестирование баз данных — db-метрики для порогов
- gRPC-тестирование — grpc-метрики для порогов
- CI/CD — exit-код в вашем пайплайне