Настройка ротации системных логов (logrotate)
Назначение
Ротация логов позволяет автоматически архивировать, удалять или сжимать журналы событий, предотвращая переполнение файловой системы и обеспечивая хранение логов в соответствии с требованиями эксплуатации.
Проверка наличия logrotate
1. Проверка установки пакета
Для систем на базе Debian/Ubuntu:
dpkg -l | grep logrotateДля систем на базе RHEL/CentOS/Fedora:
rpm -qa | grep logrotateУниверсальная проверка:
which logrotate
logrotate --version2. Если logrotate не установлен
# Debian/Ubuntu
sudo apt-get install logrotate
# RHEL/CentOS
sudo yum install logrotate
# Alpine
sudo apk add logrotateОпределение места хранения логов
1. Найти файл логов
# Проверка стандартных мест
ls -la /var/log/syslog
ls -la /var/log/messages
# Поиск нестандартных мест
find /var -name "syslog" -type f 2>/dev/null
find /opt -name "*.log" -type f 2>/dev/null
# Проверка монтирований (для Docker)
docker exec <container_name> ls -la /var/log/syslog
docker inspect <container_name> | grep -A 10 Mountsℹ️
В системе 5А логи syslog по умолчанию хранятся в /var/lib/5a/syslog-volume/syslog. Если вы используете другую конфигурацию, уточните путь.
2. Определение источника логов
sudo lsof /var/lib/5a/syslog-volume/syslog
docker ps | grep rsyslog
docker logs <container_name> --tail 20Настройка logrotate
Создать файл:
sudo nano /etc/logrotate.d/syslog-configБазовая конфигурация:
/var/lib/5a/syslog-volume/syslog {
daily
rotate 14
maxsize 500M
compress
delaycompress
missingok
notifempty
create 0644 root root
su root root
postrotate
docker restart rsyslog >/dev/null 2>&1 || true
endscript
}Описание параметров
| Параметр | Описание |
|---|---|
daily | Ротация ежедневно |
rotate 14 | Глубина хранения — 14 архивов |
maxsize 500M | Максимальный размер лога — 500 МБ |
compress | Сжатие архивов с помощью gzip |
delaycompress | Отложенное сжатие (архив сжимается при следующей ротации) |
missingok | Игнорировать отсутствие файла |
notifempty | Не ротировать пустые файлы |
create | Создать новый файл после ротации с правами 0644 от root:root |
su | Выполнять ротацию от пользователя root:root |
Настройка Docker
Используйте postrotate:
postrotate
docker restart rsyslog >/dev/null 2>&1 || true
endscriptЛибо:
postrotate
docker kill -s HUP rsyslog >/dev/null 2>&1 || true
endscriptНастройка для rsyslog
/var/log/syslog {
daily
rotate 14
maxsize 500M
compress
delaycompress
missingok
notifempty
create 0640 syslog adm
postrotate
systemctl restart rsyslog >/dev/null 2>&1 || true
endscript
}Проверка
sudo logrotate -d /etc/logrotate.d/syslog-config
sudo logrotate -f /etc/logrotate.d/syslog-config
ls -la /var/lib/5a/syslog-volume/
tail -10 /var/lib/5a/syslog-volume/syslog
du -sh /var/lib/5a/syslog-volume/*
sudo cat /var/lib/logrotate/status | grep syslog
logger -n localhost -P 1514 "Test message $(date)"Возможные ошибки
- Добавить
su root root, если ошибка прав. - Добавить
create, если файл не создаётся. - Проверить имя контейнера:
docker ps | grep rsyslog. - Перезапустить контейнер при отсутствии записи логов.
Мониторинг
df -h /var/lib/5a/syslog-volume/
cat /etc/cron.daily/logrotate
systemctl status logrotate.timer
grep logrotate /var/log/syslog | tail -10Рекомендуемые практики
- Использовать одновременно
dailyиmaxsize. - Всегда включать
compress. - Проверять конфигурацию перед внедрением.
- Следить за свободным местом.
- Документировать изменения.
Чек-лист
- Проверена установка logrotate.
- Определено местоположение логов.
- Определён источник логов.
- Создан конфигурационный файл.
- Проверен синтаксис.
- Выполнена тестовая ротация.
- Проверена запись логов.
- Настроен мониторинг.