Настройка ротации системных логов

Настройка ротации системных логов (logrotate)

Назначение

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

Проверка наличия logrotate

1. Проверка установки пакета

Для систем на базе Debian/Ubuntu:

dpkg -l | grep logrotate

Для систем на базе RHEL/CentOS/Fedora:

rpm -qa | grep logrotate

Универсальная проверка:

which logrotate
logrotate --version

2. Если 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.
  • Определено местоположение логов.
  • Определён источник логов.
  • Создан конфигурационный файл.
  • Проверен синтаксис.
  • Выполнена тестовая ротация.
  • Проверена запись логов.
  • Настроен мониторинг.