Главная

Thursday, 19 November 2020

Читаем журналы Linux #5 - ротация.


Всем привет.

Со временем журналы становятся больше, поскольку в них появляется новая информация. Это создает потенциальную проблему производительности. Кроме того, управление файлами становится затруднительным.

Linux использует понятие «ротации» журналов вместо их очистки или удаления. При ротации создается новый каталог, а старый переименуется и при необходимости сжимается. Таким образом, журналы имеют несколько старых версий. Эти файлы будут возвращаться в течение определенного периода времени в виде так называемых backlog-ов. Как только будет получено определенное количество backlog-ов, новая ротация удалит самый старый журнал.

Ротация выполняется при помощи утилиты «logrotate».

Конфигурационный файл logrotate.

Как и rsyslog, logrotate зависит от конфигурационного файла по имени logrotate.conf, который находится в /etc.

Вот что находится в данном файле на Debian:

debian@debian:~$ cat /etc/logrotate.conf

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

# uncomment this if you want your log files compressed

#compress

# packages drop log rotation information into this directory

include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here

/var/log/wtmp {

missingok

monthly

create 0664 root utmp

rotate 1

}

/var/log/btmp {

missingok

monthly

create 0660 root utmp

rotate 1

}

# system-specific logs may be configured here

Основные параметры logrotate.

Частота проверки по условиям:

  • hourly - каждый час
  • daily - каждый день
  • weekly - каждую неделю
  • monthly - каждый месяц
  • yearly - каждый год

rotate - указывает количество старых логов, которые необходимо хранить

dateext - добавляет дату ротации перед именем лога

compress/delaycompress - сжатие лога и отсрочка сжатия

copytruncate - после создания копии, обрезать исходный файл журнала вместо перемещения старого файла журнала и создания нового

mail - отправка уведомления на почту

missingok - не выдавать ошибки, если лог файла не существует

sharedscripts - запускает сторонний скрипт только один раз

postrotate/endscript - запуск скрипта или произвольной команды

maxsize - ротация по размеру файла.

По умолчанию журналы ротируются еженедельно, оставляя 4 backlog-а. При запуске программы создается новый пустой журнал, а старые при необходимости будут сжаты. Файлы wtmp и btmp являются исключениями. wtmp отслеживает вход в систему, а btmp содержит информацию о неудавшихся попытках входа. Эти журнальные файлы ротируются каждый месяц, и ошибки не возвращаются, если можно найти один из предыдущих файлов wtmp или btmp. Пользовательские конфигурации ротации журналов содержатся в каталоге «etc/logrotate.d». также они включены в logrotate.conf с помощью директивы include. К примеру, Debian показывает такое содержание данного каталога:

debian@debian:~$ ls -l /etc/logrotate.d

total 44

-rw-r--r-- 1 root root 173 Apr 15  2011 apt

-rw-r--r-- 1 root root  79 Aug 12  2011 aptitude

-rw-r--r-- 1 root root 135 Feb 24  2010 consolekit

-rw-r--r-- 1 root root 248 Nov 28  2011 cups

-rw-r--r-- 1 root root 232 Sep 19  2012 dpkg

-rw-r--r-- 1 root root 146 May 12  2011 exim4-base

-rw-r--r-- 1 root root 126 May 12  2011 exim4-paniclog

-rw-r--r-- 1 root root 157 Nov 16  2010 pm-utils

-rw-r--r-- 1 root root  94 Aug  8  2010 ppp

-rw-r--r-- 1 root root 515 Nov 30  2010 rsyslog

-rw-r--r-- 1 root root 114 Nov 26  2008 unattended-upgrades

Содержание rsyslog показывает, как вернуть логи в исходное состояние:

debian@debian:~$ cat /etc/logrotate.d/rsyslog

/var/log/syslog

{

rotate 7

daily

missingok

notifempty

delaycompress

compress

postrotate

invoke-rc.d rsyslog reload > /dev/null

endscript

}

/var/log/mail.info

/var/log/mail.warn

/var/log/mail.err

/var/log/mail.log

/var/log/daemon.log

/var/log/kern.log

/var/log/auth.log

/var/log/user.log

/var/log/lpr.log

/var/log/cron.log

/var/log/debug

/var/log/messages

{

rotate 4

weekly

missingok

notifempty

compress

delaycompress

sharedscripts

postrotate

invoke-rc.d rsyslog reload > /dev/null

endscript

}

Как видите,  файл «syslog» будет повторно инициализирован каждый день. Другие журнальные файлы ротируются каждую неделю. Также стоит упомянуть директив postrotate. Она указывает действие, которое происходит после того, как ротация журналов завершена.

Тестирование ротации.

Logrotate можно запустить вручную для ротации одного или нескольких файлов. Чтобы это сделать, нужно просто указать соответствующий конфигурационный файл как аргумент. Чтобы продемонстрировать, как это работает, ниже приведен неполный список журнальных файлов в каталоге /var/log на CentOS:

[root@TestLinux ~]# ls -l /var/log

total 800

...

-rw-------  1 root root    359 Dec 17 18:25 maillog

-rw-------. 1 root root   1830 Dec 16 16:35 maillog-20131216

-rw-------  1 root root  30554 Dec 17 18:25 messages

-rw-------. 1 root root 180429 Dec 16 16:35 messages-20131216

-rw-------  1 root root    591 Dec 17 18:28 secure

-rw-------. 1 root root   4187 Dec 16 16:41 secure-20131216

...

Неполное содержимое файла logrotate.conf выглядит так:

[root@TestLinux ~]# cat /etc/logrotate.conf

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

...

Затем запустите команду logrotate:

[root@TestLinux ~]# logrotate -fv /etc/logrotate.conf

Сообщения прокручиваются при создании новых файлов, обнаружении ошибок и т.д. Затем  попробуйте проверить новые журнальные файлы почты, безопасности и сообщений:

[root@TestLinux ~]# ls -l /var/log/mail*

-rw-------  1 root root    0 Dec 17 18:34 /var/log/maillog

-rw-------. 1 root root 1830 Dec 16 16:35 /var/log/maillog-20131216

-rw-------  1 root root  359 Dec 17 18:25 /var/log/maillog-20131217

[root@TestLinux ~]# ls -l /var/log/messages*

-rw-------  1 root root    148 Dec 17 18:34 /var/log/messages

-rw-------. 1 root root 180429 Dec 16 16:35 /var/log/messages-20131216

-rw-------  1 root root  30554 Dec 17 18:25 /var/log/messages-20131217

[root@TestLinux ~]# ls -l /var/log/secure*

-rw-------  1 root root    0 Dec 17 18:34 /var/log/secure

-rw-------. 1 root root 4187 Dec 16 16:41 /var/log/secure-20131216

-rw-------  1 root root  591 Dec 17 18:28 /var/log/secure-20131217

[root@TestLinux ~]#

Как можно видеть, все три новых журнала были созданы. Почтовый журнал и журнал безопасности все еще пусты, но новый журнал сообщений уже содержит некоторые данные.

Продолжение следует.

No comments:

Post a Comment

А что вы думаете по этому поводу?