Для нагрузочного тестирования сайта я обычно использую yandex.tank. Это эффективный, функциональный, но при этом простой в использовании и бесплатный инструмент. Хотел сначала про него заметку написать, но, как это часто бывает, получилась статья.
В статье даны не только рекомендации по использованию танка в нагрузочных тестированиях, но и даны советы, как от него защищаться. По сути он представляет из себя отличный инструмент для dos атак. Неподготовленные веб сервера и сайты он кладет на раз. Так что будьте внимательны с ним и не шалите ☝️
https://serveradmin.ru/primer-nagruzochnogo-testirovaniya-sajta-s-yandex-tank/
#нагрузочное_тестирование
В статье даны не только рекомендации по использованию танка в нагрузочных тестированиях, но и даны советы, как от него защищаться. По сути он представляет из себя отличный инструмент для dos атак. Неподготовленные веб сервера и сайты он кладет на раз. Так что будьте внимательны с ним и не шалите ☝️
https://serveradmin.ru/primer-nagruzochnogo-testirovaniya-sajta-s-yandex-tank/
#нагрузочное_тестирование
Server Admin
Пример нагрузочного тестирования сайта с Yandex.Tank | serveradmin.ru
# mkdir ~/yandex.tank && cd yandex.tank # touch load.yaml overload: enabled: true package: yandextank.plugins.DataUploader token_file: "token.txt" phantom: address: news.mail.ru:443 header_http:...
Попробовал интересный сервис для тестирования нагрузки на сайт - https://artillery.io. У него есть бесплатная self-hosted версия, которую я развернул у себя. В нюансы saas и его подписок не вникал.
Что понравилось в этом сервисе нагрузочного тестирования:
1️⃣ Простая и быстрая установка, легко разобраться и начать пользоваться.
2️⃣ Хорошая документация.
3️⃣ Наглядные и простые html отчёты.
4️⃣ Yaml конфиги. В данном случае это удобно, когда выполняются последовательно разные шаги.
5️⃣ Хорошая документация с примерами.
Ставится через nodejs. В Centos 8 поставил так:
Теперь рисуем простейший конфиг script.yaml
Запускаем тест и сохраняем отчет в json файл.
Отчёт можно загнать в html:
Сервис ориентирован на современную разработку и использование в CI/CD. В конфиге поддерживаются разные окружения, значения можно переопределять через консольные команды. На всё есть примеры в документации - https://artillery.io/docs/guides/overview/welcome.html
Я быстро разобрался и протестировал основные возможности. Сам в основном Yandex.Tank использую, но Artillery понравился больше более простыми конфигами и отчетами.
#нагрузочное_тестирование
Что понравилось в этом сервисе нагрузочного тестирования:
1️⃣ Простая и быстрая установка, легко разобраться и начать пользоваться.
2️⃣ Хорошая документация.
3️⃣ Наглядные и простые html отчёты.
4️⃣ Yaml конфиги. В данном случае это удобно, когда выполняются последовательно разные шаги.
5️⃣ Хорошая документация с примерами.
Ставится через nodejs. В Centos 8 поставил так:
dnf module enable nodejs:12
dnf install nodejs
npm install -g artillery@latest
Теперь рисуем простейший конфиг script.yaml
config:
target: https://ya.ru
phases:
- duration: 60
arrivalRate: 10
scenarios:
- flow:
- get:
url: "/"
Запускаем тест и сохраняем отчет в json файл.
artillery run script.yaml --output report.json
Отчёт можно загнать в html:
artillery report --output report.html report.json
Сервис ориентирован на современную разработку и использование в CI/CD. В конфиге поддерживаются разные окружения, значения можно переопределять через консольные команды. На всё есть примеры в документации - https://artillery.io/docs/guides/overview/welcome.html
Я быстро разобрался и протестировал основные возможности. Сам в основном Yandex.Tank использую, но Artillery понравился больше более простыми конфигами и отчетами.
#нагрузочное_тестирование
Достаточно известная и функциональная программа для нагрузочного тестирования - k6. Проект open source, можно установить у себя. Если есть желание, покупается по схеме saas в облаке. K6 недавно вошёл в состав Grafana Labs. Так что теперь этот продукт станет суперсовременным и молодёжным. Есть интеграция с InfluxDB и Grafana.
https://k6.io
https://github.com/grafana/k6
Если только подыскиваете себе подобный инструмент, то стоит начать с k6. Ранее я уже описывал тулзы подобного рода: yandex.tank и artillery.io. Аrtillery тоже молодёжный - yaml конфиги, автоматизация и javascript в бэкенде. А у k6 - go, что выглядит привлекательнее, так как быстрее. Сами же тесты на javascript пишутся.
Поставить k6 проще простого. Для rpm и deb based дистрибутивов есть репозитории. А запустить можно и в docker. Готовим docker-compose.yaml:
Пишем простой скрипт для теста. В течении 30 секунд в 10 потоков бомбим https://test.k6.io (не роняйте сайт своей школы или управы района)
Запускаем тест:
Результат увидите тут же в консоли. Все остальные подробности в документации. Она там очень качественная, как и для всех продуктов Grafana Labs.
#нагрузочное_тестирование
https://k6.io
https://github.com/grafana/k6
Если только подыскиваете себе подобный инструмент, то стоит начать с k6. Ранее я уже описывал тулзы подобного рода: yandex.tank и artillery.io. Аrtillery тоже молодёжный - yaml конфиги, автоматизация и javascript в бэкенде. А у k6 - go, что выглядит привлекательнее, так как быстрее. Сами же тесты на javascript пишутся.
Поставить k6 проще простого. Для rpm и deb based дистрибутивов есть репозитории. А запустить можно и в docker. Готовим docker-compose.yaml:
version: '3.4'
services:
k6:
image: loadimpact/k6:latest
command: run /test.js
volumes:
- ./test.js:/test.js
Пишем простой скрипт для теста. В течении 30 секунд в 10 потоков бомбим https://test.k6.io (не роняйте сайт своей школы или управы района)
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
vus: 10,
duration: '30s',
};
export default function () {
http.get('https://test.k6.io');
sleep(1);
}
Запускаем тест:
docker-compose up
Результат увидите тут же в консоли. Все остальные подробности в документации. Она там очень качественная, как и для всех продуктов Grafana Labs.
#нагрузочное_тестирование
Taurus - интерактивный бесплатный фреймворк для нагрузочного тестирования. Название образовано от слов Test Automation Running Smoothly. На русский можно перевести, как "автоматизация тестирования пройдёт чики-пуки".
Основные особенности и отличия от других подобных программ, коих существует много:
◽ Простая установка и запуск тестов.
◽ Тесты можно писать как на json, так и yaml (почесал бороду).
◽ Можно использовать скрипты от известных JMeter и Selenium.
◽ Отображение результатов в режиме реального времени в консоли.
◽ Интеграция с панелью BlazeMeter, популярной Continuous Testing Platform.
Установить Taurus проще всего через pip. Обязательно понадобится пакет python-devel. В Rocky Linux устанавливаем примерно так:
Делаем простейший конфиг quick_test.yml
Запускаем тест и роняем сайт школы:
Шутка, сайт ронять не надо. После запуска Taurus скачает исходники JMeter и запустит его. Ему для работы нужна Java 😱 Ставим:
Результат работы будете видеть тут же, в консоли. Интересны в первую очередь будут данные Average Time: elapsed, connect, latency. После окончания теста результаты останутся в отдельной директории с датой теста в имени. Там будет очень много различной информации. Основные итоги в файле bzt.log.
Если добавите к команде ключ -report, то на выходе получите наглядную картинку с результатами тестирования и ссылку, где её можно будет посмотреть. В целом, работа с Taurus похожа на Яндекс.Танк. Очень функциональная штука.
Сайт - https://gettaurus.org/
Исходники - https://github.com/Blazemeter/taurus
Документация - https://gettaurus.org/docs/Index/
#нагрузочное_тестирование
Основные особенности и отличия от других подобных программ, коих существует много:
◽ Простая установка и запуск тестов.
◽ Тесты можно писать как на json, так и yaml (почесал бороду).
◽ Можно использовать скрипты от известных JMeter и Selenium.
◽ Отображение результатов в режиме реального времени в консоли.
◽ Интеграция с панелью BlazeMeter, популярной Continuous Testing Platform.
Установить Taurus проще всего через pip. Обязательно понадобится пакет python-devel. В Rocky Linux устанавливаем примерно так:
# dnf install python36 python36-devel gcc
# pip3 install bzt
Делаем простейший конфиг quick_test.yml
execution:
- concurrency: 100
ramp-up: 1m
hold-for: 5m
scenario: quick-test
scenarios:
quick-test:
requests:
- http://shkola1101.ru
Запускаем тест и роняем сайт школы:
# bzt quick_test.yml
Шутка, сайт ронять не надо. После запуска Taurus скачает исходники JMeter и запустит его. Ему для работы нужна Java 😱 Ставим:
# dnf install java-11-openjdk
Результат работы будете видеть тут же, в консоли. Интересны в первую очередь будут данные Average Time: elapsed, connect, latency. После окончания теста результаты останутся в отдельной директории с датой теста в имени. Там будет очень много различной информации. Основные итоги в файле bzt.log.
Если добавите к команде ключ -report, то на выходе получите наглядную картинку с результатами тестирования и ссылку, где её можно будет посмотреть. В целом, работа с Taurus похожа на Яндекс.Танк. Очень функциональная штука.
Сайт - https://gettaurus.org/
Исходники - https://github.com/Blazemeter/taurus
Документация - https://gettaurus.org/docs/Index/
#нагрузочное_тестирование
Для нагрузочного тестирования сайтов существует много готовых инструментов. Но когда речь заходит о чём-то более сложном, чем простые get запросы к каким-то урлам, ситуация резко меняется. Первым делом на ум приходит популярный JMeter, но взять и сразу написать для него сценарий доступно не только лишь всем.
Компромиссом в этом вопросе может выступать Locust. Это известная утилита для нагрузочного тестирования, написанная на Python. Тесты для неё тоже пишутся на этом же языке, то есть вы ничем не ограничены в своих фантазиях на тему сценариев. А так как пайтон прост как для восприятия, так и написания кода, использовать её не сложно. Я быстро по документации разобрался, как это сделать.
Locust ставится из pip и имеет встроенный веб сервер для запуска тестов и просмотра результатов, поэтому никакой особой настройки не требует. Устанавливаем:
Теперь надо подготовить сценарий для тестирования. В самом простом случае он выглядит вот так:
Здесь мы просто шлём запросы на три урла: /, /forum, /about. Запускаем locust:
И отправляемся в браузер для запуска теста с указанными параметрами и просмотра статистики - http://0.0.0.0:8089.
В документации подробно разобран формат файлов сценария с готовыми примерами. А так как программа известная, в гугле легко найти много готовых примеров с авторизацией, куками, задержками, возрастанием нагрузки и т.д.
Locust в первую очередь хорош для автоматизации тестирования, во-вторую, для мониторинга. Для него есть готовый exporter для Prometheus. Вы можете регулярно запускать тесты и мониторить результаты. Вот хороший пример по этой теме (тесты api и отправка результатов в prometheus).
Аналоги Locust:
◽ artillery.io
◽ k6
◽ yandex.tank
◽ Taurus
⇨ Сайт / Исходники
#нагрузочное_тестирование
Компромиссом в этом вопросе может выступать Locust. Это известная утилита для нагрузочного тестирования, написанная на Python. Тесты для неё тоже пишутся на этом же языке, то есть вы ничем не ограничены в своих фантазиях на тему сценариев. А так как пайтон прост как для восприятия, так и написания кода, использовать её не сложно. Я быстро по документации разобрался, как это сделать.
Locust ставится из pip и имеет встроенный веб сервер для запуска тестов и просмотра результатов, поэтому никакой особой настройки не требует. Устанавливаем:
# apt install python3-pip
# pip3 install locust
Теперь надо подготовить сценарий для тестирования. В самом простом случае он выглядит вот так:
from locust import HttpUser, task
class TestUser(HttpUser):
@task
def test01(self):
self.client.get("/")
self.client.get("/forum")
self.client.get("/about")
Здесь мы просто шлём запросы на три урла: /, /forum, /about. Запускаем locust:
# locust -f locustfile.py
И отправляемся в браузер для запуска теста с указанными параметрами и просмотра статистики - http://0.0.0.0:8089.
В документации подробно разобран формат файлов сценария с готовыми примерами. А так как программа известная, в гугле легко найти много готовых примеров с авторизацией, куками, задержками, возрастанием нагрузки и т.д.
Locust в первую очередь хорош для автоматизации тестирования, во-вторую, для мониторинга. Для него есть готовый exporter для Prometheus. Вы можете регулярно запускать тесты и мониторить результаты. Вот хороший пример по этой теме (тесты api и отправка результатов в prometheus).
Аналоги Locust:
◽ artillery.io
◽ k6
◽ yandex.tank
◽ Taurus
⇨ Сайт / Исходники
#нагрузочное_тестирование
Хочу напомнить про одну из популярных и удобных систем для нагрузочных тестирований для сайтов — Yandex.Tank. Она написана лет 10 назад и с тех пор особо не менялась, хотя в репозитории видна активность. За проектом присматривают и поддерживают в актуальном состоянии.
Она удобна в первую очередь тем, что есть интеграция с бесплатным сервисом overload.yandex.net, куда Yandex.Tank автоматически загружает результаты. Для этого нужно там зарегистрироваться и получить токен. А дальше нарисовать небольшой конфиг для тестирования:
И запустить тест:
В процессе тестирования получите ссылку вида https://overload.yandex.net/589382, по которой можно наблюдать ход тестирования в режиме реального времени, либо изучать его результаты потом. Простую статистику можно наблюдать в консоли по ходу теста.
Yandex Tank продвинутый инструмент, которые поддерживает разнообразные схемы запросов, различные настройки нагрузки и т.д. В качестве генераторов нагрузки может использовать Phantom, Pandora, BFG (написаны самим Яндексом для него), либо известный Jmeter. В качестве внешних сервисов для загрузки артефактов, помимо Yandex.Overload можно использовать InfluxDB.
Все модули, настройки, возможности и примеры использования описаны в документации. Я когда-то давно писал статью с примером запуска Yandex.Tank. Она полностью актуальна, можно пользоваться.
Аналоги Yandex.Tank:
◽️ artillery.io
◽️ k6
◽️ Locust
◽️ Taurus
⇨ Исходники / Документация / Визуализация
#нагрузочное_тестирование
Она удобна в первую очередь тем, что есть интеграция с бесплатным сервисом overload.yandex.net, куда Yandex.Tank автоматически загружает результаты. Для этого нужно там зарегистрироваться и получить токен. А дальше нарисовать небольшой конфиг для тестирования:
overload:
enabled: true
package: yandextank.plugins.DataUploader
token_file: "token.txt"
phantom:
address: news.mail.ru:443
header_http: "1.1"
headers:
- "[Host: news.mail.ru]"
- "[Connection: close]"
uris:
- /
- /economics/
load_profile:
load_type: rps
schedule: line(5, 10, 1m)
ssl: true
autostop:
autostop:
- http(5xx,10%,5s)
console:
enabled: true
telegraf:
enabled: false
И запустить тест:
# docker run --rm -v ~/yandex.tank:/var/loadtest \
-it yandex/yandex-tank
В процессе тестирования получите ссылку вида https://overload.yandex.net/589382, по которой можно наблюдать ход тестирования в режиме реального времени, либо изучать его результаты потом. Простую статистику можно наблюдать в консоли по ходу теста.
Yandex Tank продвинутый инструмент, которые поддерживает разнообразные схемы запросов, различные настройки нагрузки и т.д. В качестве генераторов нагрузки может использовать Phantom, Pandora, BFG (написаны самим Яндексом для него), либо известный Jmeter. В качестве внешних сервисов для загрузки артефактов, помимо Yandex.Overload можно использовать InfluxDB.
Все модули, настройки, возможности и примеры использования описаны в документации. Я когда-то давно писал статью с примером запуска Yandex.Tank. Она полностью актуальна, можно пользоваться.
Аналоги Yandex.Tank:
◽️ artillery.io
◽️ k6
◽️ Locust
◽️ Taurus
⇨ Исходники / Документация / Визуализация
#нагрузочное_тестирование
У меня была серия публикаций про инструменты нагрузочного тестирования сайтов. Наиболее известные продукты из этой области я уже публиковал:
◽️Yandex.Tank
◽️ artillery.io
◽️ k6
◽️ Locust
◽️ Taurus
Все они представляют из себя скорее сервисы, для которых надо подготовить конфигурационный файл и сохранить куда-то результаты. А если хочется быстро и просто нагрузить какой-то ресурс в одну команду и оценить производительность, то можно воспользоваться Plow.
Он представляет из себя одиночный бинарник на Go, который достаточно скачать и запустить. При этом есть и пакеты, и docker контейнер. За ходом нагрузки можно следить как в консоли, так и на веб странице, которую он запускает через свой встроенный веб сервер.
У Plow не так много параметров. Основные это длительность теста (
Вы получите минимум информации. По сути, только самое основное — время ответа веб сервера по заданному урлу в различных вариациях. В том числе с разбивкой по персентилю. А также коды ответов веб сервера и ошибки, если они будут. Они скорее всего будут, если попробуете нагрузить какой-то сторонний, а не свой, веб ресурс. Сейчас почти у всех стоит защита от ддос, так что вас быстро забанят по ip.
Plow умеет выводить результаты в виде json файла, так что его можно использовать для мониторинга отклика какого-то ресурса:
Такой вывод, отправив в Zabbix, можно очень просто через jsonpath распарсить и забрать, к примеру, 95-й персентиль для мониторинга и наблюдать за ним. Это будет более информативная метрика, нежели стандартные веб проверки. В них нельзя задать интенсивность запросов. А проверки одиночным запросом зачастую неинформативны, так как проседать отклик чаще всего начинает под нагрузкой.
⇨ Исходники
#нагрузочное_тестирование
◽️Yandex.Tank
◽️ artillery.io
◽️ k6
◽️ Locust
◽️ Taurus
Все они представляют из себя скорее сервисы, для которых надо подготовить конфигурационный файл и сохранить куда-то результаты. А если хочется быстро и просто нагрузить какой-то ресурс в одну команду и оценить производительность, то можно воспользоваться Plow.
Он представляет из себя одиночный бинарник на Go, который достаточно скачать и запустить. При этом есть и пакеты, и docker контейнер. За ходом нагрузки можно следить как в консоли, так и на веб странице, которую он запускает через свой встроенный веб сервер.
У Plow не так много параметров. Основные это длительность теста (
-d
) или количество запросов (-n
), интенсивность запросов или rps (--rate
) и количество открытых соединений (-c
). Тест будет выглядеть примерно вот так:# plow https://github.com -n 50 -c 2 --rate 10
Вы получите минимум информации. По сути, только самое основное — время ответа веб сервера по заданному урлу в различных вариациях. В том числе с разбивкой по персентилю. А также коды ответов веб сервера и ошибки, если они будут. Они скорее всего будут, если попробуете нагрузить какой-то сторонний, а не свой, веб ресурс. Сейчас почти у всех стоит защита от ддос, так что вас быстро забанят по ip.
Plow умеет выводить результаты в виде json файла, так что его можно использовать для мониторинга отклика какого-то ресурса:
# plow https://github.com -n 50 -c 2 --rate 10 --json --summary
Такой вывод, отправив в Zabbix, можно очень просто через jsonpath распарсить и забрать, к примеру, 95-й персентиль для мониторинга и наблюдать за ним. Это будет более информативная метрика, нежели стандартные веб проверки. В них нельзя задать интенсивность запросов. А проверки одиночным запросом зачастую неинформативны, так как проседать отклик чаще всего начинает под нагрузкой.
⇨ Исходники
#нагрузочное_тестирование
Для нагрузочного тестирования сайтов существует популярное и удобное решение от Grafana - k6. Я уже когда-то давно рассказывал про него, но тогда не сделал акцент на том, что он удобен в том числе благодаря интеграции с Grafana через хранение метрик в Influxdb. Покажу, как это выглядит на практике.
K6 много чего умеет. Он вообще очень развитый и продвинутый инструмент, где тесты можно писать в том числе на JavaScript. Продукт позиционирует себя как Tests as code. Его легко поднять и начать тестирование, используя готовые примеры. Показываю на практике.
Поднимаем связку Grafana + Influxdb:
Там готовый docker-compose.yml. В принципе, можно ничего не менять, конфиг простой, без необходимости указания переменных. Запускаем связку:
Можно сходить, проверить графану по стандартному урлу и порту: http://server-ip:3000/login. Учётка стандартная - admin / admin. В графане уже должен быть настроен в Data sources myinfluxdb с урлом из соседнего контейнера.
Теперь нужно выбрать Dashboard. Их очень много разных для k6, выбирайте любой. Наиболее функциональный и удобный вот этот, за счёт того, что там есть группировка по тэгам, группам, урлам. Идём в Dashboards ⇨ Import ⇨ ID 13719.
Всё готово для запуска тестов. В репозитории, в директории examples очень много примеров. Эта директория мапится в контейнер с k6 в docker-compose. Тест можно запустить вот так:
Данные сразу потекут в Influxdb, так что их сразу можно наблюдать в Grafana. Тест не обязательно запускать на этой же машине. Можно из любого другого места, а передать данные через отдельный параметр. Примерно так:
Вот пример простого конфига для теста в 10 потоков в течении 30 секунд:
Соответственно, конфиг легко расширяется дополнительными урлами, тестами, выполняемыми действиями. У продукта хорошая документация и много готовых примеров. Знать JavaScript не обязательно.
⇨ Сайт / Исходники
#нагрузочное_тестирование
K6 много чего умеет. Он вообще очень развитый и продвинутый инструмент, где тесты можно писать в том числе на JavaScript. Продукт позиционирует себя как Tests as code. Его легко поднять и начать тестирование, используя готовые примеры. Показываю на практике.
Поднимаем связку Grafana + Influxdb:
# git clone https://github.com/grafana/k6 && cd k6
Там готовый docker-compose.yml. В принципе, можно ничего не менять, конфиг простой, без необходимости указания переменных. Запускаем связку:
# docker compose up -d influxdb grafana
Можно сходить, проверить графану по стандартному урлу и порту: http://server-ip:3000/login. Учётка стандартная - admin / admin. В графане уже должен быть настроен в Data sources myinfluxdb с урлом из соседнего контейнера.
Теперь нужно выбрать Dashboard. Их очень много разных для k6, выбирайте любой. Наиболее функциональный и удобный вот этот, за счёт того, что там есть группировка по тэгам, группам, урлам. Идём в Dashboards ⇨ Import ⇨ ID 13719.
Всё готово для запуска тестов. В репозитории, в директории examples очень много примеров. Эта директория мапится в контейнер с k6 в docker-compose. Тест можно запустить вот так:
# docker compose run k6 run /scripts/stages.js
Данные сразу потекут в Influxdb, так что их сразу можно наблюдать в Grafana. Тест не обязательно запускать на этой же машине. Можно из любого другого места, а передать данные через отдельный параметр. Примерно так:
# k6 run --out influxdb=http://1.2.3.4:8086 stages.js
Вот пример простого конфига для теста в 10 потоков в течении 30 секунд:
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
vus: 10,
duration: '30s',
};
export default function () {
http.get('https://test.k6.io');
sleep(1);
}
Соответственно, конфиг легко расширяется дополнительными урлами, тестами, выполняемыми действиями. У продукта хорошая документация и много готовых примеров. Знать JavaScript не обязательно.
⇨ Сайт / Исходники
#нагрузочное_тестирование
Если хотите быстро потестировать настройки веб сервера на предмет ограничения числа одновременных соединений в Nginx совместно с баном Fail2Ban, могу предложить готовый публичный сервис:
⇨ https://loadest.nodes-studio.com
Он вообще платный, причём принимает оплату в Bitcoin, что сразу вызывает подозрение. Так выглядят платные панели управления для ддоса. Подобных сервисов много и они не особо шифруются, а представляют себя как услуги по тестированию сайтов.
Этот сервис даёт небольшой тестовый баланс, который позволяет побомбить запросами какой-то сайт. Причём любой. Достаточно указать его адрес с главной страницы и свою почту (не проверяется), на которую будет зарегистрирован личный кабинет. В нём сразу же начнётся тест по нагрузке сайта.
Я толком не понял, с какой интенсивностью происходит тестирование, так как у меня все IP адреса сервиса улетели в бан за превышение лимита в 30 запросов в секунду с одного IP. Отработала настройка Nginx:
И фильтр Fail2Ban на записи о превышении этого лимита в лог файле nginx error.log с соответствующей строкой:
Забанил IP адреса в соответствии вот с этим правилом:
Не рассказываю подробно о настройке Fail2Ban, так как заметка не про него, а про сервис. Мне понравилось, что без лишних телодвижений запустил тестирование с посторонних IP. Мой указанный почтовый ящик, кстати, был указан в referrer запросов от сервиса:
Сервис, судя по всему, российский. Посмотрел заголовки писем, которые он шлёт. Там почтовый сервер из зоны .ru используется. И бомбил он меня российскими IP адресами.
#нагрузочное_тестирование #webserver
🦖 Selectel — дешёвые и не очень дедики с аукционом!
⇨ https://loadest.nodes-studio.com
Он вообще платный, причём принимает оплату в Bitcoin, что сразу вызывает подозрение. Так выглядят платные панели управления для ддоса. Подобных сервисов много и они не особо шифруются, а представляют себя как услуги по тестированию сайтов.
Этот сервис даёт небольшой тестовый баланс, который позволяет побомбить запросами какой-то сайт. Причём любой. Достаточно указать его адрес с главной страницы и свою почту (не проверяется), на которую будет зарегистрирован личный кабинет. В нём сразу же начнётся тест по нагрузке сайта.
Я толком не понял, с какой интенсивностью происходит тестирование, так как у меня все IP адреса сервиса улетели в бан за превышение лимита в 30 запросов в секунду с одного IP. Отработала настройка Nginx:
limit_req_zone $binary_remote_addr zone=lim_20r:10m rate=20r/s;
И фильтр Fail2Ban на записи о превышении этого лимита в лог файле nginx error.log с соответствующей строкой:
limiting requests, excess: 30.080 by zone "lim_20r", client: 194.87.110.21
Забанил IP адреса в соответствии вот с этим правилом:
[Definition]
ngx_limit_req_zones = [^"]+
failregex = ^\s*\[[a-z]+\] \d+#\d+: \*\d+ limiting requests, excess: [\d\.]+ by zone "(?:%(ngx_limit_req_zones)s)", client: <HOST>,
ignoreregex =.
datepattern = {^LN-BEG}
Не рассказываю подробно о настройке Fail2Ban, так как заметка не про него, а про сервис. Мне понравилось, что без лишних телодвижений запустил тестирование с посторонних IP. Мой указанный почтовый ящик, кстати, был указан в referrer запросов от сервиса:
referer=http://loadest.io user_agent="<username@gmail.com> via http://loadest.io"
Сервис, судя по всему, российский. Посмотрел заголовки писем, которые он шлёт. Там почтовый сервер из зоны .ru используется. И бомбил он меня российскими IP адресами.
#нагрузочное_тестирование #webserver
Please open Telegram to view this post
VIEW IN TELEGRAM