Рубрики
Uncategorized

Яндекс. Танк: инструмент для тестирования нагрузки — обзор, конфигурация и примеры

Яндекс. Танк: инструмент для тестирования нагрузки — обзор, конфигурация и примеры, кроме AP … Tagged с тестированием, учебником, DevOps.

Яндекс. Танк: инструмент для тестирования нагрузки — обзор, конфигурация и примеры

Помимо Апач скамейка и 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)

Полезные ссылки

Все на русском, к сожалению.

Первоначально опубликовано в Rtfm: Linux, Devops и SISTEMNOE ADMINISTRIROWANIE Анкет

Оригинал: «https://dev.to/setevoy/yandex-tank-load-testing-tool-an-overview-configuration-and-examples-hd4»