Ротация логов с помощью newsyslog во FreeBSD

Автор: fr33man.

Решил настроить ротацию логов. Причиной послужило резкое увеличение размеров лог файлов, которые вскоре могли забить раздел /var:

shield@/root> cd /var/log/

shield@/var/log> ll

total 41266

drwxr-xr-x 5 root wheel 2,0K 24 ноя 04:00 .

drwxr-xr-x 24 root wheel 512B 24 ноя 18:39 ..

-rw------- 1 root wheel 83K 24 ноя 19:20 auth.log

-rw------- 1 root wheel 14K 6 авг 02:00 auth.log.0.bz2

-rw------- 1 root wheel 8,9K 27 июл 18:00 auth.log.1.bz2

-rw------- 1 root wheel 15K 22 июл 10:00 auth.log.2.bz2

-rw------- 1 root wheel 10K 22 июл 00:00 auth.log.3.bz2

-rw------- 1 root wheel 14K 20 июл 08:00 auth.log.4.bz2

-rw------- 1 root wheel 13K 2 июл 17:00 auth.log.5.bz2

drwxr-xr-x 2 squid squid 512B 17 окт 15:09 c_icap

drwxr-xr-x 2 clamav clamav 512B 17 окт 10:35 clamav

-rw------- 1 root wheel 42K 24 ноя 19:20 cron

-rw------- 1 root wheel 4,7K 24 ноя 04:00 cron.0.bz2

-rw------- 1 root wheel 4,7K 23 ноя 00:00 cron.1.bz2

-rw------- 1 root wheel 4,7K 21 ноя 20:00 cron.2.bz2

-rw------- 1 root wheel 4,7K 20 ноя 16:00 cron.3.bz2

-rw------- 1 root wheel 1,8K 24 ноя 16:30 debug.log

-rw------- 1 root wheel 4,5K 22 ноя 20:00 debug.log.0.bz2

-rw------- 1 root wheel 3,6K 23 июн 22:00 debug.log.1.bz2

-rw------- 1 root wheel 30K 24 ноя 03:07 dmesg.today

-rw------- 1 root wheel 30K 23 ноя 03:07 dmesg.yesterday

-rw------- 1 root wheel 5,3K 7 авг 19:17 frox-log

-rw------- 1 root wheel 44B 4 авг 03:01 ipfw.today

-rw------- 1 root wheel 44B 3 авг 03:01 ipfw.yesterday

-rw-r--r-- 1 root wheel 137K 24 ноя 19:19 lastlog

-rw-r--r-- 1 root wheel 55B 22 июн 11:21 lpd-errs

-rw-r----- 1 root wheel 6,8K 24 ноя 15:45 maillog

-rw-r----- 1 root wheel 888B 24 ноя 00:00 maillog.0.bz2

-rw-r----- 1 root wheel 871B 23 ноя 00:00 maillog.1.bz2

-rw-r----- 1 root wheel 875B 22 ноя 00:00 maillog.2.bz2

-rw-r----- 1 root wheel 890B 21 ноя 00:00 maillog.3.bz2

-rw-r----- 1 root wheel 892B 20 ноя 00:00 maillog.4.bz2

-rw-r----- 1 root wheel 1,0K 19 ноя 00:00 maillog.5.bz2

-rw-r----- 1 root wheel 881B 18 ноя 00:00 maillog.6.bz2

-rw-r----- 1 root wheel 875B 17 ноя 00:00 maillog.7.bz2

-rw-r--r-- 1 root wheel 18K 24 ноя 19:20 messages

-rw-r--r-- 1 root wheel 8,7K 22 ноя 20:00 messages.0.bz2

-rw-r--r-- 1 root wheel 11K 28 окт 17:00 messages.1.bz2

-rw-r--r-- 1 root wheel 98K 17 окт 17:00 messages.2

-rw-r--r-- 1 root wheel 99K 28 сен 20:00 messages.3

-rw-r--r-- 1 root wheel 148K 31 авг 12:00 messages.4

-rw-r--r-- 1 root wheel 101K 4 авг 09:00 messages.5

-rw------- 1 root wheel 251B 12 ноя 03:06 mount.today

-rw------- 1 root wheel 251B 10 ноя 03:06 mount.yesterday

-rw------- 1 bind bind 29M 31 июл 22:51 named-auth.log

-rw------- 1 bind bind 50K 31 июл 22:29 named-update.log

-rw-r--r-- 1 root wheel 541K 24 ноя 19:20 net.log

-rw------- 1 root wheel 476B 24 ноя 03:07 pf.today

-rw------- 1 root wheel 481B 23 ноя 03:07 pf.yesterday

-rw-r----- 1 root network 55B 22 июн 11:21 ppp.log

-rw-r--r-- 1 root wheel 9,6M 24 ноя 15:40 rsyncd.log

drwxr-xr-x 3 root wheel 512B 25 окт 20:20 samba

-rw------- 1 root wheel 55B 22 июн 11:21 security

-rw-r----- 1 root wheel 728B 24 ноя 15:45 sendmail.st

-rw-r----- 1 root wheel 728B 22 ноя 03:07 sendmail.st.0

-rw-r----- 1 root wheel 728B 16 ноя 03:07 sendmail.st.1

-rw-r----- 1 root wheel 728B 17 сен 23:36 sendmail.st.10

-rw-r----- 1 root wheel 728B 9 ноя 13:27 sendmail.st.2

-rw-r----- 1 root wheel 728B 3 ноя 00:00 sendmail.st.3

-rw-r----- 1 root wheel 728B 27 окт 02:00 sendmail.st.4

-rw-r----- 1 root wheel 728B 20 окт 03:15 sendmail.st.5

-rw-r----- 1 root wheel 728B 14 окт 03:14 sendmail.st.6

-rw-r----- 1 root wheel 728B 7 окт 04:24 sendmail.st.7

-rw-r----- 1 root wheel 728B 1 окт 02:55 sendmail.st.8

-rw-r----- 1 root wheel 728B 24 сен 03:11 sendmail.st.9

-rw------- 1 root wheel 7,8K 2 окт 03:12 setuid.today

-rw------- 1 root wheel 7,9K 11 сен 03:13 setuid.yesterday

-rw-r----- 1 root network 55B 22 июн 11:21 slip.log

-rw-r--r-- 1 root wheel 0B 24 окт 19:09 smartd.log

-rw-r--r-- 1 root wheel 65K 24 ноя 19:20 snmpd.log

-rw-r--r-- 1 squid squid 77K 27 окт 20:10 squidGuard.log

-rw-r--r-- 1 root wheel 25K 3 ноя 17:23 traffic.log

-rw------- 1 root wheel 1,5K 3 ноя 00:24 userlog

-rw-r--r-- 1 root wheel 3,7K 24 ноя 19:19 wtmp

-rw-r--r-- 1 root wheel 9,8K 31 окт 17:50 wtmp.0

-rw-r--r-- 1 root wheel 6,9K 1 окт 00:08 wtmp.1

-rw-r--r-- 1 root wheel 4,6K 31 авг 15:52 wtmp.2

-rw-r--r-- 1 root wheel 3,1K 1 авг 01:12 wtmp.3

-rw------- 1 root wheel 156B 1 авг 00:56 xferlog

shield@/var/log> ll | grep M

-rw------- 1 bind bind 29M 31 июл 22:51 named-auth.log

-rw-r--r-- 1 root wheel 9,6M 24 ноя 15:40 rsyncd.log

shield@/var/log>

Ух... Файлик named-auth.log занимает 29 метров... Нехило. :) Надо с этим что-то делать. Сначала я хотел написать свой sh срикпт, который будет

запускаться по ночам и все ротировать, но прогуглив этот вопрос, я понял, что пытаюсь изобрести велосипед, так как ротацией логов

занимается программа newsyslog.

Newsyslog запускается раз в час, читает свой конфигурационный файл и следую написанным там указаниям, производит определенные действия с

лог-файлами.

Давайте посмотрим, что имеется в /etc/newsyslog.conf:

shield@/var/log> ll /etc/newsyslog.conf

-rw------- 1 root wheel 1,9K 3 ноя 2005 /etc/newsyslog.conf

shield@/var/log> cat /etc/newsyslog.conf

# comments by fr33man

# 24.11.2006

# лог-файл -- абсолютный путь к файлу, с которым будем работать.

# [владелец:группа] -- необязательный параметр, который указывает newsyslog'у

# кто должен являться владельцом данного лог файла

# права -- права, которые должны быть на файле

# кол-во -- максимальное количество заархивированных лог файлов.

# когда -- время, через которое архивировать лог-файл.

# флаги -- некоторые параметры, для лог-файлов:

# B - по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что

# лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог,

# с параметром B newsyslog не будет добавлятьт никаких сообщений в лог

# C - если лог-файл не существует, то его необходимо создать.

# G - если указан данный флаг, то в названии лог-файла можно

# использовать стандартные шаблоны(например *)

# J - сжимать лог-файл, используя bzip2

# N - Не предупреждать никакой процесс, о ротации лог-файла

# W - если используете флаги Z или J, то newsyslog должен подождать,

# пока заверщиться процесс архивации.

# Z - сжимать лог, использую gzip.

# лог-файл [владелец:группа] права кол-во размер когда флаги [пид файл] [sig_num]

/var/log/all.log 600 7 * @T00 J

/var/log/amd.log 644 7 100 * J

/var/log/auth.log 600 7 100 * JC

/var/log/console.log 600 5 100 * J

/var/log/cron 600 3 100 * JC

/var/log/daily.log 640 7 * @T00 JN

/var/log/debug.log 600 7 100 * JC

/var/log/kerberos.log 600 7 100 * J

/var/log/lpd-errs 644 7 100 * JC

/var/log/maillog 640 7 * @T00 JC

/var/log/messages 644 5 100 * JC

/var/log/monthly.log 640 12 * $M1D0 JN

/var/log/pflog 600 3 100 * JB /var/run/pflogd.pid

/var/log/ppp.log root:network 640 3 100 * JC

/var/log/security 600 10 100 * JC

/var/log/sendmail.st 640 10 * 168 B

/var/log/slip.log root:network 640 3 100 * JC

/var/log/weekly.log 640 5 1 $W6D0 JN

/var/log/wtmp 644 3 * @01T05 B

/var/log/xferlog 600 7 100 * JC

Файл, как я считаю, достаточно прокомментирован, поэтому давайте приступим к редактированию newsyslog.conf, а именно изменим

следующие строки:

# Меняем значение count, а то надоело видеть в /vat/log дофига старых логов.

/var/log/maillog 640 1 * @T00 JC

/var/log/messages 644 1 100 * JC

/var/log/sendmail.st 640 1 * 168 B

/var/log/wtmp 644 2 * @01T05 B

# Теперь добавляем собственные файлы

# Сначала идет rsyncd.log, его будем ротировать при достижении 500 kb, потом сжимать.

/var/log/rsyncd.log 600 2 500 * ZC

# Тоже самое для named-auth.log, заметьте, что владелец файла

# не root, поэтому явно указываем владельца и группу.

/var/log/named-auth.log bind:bind 600 2 500 * ZC

Ну вот и все, теперь сами запустим newsyslog и проверим результат:

shield@/var/log> ll named-auth.log

-rw------- 1 bind bind 29M 31 июл 22:51 named-auth.log

shield@/var/log> ll rsyncd.log

-rw-r--r-- 1 root wheel 9,6M 24 ноя 15:40 rsyncd.log

shield@/var/log> newsyslog

shield@/var/log> ll named-auth.log*

-rw------- 1 bind bind 77B 24 ноя 19:56 named-auth.log

-rw------- 1 bind bind 1,7M 24 ноя 19:56 named-auth.log.0.gz

shield@/var/log> ll rsyncd.log*

-rw------- 1 root wheel 77B 24 ноя 19:56 rsyncd.log

-rw------- 1 root wheel 1,2M 24 ноя 19:56 rsyncd.log.0.gz

shield@/var/log>

Ну вот, все работает.

Если хотите подробнее узнать о newsyslog, то почитайте man newsyslog.conf, там все прекрасно расписано

Обновлено: 12.03.2015