Ротация логов

Думаю каждый системный администратор осознает неоценимую помощь от лог файлов, особенно при отладке системы или софта. Но наступает момент, когда лог файл может вырасти до неприемлемо большого размера. И тут приходит в голову мысль - а почему бы не сделать ротацию лог файла? Для решения этой задачи в системе предусмотрена специальная утилита - newsyslog, которая осуществляет ротацию логов в системе. Утилита не работает как демон, а запускается по крону, о чем свидетельствует следующая запись в /etc/crontab:

# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog

По умолчанию для newsyslog конфигурационный файл находится здесь - /etc/newsyslog.conf. Формат файла довольно прост - в одной строке в нескольких колонках указываются необходимые параметры для ротации одного лог файла. Описание колонок:

  1. logfilename - путь к лог файлу.
  2. owner:group (опционально) - владелец и группа, устанавливаемые на файл и на архивные копии после ротации.
  3. mode - права доступа, устанавливаемые на файл и на архивные копии после ротации.
  4. count - количество архивных копий лог файла.
  5. size - размер лог файла, при достижении которого нужно осуществить ротацию файла. Если в данном поле указана звездочка '*', то правила ротации определяются полем when.
  6. when - когда (время) осуществлять ротацию лог файла. Формат поля подробно описан в мане. Если в данном поле указана звездочка '*', то правила ротации определяются полем size.
  7. flags - поле, в котором указываются дополнительные опции для ротации лог файла. Доступные опции:
    1. B - означает, что идет работа с бинарным файлом. Это значит, что newsyslog не будет добавлять информационное сообщение (о том, когда была осуществлена ротация) в начало файла.
    2. C - означает, что надо создать лог файл, если он не существует. Чтобы это работало, нужно запускать newsyslog с ключом -C.
    3. D - установить флаг UF_NODUMP (влияет на работу команды dump) на лог файл после ротации.
    4. G - означает, что файл это шаблон оболочки (подробнее в мане).
    5. J - упаковывать архивные копии, используя bzip2.
    6. N - означает, что нет процесса, который должен быть оповещен при ротации.
    7. U - означает, что в файле pid_file хранится идентификатор группы процессов, а не одного процесса.
    8. R - воспринимать pid_file как скрипт и запустить его после ротации.
    9. X - упаковывать архивные копии, используя xz.
    10. Z - упаковывать архивные копии, используя gzip.
    11. - (минус) - ни на что не влияет, служит только как заглушка. То есть, если нет необходимости указывать опции, но нужно задать следующие поля.
  8. /pid_file (опционально) - путь до pid файла процесса.
  9. sig_num (опционально) - номер сигнала, который необходимо послать процессу после ротации (man signal).

Допустим мне необходимо сделать ротацию двух лог файлов mainlog и rejectlog, которые ведет Exim. Для этого необходимо внести в конфигурационный файл /etc/newsyslog.conf такие строчки:

/var/log/exim/mainlog   mailnull:mail   640  30    102400    *  JN
/var/log/exim/rejectlog mailnull:mail   640  30    102400    *  JN

Данные записи означают, что при достижении размера любого лог файла в 10 мегабайт осуществить их ротацию, причем установить владельца и группу - mailnull:mail, установить права на файл 640, количество архивных копий не должно превышать 30 и архивные копии должны быть упакованы в архив bzip2.

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика