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

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

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

1 ответ

Решение

Хотя я думаю, что вам следует попытаться решить реальную проблему на уровне брандмауэра или сети, быстрый и грязный подход к действиям на основе ресурсов заключается в использовании утилиты 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
Другие вопросы по тегам