Яндекс. Танк: инструмент для тестирования нагрузки — обзор, конфигурация и примеры
Помимо Апач скамейка и Jmeter Есть еще одна утилита — бак Yandex.
Он используется нашей командой QA, и теперь мне пришло время поближе познакомиться, чтобы проверить одну проблему с нашим приложением, работающим на кластере Kubernetes.
В этом посте краткий обзор его возможностей и конфигурации.
В отличие от Апач скамейка Яндекс. Танк отображает статистику ответов и гораздо прост при запуске и конфигурации Jmeter, плюс у него хороший Autostop Функция для случая, когда » Huston, у нас есть проблема » (s)
Компоненты
Смотрите Модули Анкет
Ядер ядер Yandex написан на Python.
Для тестирования нагрузки у него мало модулей — Генераторы нагрузки По умолчанию он использует фантом, написанный на С ++, так что он действительно быстро.
Telegraf Инструмент — это модуль мониторинга, который может подключаться к хосту тестирования через SSH для запуска своего собственного агента для сбора метрик о процессоре/MEM/и т. Д., Который будет отображаться на Yandex. Резервуар во время нагрузочного теста в режиме реального времени.
Перегрузчик — это модуль для загрузки результатов в Yandex перегружать или для InfluxDB, но мы не будем использовать его здесь. Тем не менее, см. Артефактные загрузчики Анкет
Кроме того, в приведенных ниже примерах я не рассмотрю тему «боеприпасов», чтобы создать более сложные тесты с помощью POST и т. Д., Что для меня сейчас будет достаточно простыми запросами на получение. Но вы можете найти его документацию в Подготовка запросов Анкет
Запуск Яндекса. Танк с докером
Создайте минимальную конфигурацию для Phantom:
phantom: address: rtfm.co.ua:443 header_http: "1.1" headers: - "[Host: rtfm.co.ua]" uris: - / load_profile: load_type: rps schedule: const(1,30s) ssl: true console: enabled: true telegraf: enabled: false
Здесь:
Призрак
:адрес
: Адрес и порт к целиHeader_http
: Http -версия, используемая для запросов, установите ее на 1.1 для использования постоянных соединений (см. Заголовки : Набор заголовков, которые будут переданы на целевой серверUris
: Список URI, чтобы позвонитьload_profile
:load_type
: может быть установлен на RPS или экземпляры:rps
:Запросы в секунду
— Установить желательные запросы в секунду, которые будут выданы на хост тестирования экземпляры : или установить желательный номер активных ступеней, который будет выполнять как можно больше RPS, см.Динамический предел потока
Расписание : можно настроить на констант, линию или шаг (или все вместе) — определяет профиль тестирования загрузки, см.Учебные пособия
: const : установлен как(нагрузка, dur)
были загрузка — номер RPS, dur — Продолжительность теста нагрузки, в примере выше Yandex. Танк будет работать по одному запросу в секунду в течение 30 секунд линия : установлен как(A, B, Dur)
, где A — Начальный номер для RPS, b — Окончательный номер, dur — Продолжительность теста нагрузки, поэтому RPS будет увеличен линейно из A к b ценности шаг : установлен как(A, B, Step, Dur)
, где A — Начальный номер для RPS, b — Окончательный номер, шаг — Сколько запросов будет добавлено на каждом шаге после дюр секунды ssl : Включить поддержку SSL для HTTPS -запросов (добавьте 443 порт по адресу)Консоль
: Показать результаты консолиTelegraf
: Конфигурация мониторинга агента будет рассмотрена вМониторинг (Telegraf)
Запустить яндекс. Танк с докером:
$ docker run — rm -v $(pwd):/var/loadtest -it direvius/yandex-tank
И результаты:
Мониторинг (Telegraf)
С помощью Telegraf Яндекс. Танк может подключаться через SHS к хосту тестирования, чтобы получить метрики ресурсов.
Включить это в Load.yaml
файл:
... telegraf: enabled: true package: yandextank.plugins.Telegraf
Метрики, которые должны быть собраны, описаны в выделенном файле, создайте его как monitoring.xml, см. Больше в Формат файла конфигурации :
Здесь, в адрес
Установите цель тестирования для сбора метрик из, интервал
— Как часто получают метрики, имя пользователя
— Пользователь SSH будет использоваться во время подключения с помощью модуля Telegraf.
Этот пользователь на целевом хосте должен иметь публичную часть ключа SSH, которая должна быть добавлена в ~/.ssh/autorized_keys
.
Частная часть этого ключа будет установлена на яндекс. Танк -докер -контейнер как /root/.ssh/id_rsa
, как и все процессы в контейнере работают под пользователем root:
$ docker run — rm -v $(pwd):/var/loadtest -v /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11:/root/.ssh/id_rsa -it direvius/yandex-tank
Paramiko: sshexception: не действительный файл частного ключа RSA
На первом выполнении Telegraf не удалось с ошибкой Paramiko:
16:32:54 [ERROR] Failed to install monitoring agent to rtfm.co.ua Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Telegraf/client.py", line 209, in install out, errors, err_code = self.ssh.execute(cmd) File "/usr/local/lib/python2.7/dist-packages/yandextank/common/util.py", line 72, in execute with self.connect() as client: File "/usr/local/lib/python2.7/dist-packages/yandextank/common/util.py", line 42, in connect timeout=self.timeout, ) File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 437, in connect passphrase, File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 749, in _auth raise saved_exception SSHException: not a valid RSA private key file
Это потому, что ключ RSA на DigitaloCean выпускается в формате PEM/OpenSSH:
$ file /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11 /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11: OpenSSH private key
Преобразовать его в RSA:
$ ssh-keygen -p -m PEM -f /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11
И проверьте еще раз:
$ file /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11 /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11: PEM RSA private key
Запустите тест снова, и Telegraf напечатает свою конфигурацию и метрики, которые будут использоваться:
$ docker run — rm -v $(pwd):/var/loadtest -v /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11:/root/.ssh/id_rsa -it direvius/yandex-tank … 16:36:38 [INFO] Detected monitoring configuration: telegraf 16:36:38 [INFO] Preparing test… 16:36:38 [INFO] Telegraf Result config {'username': 'root', 'comment': '', 'telegraf': '/usr/bin/telegraf', 'python': '/usr/bin/env python2', 'host_config': {'Kernel': {'fielddrop': '["boot_time"]', 'name': '[inputs.kernel]'}, 'Netstat': {'name': '[inputs.netstat]'}, 'System': {'fielddrop': '["n_users", "n_cpus", "uptime*"]', 'name': '[inputs.system]'}, 'Memory': {'fielddrop': '["active", "inactive", "total", "used_per*", "avail*"]', 'name': '[inputs.mem]'}, 'Net': {'interfaces': '["eth0","eth1","eth2","eth3","eth4","eth5"]', 'fielddrop': '["icmp*", "ip*", "udplite*", "tcp*", "udp*", "drop*", "err*"]', 'name': '[inputs.net]'}, 'Disk': {'name': '[inputs.diskio]', 'devices': '["vda0","sda0","vda1","sda1","vda2","sda2","vda3","sda3","vda4","sda4","vda5","sda5"]'}, 'CPU': {'fielddrop': '["time_*", "usage_guest_nice"]', 'name': '[inputs.cpu]', 'percpu': 'false'}}, 'startup': [], 'host': 'rtfm.co.ua', 'telegrafraw': [], 'shutdown': [], 'port': 22, 'interval': '1', 'custom': [], 'source': []} 16:36:38 [INFO] Installing monitoring agent at root@rtfm.co.ua… 16:36:38 [INFO] Creating temp dir on rtfm.co.ua 16:36:38 [INFO] Execute on rtfm.co.ua: /usr/bin/env python2 -c "import tempfile; print tempfile.mkdtemp();" …
После этого будет запущен тест загрузки, и на правой стороне вы увидите ресурсы, используемые на целевом сервере:
И Агент работает на сервере:
$ root@rtfm-do-production-d10:~# ps aux | grep tele root 4580 0.5 0.4 309992 9436 pts/1 Ssl+ 15:38 0:00 python2 /tmp/tmpZez6yJ/agent.py — telegraf /tmp/telegraf — host rtfm.co.ua root 4582 7.1 1.5 851256 31896 ? Ssl 15:38 0:01 /tmp/telegraf -config /tmp/tmpZez6yJ/agent.cfg
Авто стоп
Модуль Autostop используется для прекращения тестов, если что -то пошло не так.
Например, вы можете настроить его, чтобы остановить тесты, если скорость отклика 5xx будет выше 10%, или если время отклика будет больше, чем указанное значение.
Добавьте следующее, чтобы проверить:
... autostop: autostop: - http(2xx,100%,1s)
Здесь, например, тесты будут остановлены, как только получит ответ 2xx в течение 1 секунды.
Запустите тесты и:
$ docker run — rm -v $(pwd):/var/loadtest -v /home/setevoy/.ssh/setevoy-do-nextcloud-production-d10–03–11:/root/.ssh/id_rsa -it direvius/yandex-tank … 16:56:24 [INFO] Monitoring received first data. 16:56:24 [WARNING] Autostop criterion requested test stop: http(2xx,100%,1s) 16:56:24 [WARNING] Autostop criterion requested test stop: 2xx codes count higher than 100.0% for 1s, since 1612889780 16:56:24 [INFO] Finishing test… 16:56:24 [INFO] Stopping load generator and aggregator …
Это было немедленно остановлено.
Смотрите больше опции в Документация >>> Анкет
Все Load.yaml
сейчас:
phantom: address: rtfm.co.ua:443 header_http: "1.1" headers: - "[Host: rtfm.co.ua]" uris: - / load_profile: load_type: rps schedule: const(1,30s) ssl: true console: enabled: true telegraf: enabled: true package: yandextank.plugins.Telegraf config: monitoring.xml autostop: autostop: - http(2xx,100%,1s)
Полезные ссылки
Все на русском, к сожалению.
- Верно -то, что и, то, что Тан
- Начальник тесейровани. Танк и Джаметер
- Nagruзnoe-tepyrowananee http-serura (nginx), 205k+ rps
- ТЕСИРОВАНАВАНА ВЕЙНКЕС:
- Прримир в почете. танк
Первоначально опубликовано в Rtfm: Linux, Devops и SISTEMNOE ADMINISTRIROWANIE Анкет
Оригинал: «https://dev.to/setevoy/yandex-tank-load-testing-tool-an-overview-configuration-and-examples-hd4»