Яндекс.танк — инструмент нагрузочного тестирования
2012-08-0228 июля на я.субботнике был представлен новый инструмент для нагрузочного тестирования Яндекс.танк. Это внутреняя разработка яндекса, которая наконец-то вышла в свет. Видел я этот танк ещё на YaC 2011, когда были соревнования по конфигурированию nginx.
Это консольный инструмент, пока не имеющий графического интерфейса, но дающий довольно полную картину в этой самой консоли.
Вот сам интерфейс:
Сам проект и документация находится на 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/
Вот что случается, когда сервер не справляется:
Думаю, что проект со временем будет обрастаться графическими интерфейсами, разработанными самим яндексом или сообществом.
Я даже уже придумал, что можно сделать. Получать статистику на нагружаемом сервере через vmstat и выводить красивые графики для быстрого нахождения наиболее узкого места: память, cpu, io.


10 комментариев:
Для этой цели можно использовать замечательный инструмент (хотя и несколько сырой в плане интерфейса) -- Graphite К нему через плагин очень простым образом подключается Collectd -- сборщик статистики по используемым ресурсам. Огромное количество метрик, много плагинов.
P.S. цитаты и капча у вас глючат
Direvius, спасибо за ценную информацию.
Цитаты починил, а что с капчей?
А получилось ли сделать графики на основе вывода фантома? Пытаюсь построить график кол-во запросов/среднее время ответа. Нашел упоминание R в readme, но пока не совсем освоил. Есть мысли?
а поточнее не расскажете как это сделать?? у меня не получилось((
Теперь графики рисует сам танк, в новой версии. Стартует локальный веб-сервис, можно браузером тыкнуться и посмотреть. Там процентили для времен ответа и средние времена... В общем, смотрите сами =)
Честно говоря, не помню, но сейчас, по-моему, все в порядке.
associal, тут немного другие примеры, но смысл такой же: http://clubs.ya.ru/yandex-tank/14
Но ещё нужно сгенерировать запрос, который вернёт нужную куку и потом её подставлять в ленту запроса
Что-то типо этого:
asocial, есть способ попроще, вы можете сделать такой конфиг для Яндекс.Танка: [phantom] address= <адрес мишени> rps_schedule=<какая-то нагрузка> headers = [Cookie: <Кукa из браузера>]
задавайте вопрос в клубике http://clubs.ya.ru/yandex-tank/ , поможем.
Веб-морда есть, кстати. На :8080 на танке запускается.
Doctor, так есть способ получать Cookie автоматически? Например зная логин\пароль, или отправляя post запрос от формы регистрации?
Оставить комментарий