Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Задача

Провести нагрузочное тестирование ядра Платформы Wi-Fi в режиме Радар (функционал МАС-сканер).

Для тестирования необходимо создать нагрузку, сопоставимую с нагрузкой одновременной работы нескольких (10-15) тысяч точек доступа WEP-2ac в режиме "Радар".

В этом режиме ТД сканирует эфир на предмет наличия пакетов от Wi-Fi клиентов, сохраняет полный список обнаруженных МАС-адресов во внутренний буфер и периодически высылает информацию в коллектор по протоколу HTTP методом POST. Список МАС-адресов и сопутствующие атрибуты помещаются в файл формата JSON.

Схема стенда

Схема 1. Схема взаимодействия элементов

Алгоритм прохождения данных при нагрузочном тесте (однохостовая инсталляция):

1. Яндекс.Tанк отправляет запросы на локальный интерфейс хоста по пути http://localhost/proxy
2. Сервис nginx принимает данные по протоколу HTTP (port=80) и отправляет по https (port=443) по адресу коллектора: https://api.hottwf.com/probes/eltex/parser
3. Коллектор принимает JSON внутри снаряда и отправляет '200 OK', в случае удачи и другой код возврата в случае неудачи (коды ответов WEB-сервиса можно посмотреть тут: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) в сторону proxy (nginx);
4. nginx пересылает ответ в Яндекс.Танк;
5. Яндекс.Танк анализирует ответ, считает метрики;

Конфигурация стенда

Стенд представляет собой один или два хоста на операционной системе Linux Ubuntu 16.04 x64 LTS.

Для проведения тестирования необходимо установить пакеты nginx, docker.

console
$ sudo apt install nginx
$ sudo apt install docker


Конфигурация nginx

Для тестирования используется последняя версия nginx, доступная в ОС. При пилотном тестировании использовалась версия: "1.10.3-0ubuntu0.16.04.4".

default.conf
# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/avp;
        index index.html index.htm;
        allow all;

        proxy_read_timeout 500;
        proxy_connect_timeout 500;
        proxy_ssl_verify off;

        # To allow POST on static pages
        error_page  405     =200 $uri;

        location /proxy/ {
            proxy_pass https://api.hottwf.com/probes/eltex/parser;
        }
    }

Конфигурация Yandex.Tank

Конфигурационный файл для запуска Танка

load.yaml
phantom:
  address: 127.0.0.1:80 # [Target's address]:[target's port]
#  uris:   # setup in ammo
#    - /   # setup in ammo
  load_profile:
    load_type: rps # schedule load by defining requests per second
    schedule: line(1, 2, 10s) # starting from 1rps growing linearly to 10rps during 10 minutes
  ammofile: /var/loadtest/working-ammo
  ammo_type: uripost
console:
  enabled: true # enable console output
telegraf:
  enabled: false # let's disable telegraf monitoring for the first time

Конфигурация "снаряда" (ammo)

working-ammo
[Host: localhost]
[Connection: close]
[User-Agent: Tank]
[Content-Length: 417]
[Content-Type: application/json]

417 /proxy/
{"ap_id": "00-04-56-F8-33-30","version": "1.0","ap_name":"rad_JN3PMROF","probe_requests":[{"dbi": -25,"packet_count": 12,"mac": "C0:B6:58:14:22:33","ch": 1,"rssi_min": -33,"ssid": "WIFI-guest","timestamp"
: "1571391498","type_bitmask": 1,"bss_mac": ""},{"dbi": -44,"packet_count": 12,"mac": "C0:B6:58:14:22:34","ch": 6,"rssi_min": -50,"ssid": "WIFI-guest","timestamp": "1571392599","type_bitmask": 1,"bss_mac"
: ""}]}

Примечание: файл конфигурации load.yaml - это имя файла конфигурации Танка по умолчанию, файл working-ammo присутствует в настройках файла конфигурации запуска Танка. При изменениях в названиях файлов нужно это учесть.

Файл ammo состоит из двух основных секций. В верхней обязательной секции находятся конфигурационные характеристики обмена в квадратных скобках.

Ниже находится блок 'payload' (данные) для выполнения HTTP POST. Формат данных должен удовлетворять обязательным условиям:

  1. На новой строке должен быть указан размер блока с данными, в байтах (417 в приложенном примере);
  2. После размера данных указывается путь, куда Танк будет посылать данные (/proxy/ в приложенном примере . Итоговый путь с учётом конфигурации будет: 'http://localhost:80/proxy/');
  3. Информация формата JSON должна быть помещена сразу после строки с размером. Полный размер данных должен до байта совпадать с указанным значением, иначе будут ошибки;

Запуск теста

Запуск теста производится из командной строки терминала командой:

console.test
 docker run -v $(pwd):/var/loadtest -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent --net host -it direvius/yandex-tank

При этом, в текущем каталоге (где производится запуск) должны находиться файлы конфигурации: 'load.yaml' и 'working-ammo', в случае изменения имени файла (запуск с альтернативной конфигурацией), необходимо указать опцию: "-c custom-config-name.yaml"

Результаты тестирования будут выведены в консоль.

В случае каких-то проблем рекомендуется воспользоваться утилитой Wireshark для получения копии сетевого обмена и анализа ситуации.

Увеличение нагрузки

Для увеличения нагрузки необходимо изменить строку

schedule: line(1, 2, 10s)

на

schedule: line(1, 10000, 600s)

В данном примере нагрузка последовательно растёт от 1 до 10 тыс. запросов в сек (rps) и общее время теста составляет 100 секунд.

Подробнее о настройках высоконагруженных тестов предлагается почитать на официальной странице продукта Yandex.Tank:

https://yandextank.readthedocs.io/en/latest/core_and_modules.html#id1

Анализ результатов

Ошибочный тест


Ошибка
                                                                                                                                        . =========================================================- 100.0%
 Data delay: 4s, RPS:   2                                                                                                       ▃▃▃▇▃▇  . Duration: 0:00:10                                    ETA: 0:00:00
                                                                                                                                        . 
 Percentiles (all/last 1m/last), ms:  . HTTP codes:                                                                                     . Hosts: lexx => 127.0.01:80
 100.0% <  8.4  8.4  0.6              . 8 +2  100.00% : 404 Not Found                                                                   .  Ammo: working-ammo 
  99.5% <  8.4  8.4  0.6              .                                                                                                 . Count: 15
  99.0% <  8.4  8.4  0.6              . Net codes:                                                                                      .  Load: line(1, 2, 10s)
  95.0% <  8.4  8.4  0.6              . 8 +2  100.00% :  0 Success                                                                      . 
  90.0% <  8.4  8.4  0.6              .                                                                                                 . Active instances: 1
  85.0% <  0.8  0.8  0.6              . Average Sizes (all/last), bytes:                                                                . Planned requests: 2.0 for 0:00:00
  80.0% <  0.8  0.8  0.6              .  Request: 549.0 / 549.0                                                                 ▇▇▇▇▇▇  . Actual responses: 2
  75.0% <  0.8  0.8  0.6              . Response: 451.0 / 451.0                                                                 ▇▇▇▇▇▇  .         Accuracy: 0.00%
  70.0% <  0.8  0.8  0.6              .                                                                                                 .         Time lag: 0:00:00
  60.0% <  0.7  0.7  0.6              . Average Times (all/last), ms:                                                                   . 
  50.0% <  0.7  0.7  0.6              . Overall: 1.61 / 0.59                                                                    ▇_____  . 
  40.0% <  0.7  0.7  0.6              . Connect: 0.49 / 0.15                                                                    ▇_____  . 
  30.0% <  0.6  0.6  0.6              .    Send: 0.06 / 0.07                                                                    ▅▇▆▇▃▇  . 
  20.0% <  0.6  0.6  0.6              . Latency: 0.97 / 0.25                                                                    ▇_____  . 
  10.0% <  0.3  0.3  0.6              . Receive: 0.10 / 0.11                                                                    ▃▅▇▇▂▇  . 
                                                                                                                                        . 
                                                                                                                                        . 
 Cumulative Cases Info:                                                                                                                 . 
     name count       % last net_e http_e avg ms last ms                                                                                . 
 OVERALL:     8 100.00%   +2     0      8    1.2     0.5                                                                        ▃▃▃▇▃▇  . 

Пример ошибочной конфигурации. Страница, к которой обращается Tank не найдена, сервер возвращает код "404" для 100% результатов. Среднее время получения ответа = 1.2ms.

Успешный тест


Успешный тест
                                                                                                                                        . =========================================================\ 100.0%
 Data delay: 4s, RPS:   1                                                                                                       ▇▃▃▃▇▃  . Duration: 0:00:10                                    ETA: 0:00:00
                                                                                                                                        . 
 Percentiles (all/last 1m/last), ms:  . HTTP codes:                                                                                     . Hosts: lexx => 127.0.01:80
 100.0% <  223.0  223.0  129.2        . 8 +1  100.00% : 200 OK                                                                          .  Ammo: working-ammo 
  99.5% <  223.0  223.0  129.2        .                                                                                                 . Count: 15
  99.0% <  223.0  223.0  129.2        . Net codes:                                                                                      .  Load: line(1, 2, 10s)
  95.0% <  223.0  223.0  129.2        . 8 +1  100.00% :  0 Success                                                                      . 
  90.0% <  223.0  223.0  129.2        .                                                                                                 . Active instances: 1
  85.0% <  135.0  135.0  129.2        . Average Sizes (all/last), bytes:                                                                . Planned requests: 2.0 for 0:00:00
  80.0% <  135.0  135.0  129.2        .  Request: 549.0 / 549.0                                                                 ▇▇▇▇▇▇  . Actual responses: 1
  75.0% <  132.0  132.0  129.2        . Response: 415.0 / 415.0                                                                 ▇▇▇▇▇▇  .         Accuracy: 0.00%
  70.0% <  132.0  132.0  129.2        .                                                                                                 .         Time lag: 0:00:00
  60.0% <  130.0  130.0  129.2        . Average Times (all/last), ms:                                                                   . 
  50.0% <  129.0  129.0  129.2        . Overall: 139.19 / 129.16                                                                ▇▅▅▅▅▅  . 
  40.0% <  129.0  129.0  129.2        . Connect:   0.75 /   0.17                                                                ▇_____  . 
  30.0% <  124.0  124.0  129.2        .    Send:   0.05 /   0.04                                                                ▆▅▆▅▇▅  . 
  20.0% <  123.0  123.0  129.2        . Latency: 138.27 / 128.86                                                                ▇▅▅▅▅▅  . 
  10.0% <  122.0  122.0  129.2        . Receive:   0.12 /   0.08                                                                ▇▇▇▇▆▄  . 
                                                                                                                                        . 
                                                                                                                                        . 
 Cumulative Cases Info:                                                                                                                 . 
     name count       % last net_e http_e avg ms last ms                                                                                . 
 OVERALL:     8 100.00%   +1     0      0  139.0   129.0                                                                        ▇▃▃▃▇▃  . 


Тест длился 10 сек.

Всего отправлено 15 запросов.

Получено 100% успешных ответов (200 ОК).

Среднее время ответа 129 ms.


Контроль корректной работы MAC коллектора HotWiFi

Для того, чтобы убедиться в корректной обработке списка принятых МАС-адресов на стороне МАС коллектора HotWiFi, необходимо сделать выгрузку списка МАС через личный кабинет.

Адрес личного кабинета:

http://lk-pro.wifi.rt.ru/radar

После получения выгрузки (например, через Email), необходимо убедиться, что в выгрузке присутствуют МАС-адреса, указанные в payload пакета. Также, необходимо сравнить количество выгруженных МАС-адресов (учесть период выгрузки) с тем количеством, которое было настроено в тестируемой схеме. Т.е. для указанного случая заявлено, что успешно прошло 15 обращений. В каждом обращении 2 МАС адреса, значит в выгрузке должно быть не менее 30 МАС-адресов.

  • Нет меток