На любом сервере логирование является неотъемлемой частью управления и мониторинга. Однако, с течением времени логи могут занимать значительное количество места на диске, что может привести к проблемам с производительностью и нехватке места. Здесь на помощь приходит утилита logrotate
. В этой статье мы рассмотрим, как настроить logrotate
для эффективного управления логами, с конкретным примером для веб-сервера Nginx.
Что такое logrotate?
logrotate
— это утилита для автоматической ротации, сжатия и удаления файлов логов. Она позволяет настроить регулярное обновление логов, архивирование старых файлов и удаление устаревших записей, что помогает сохранить пространство на диске и поддерживать порядок в логах.
Основные Принципы Работы
- Ротация логов:
logrotate
позволяет разделить логи на несколько файлов, чтобы избежать их чрезмерного разрастания. - Сжатие логов: Старые файлы логов можно сжимать для экономии места.
- Удаление старых логов:
logrotate
удаляет файлы логов, которые больше не нужны, после достижения определенного возраста или количества файлов. - Настройка прав доступа: Можно настроить права доступа для новых файлов логов.
Пример с веб-сервером
Чтобы настроить Nginx на хранение логов в течение месяца, можно использовать механизм ротации логов с помощью logrotate
, который автоматически управляет файлами логов, архивирует их и удаляет старые. Вот как это можно сделать:
Настройка конфигурации logrotate для Nginx/Apache2
-
Откройте или создайте файл конфигурации для ротации логов Nginx. Обычно файл находится по пути
sudo nano /etc/logrotate.d/nginx
. Если он не существует, создайте его: -
Вставьте следующую конфигурацию:
/var/log/nginx/*.log { daily # Ротация логов каждый день missingok # Игнорировать, если файл отсутствует rotate 30 # Хранить логи за последние 30 дней compress # Сжимать архивы для экономии места delaycompress # Задержка сжатия до следующего цикла notifempty # Не ротировать пустые файлы create 0640 www-data adm # Создавать новые файлы с правами и владельцем sharedscripts # Использовать общие скрипты для всех файлов prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx rotate >/dev/null 2>&1 endscript }
Сохраняем файл Ctrl+O , Enter, и закрываем Ctrl+X```
Пояснения по конфигурации:
daily
: Ротация логов будет выполняться ежедневно.rotate 30
: Хранить 30 архивов логов (примерно за месяц).compress
: Сжимать архивы логов, чтобы сэкономить место на диске.delaycompress
: Сжимать лог только со следующей ротацией, чтобы текущий архив оставался несжатым.notifempty
: Не ротировать файлы, если они пустые.create 0640 www-data adm
: Создавать новые лог-файлы с правами0640
и владельцемwww-data:adm
.postrotate
: Выполнять команду после ротации. Командаkill -USR1
отправляет сигнал Nginx для перезапуска записи логов.
Проверка настроек logrotate
Чтобы убедиться, что настройка logrotate для Nginx работает корректно, можно выполнить тест:
sudo logrotate -d /etc/logrotate.d/nginx
Флаг -d
запустит logrotate в режиме тестирования (dry-run), и вы увидите, что произойдет, но никакие действия на самом деле выполнены не будут.
Применение и мониторинг
-
Logrotate обычно запускается автоматически через
cron
. Убедитесь, чтоcron
работает на вашем сервере. -
Для немедленного тестирования вы можете запустить logrotate вручную:
sudo logrotate /etc/logrotate.d/nginx
-
Проверьте каталог
/var/log/nginx
, чтобы убедиться, что файлы логов архивируются и старые архивы удаляются по мере необходимости.
Эта настройка позволит вам автоматически управлять логами Nginx, чтобы они хранились только в течение последнего месяца, что помогает поддерживать порядок и экономить место на сервере.
Ротация логов для конкретного сайта на примере Apache2
Выше был вариант для сохранения логов в течении 30 дней для всех виртуальных хостов. А теперь сделаем ротацию логов для конкретного сайта. Поскольку выдавались ошибки повторной ротации логов пришлось перенести логи для сайта в отдельный каталог исправив конфиг виртуального хоста.
Создать конфиг sudo nano /etc/logrotate.d/wildserver.ru
ротацией в 30 дней
/var/log/apache2/wildserver.ru/wildserver.ru.access.log /var/log/apache2/wildserver.ru/wildserver.ru.error.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if invoke-rc.d apache2 status > /dev/null 2>&1; then \
invoke-rc.d apache2 reload > /dev/null 2>&1; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
Сохраняем файл Ctrl+O , Enter, и закрываем Ctrl+X
Тестим на ошибки:
sudo logrotate -d /etc/logrotate.d/
sudo logrotate -d /etc/logrotate.d/wildserver.ru
Комментарии