Выполнить действие, основанное на средней загрузке
Я запускаю некоторые веб-приложения на сервере 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