Назад | Перейти на главную страницу

Выполнить действие в зависимости от средней нагрузки

Я запускаю некоторые веб-приложения на сервере Debian, и иногда мне приходится бороться с атаками ddos. Он съедает все мои ресурсы, и я больше не могу подключиться к серверу по ssh. Идея заключалась в том, чтобы разорвать все соединения, если средняя нагрузка слишком высока, поэтому для меня все еще есть ресурсы и принять новые соединения, если средняя нагрузка достаточно низкая. Поскольку это должно работать при большой нагрузке, я боюсь, что cronjob будет недостаточно быстрым или потребует слишком много ресурсов.

tl; dr: есть ли способ настроить поведение, если средняя нагрузка превышает определенный порог?

Хотя я считаю, что вам следует попытаться решить реальную проблему на уровне брандмауэра или сети, быстрый и грязный подход к действиям на основе ресурсов заключается в использовании Утилита Monit.

В частности, Monit может выполнять тесты ресурсов, предупредить вас и принять меры в соответствии с этими условиями.

IF resource operator value [[<X>] <Y> CYCLES] THEN action [ELSE IF SUCCEEDED [[<X>] <Y> CYCLES] THEN action]

Так...

check system example.com
    if loadavg (1min) > 10 then alert

Или для чего-то особенного для Apache:

check process apache with pidfile /var/run/httpd.pid
start program = “/sbin/service httpd start”
stop program = “/sbin/service httpd stop”
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout