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

Идеальная конфигурация ротации журналов для перегруженного сайта

Я отвечал за сервер, который в течение некоторого времени находился в напряжении, превышающем критический момент. Я рекомендовал изменения, которые в настоящее время внедряются другими членами команды, которые должны решить основные проблемы инфраструктуры сайта. Но есть острая проблема, которая требует временного решения, чтобы выиграть время.

Apache перезагружается каждое утро в 7:30 из-за работы CRON ротации журналов. 6:00 - 9:00 - наши часы пик для обычного использования сайта, и в сочетании с CRON серверу не хватает памяти.

Какая конфигурация ротации журналов может помочь? Стоит ли переводить с ежедневного на почасовой? Поменять пороги? Просто измените время (я так и сделал, но все равно отключился).

Можно вращать журналы без перезапуска или перезагрузки apache вообще. Обратной стороной является риск потери некоторых записей журнала.

Вот два способа сделать это:

  • настройте отдельный сервер журналов и используйте любое программное обеспечение системного журнала, которое вы предпочитаете, для пересылки журналов apache на этот сервер. Таким образом, ротация журнала обрабатывается на другом сервере и не влияет на apache. Обратной стороной является то, что вы увеличите сетевой трафик, а дополнительные циклы ЦП и использование памяти могут перевернуть сервер, поскольку он уже близок к нему. Кроме того, при интенсивном движении некоторые строки журнала могут быть потеряны при транспортировке.
  • Вместо перезагрузки apache, чтобы начать запись в новый файл, вы можете скопировать содержимое файла, а затем очистить старый. Плюс в том, что вы не перезапускаете apache. Обратной стороной является потеря нескольких записей журнала, которые могут быть записаны в течение микросекунд между окончанием копирования и обнулением файла. Для этого варианта postrotate раздел конфигурационного файла следует изменить на copytruncate.

Совет EEAA по использованию удаленного сервера журналов полностью решает проблему, но может оказаться невозможным в вашей среде.

Используйте LogRotate для перезагрузить Apache вместо его перезапуска, как описано на этот сайт. Возможно, вы захотите изменить параметры на ежедневный. Время простоя не должно иметь никакого значения, если вы меняете ежечасно, ежедневно или еженедельно.

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

Перезагрузка должна позволить Apache завершить обслуживание любых открытых запросов перед перезагрузкой конфигурации. Вы можете потерять несколько запросов, но я не думаю, что вы потеряете много. Вы не можете ничего потерять.

Если вам нужна более высокая надежность, вам следует рассмотреть два сервера с балансировкой нагрузки с какой-либо проверкой работоспособности или аварийным переключением в реальном времени или с использованием удаленного сервера журналов.

Измените запланированное время cron, даже удалите apache из logrotated и при необходимости настройте его вручную. Остановите службу apache, сделайте паузу на несколько секунд, чтобы apache действительно завершил завершение работы, переименуйте файл журнала, перезапустите apache. Поскольку вы только переименовали файл журнала, он остается в том же каталоге и происходит «мгновенно». После того, как ваша служба будет запущена, переместите / сожмите / любой файл журнала туда, где он должен быть.

Если он получит действительно плохо, мой внутренний BOFH говорит указывать журналы на / dev / null и не беспокоиться о их вращении ...