Яндекс.танк — инструмент нагрузочного тестирования

28 июля на я.субботнике был представлен новый инструмент для нагрузочного тестирования Яндекс.танк. Это внутреняя разработка яндекса, которая наконец-то вышла в свет. Видел я этот танк ещё на YaC 2011, когда были соревнования по конфигурированию nginx.

Это консольный инструмент, пока не имеющий графического интерфейса, но дающий довольно полную картину в этой самой консоли.

Вот сам интерфейс:

yandex-tank-good

Сам проект и документация находится на github’е: https://github.com/yandex-load/yandex-tank

В кратце обрисую возможности:

Можно нагружать одну страницу или сразу список урлов (которые будут запрашиваться примерно в одинаковых соотношениях).

А можно самому составить список запросов со своими заголовками. Например, можно реализовать нагрузку от запросов от анонимных пользователей и залогиненных. Через скрипт (php, python, bash, etc) залогиниться на сайте и получить нужные куки. Сгенерировать в нужном формате данные для танка и запустить тест.

Танк позволяет создать 3 вида нагрузки:

  • Постоянная - указывается количество запросов и время
  • Линейный рост - указывается начальное и конечное значение и время
  • Рост шагами - указывается начальное и конечное значение, шаг увеличения нагрузки и время.

Причём эти виды нагрузки можно комбинировать в одном тесте.

Особенно хочеться отметить простоту и понятность синтаксиса.

#Подогреваем кэш
load = const(1, 10s)
# Линейно увеличиваем нагрузку с одного запроса в секунду до 10 в течение 2 минут
load = line(1, 10, 2m)
# Начинаем нагружать 10 запросами в секунду в течение 1 минуты, потом увеличиваем на 5 запросов и так до 40. Т.е. на каждый шаг будет затрачено по минут
load = line(10, 40, 5, 1m)
# Указываем нагружаемых хост, только ip (!)
address = 192.168.100.254:80
# Посылаемые заголовки
header = [Host: test.server]
header = [Connection: close]
header_http = 1.1
# Нагружаемые страницы
uri = / uri = /another_page/

Вот что случается, когда сервер не справляется:

yandex-tank-good

Думаю, что проект со временем будет обрастаться графическими интерфейсами, разработанными самим яндексом или сообществом.

Я даже уже придумал, что можно сделать. Получать статистику на нагружаемом сервере через vmstat и выводить красивые графики для быстрого нахождения наиболее узкого места: память, cpu, io.