Вероятно, один из 100 сайтов дает сбой VPS каждые несколько дней. Apache подключается к нескольким сотням, а mysql - к нескольким миллионам. Это приводит к тому, что центральный процессор постоянно находится на + 100%, что делает сервер полностью непригодным для использования. Перезапуск исправляет ситуацию на несколько дней. Как найти злого?
У меня есть бог mod_status с включенным extendedstatus, но, тем не менее, он показывает только несколько последних запросов. Не уверен, как использовать это, чтобы сузить его среди 100 сайтов.
В остальное время сервер использует 20-30% ресурсов, поэтому он не перегружен сайтами.
Я не делаю известной партии о Вашей конфигурации сервера, но я попытаюсь помочь.
Сначала запустите iptables
и не позволяйте нападать на свой сервер
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
После этого я думаю это logrotate
может помочь нам найти сайт с самым высоким влиянием.
Установка logrotate
sudo apt-get install logrotate
Проверить, что logrotate был успешно установлен, выполняло это в командной строке.
logrotate
Конфигурации и опции по умолчанию для logrotate
утилита присутствует в:
/etc/logrotate.conf
Некоторые важные параметры конфигурации: интервал вращения, размер файла журнала, количество вращения и сжатие.
Специализированная информация файла журнала (для переопределения значений по умолчанию) хранится в:
/etc/logrotate.d/
Моя идея состоит в том, чтобы контролировать http файл доступа. Сайт с большим доступом должен иметь больший журнал доступа. Logrotate
и cron
будет наблюдать за нами на этом и отправлять Вам почту о проблеме...
Править logrotate.conf
и добавьте некоторый код
sudo nano /etc/logrotate.conf
/path_to_apache_logs/*.log {
size 1M
dateext
postrotate
/usr/bin/killall -HUP httpd
ls -ltr /path_to_apache_logs/ | mail -s "$HOSTNAME: Apache restarted and log files rotated" name@domain.com
endscript
}
Необходимо настроить
size
- размер файла журнала, изменитесь на основе своих потребностей path_to_apache_logs
- измените путь на основе пути журнала в vhost.conf
Больше о настройке logrotate.conf
можно найти здесь
Установка cron
работать logrotate
на каждых 5 минутах
*/5 * * * * root /usr/sbin/logrotate /etc/logrotate.conf
То, когда Вы находитесь на "нападении", Вы получаете доступ к журналу, будет рост быстро. Cron
будет работать logrotate
проверять размер файла журнала и если размер файла XX, повернет журнал, перезапустит атташе и отправит Вам почту.
Поскольку каждый виртуальный хост имеет собственный файл доступа, Вы будете известный сайт ведьмы быть сервером "уничтожитель"