Шпаргалка по управлению логами с Logrotate
Logrotate это мощный инструмент для управления лог-файлами в Linux. Он помогает автоматизировать ротацию, сжатие, удаление и отправку логов, чтобы они не занимали всё свободное место на диске.
Основные команды Logrotate
1. Запуск вручную:
logrotate /etc/logrotate.conf
Можно указать конкретный конфиг:
logrotate /etc/logrotate.d/myapp
2. Принудительная ротация:
logrotate -f /etc/logrotate.conf
3. Тестирование конфигурации:
logrotate -d /etc/logrotate.conf
(ключ -d включает режим отладки, изменения не применяются).
Структура конфигурационного файла
Конфигурация Logrotate обычно находится в /etc/logrotate.conf или в отдельных файлах в /etc/logrotate.d/.
Пример конфига для ротации логов приложения:
/var/log/myapp/*.log {
daily # Ротация ежедневно
missingok # Пропустить, если файл отсутствует
rotate 7 # Хранить 7 архивов
compress # Сжимать архивы (gzip)
delaycompress # Сжимать не сразу, а на следующий цикл
notifempty # Не ротировать пустые файлы
create 0644 root root # Создать новый файл с указанными правами
sharedscripts # Запускать скрипты один раз для всех логов
postrotate
/usr/bin/systemctl restart myapp > /dev/null
endscript
}
Ключевые директивы
- daily/weekly/monthly/yearly: Частота ротации.
- rotate N: Хранить N архивов.
- compress: Сжимать логи (по умолчанию gzip).
- delaycompress: Сжимать не сразу, а на следующий цикл.
- missingok: Пропустить, если файл отсутствует.
- notifempty: Не ротировать пустые файлы.
- size: Ротация по размеру (например, size 100M или `size 1G`).
- create MODE USER GROUP: Создать новый файл с указанными правами.
- postrotate/endscript: Выполнить команды после ротации.
- prerotate/endscript: Выполнить команды перед ротацией.
- sharedscripts: Запускать скрипты один раз для всех логов.
- dateext: Добавлять дату к имени архива (вместо номера).
- olddir DIR: Перемещать архивы в указанную директорию.
Примеры использования
1. Ротация по размеру:
/var/log/nginx/*.log {
size 100M
rotate 5
compress
missingok
notifempty
create 0644 www-data www-data
}
2. Ротация с отправкой логов на удалённый сервер:
/var/log/myapp/*.log {
daily
rotate 7
compress
postrotate
scp /var/log/myapp/*.gz user@remote:/backup/logs/
endscript
}
3. Ротация с удалением старых логов:
/var/log/oldlogs/*.log {
weekly
rotate 2
compress
missingok
notifempty
olddir /var/log/archived
}
Полезные советы
- Проверяйте конфигурацию перед применением с помощью logrotate -d.
- Используйте cron для автоматизации запуска Logrotate.
- Не забывайте про postrotate, если нужно перезапускать сервисы после ротации.
👉 @i_odmin