Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> настройка —> newsyslog

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

Автор: 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, там все прекрасно расписано.



размещено: 2006-11-27,
последнее обновление: 2006-11-27,
автор: fr33man


RockerMan, 2007-01-12 в 18:01:02

Спасибо! Очень помогли, давно хотел свой httpd-access.log в архив скинуть

unisol, 2007-09-24 в 20:44:33

Не стоит логи от named через syslogd писать - ингода логгинг отваливается. А ещё, за час порой вполне можно так налогать - что полный DoS получится - с забитием всего места на диске и падением всех чуствительных к такому приложений.
Для httpd-access - лучше логать через пайп в апачевский лог-ротатор (допилив туда ограничение по размеру логов).

weec, 2008-06-09 в 10:19:16

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

mak_v_, 2008-07-16 в 2:03:16

Хотелось бы услышать как избавится от забивания /var, а то часто на серверах имею такую проблему -100мб и ниипёт - руками хиляю

Алексей, 2008-07-16 в 7:18:52

Ага, была такая проблема. Диск разбит таким образом, что /var/ монтируется в корневой раздел и все там. А места всего 1 гиг. Пришлось симлинками часть логов переносить в /usr/var/log.

Решений несколько:
1) Уменьшить количество событий, которые пишутся в логи программами, убрать дебаги и варнинги, к примеру.
2) Запускать ротацию в кроне с ключом -a /any/path/to/store/rotated/logfile.
Пример: 0 * * * * root newsyslog -a rotate
3) Ну и использовать симлинки для особо "тяжелых":

-rw-----— 1 root wheel 30353 16 июл 03:13 dmesg.today
-rw-----— 1 root wheel 24919 15 июл 03:13 dmesg.yesterday
lrwxr-xr-x 1 root wheel 23 20 фев 12:17 exim -> /usr/local/var/log/exim

TemposYS, 2009-03-17 в 16:27:27

может кто сталкивался с такой задачей:

как с помощью newsyslog при ратации файлов дописывать в конце файла не порядковый номер при сохранении, а дату?

Minotaur, 2012-01-06 в 19:22:35

Если newsyslog отработает в тот момент, когда демон rsync работает и пишет свои логи, то часть логов потеряется.
У rsync нет специального сигнала, который можно было бы использовать в newsyslog для уведомления rsync, что нужно переоткрыть лог-файл. По SIGHUP rsync выходит. Поэтому корректно ротироварить логи rsync, если они не пишутся через syslog, с помощью newsyslog - неправильно.

METAJIJI, 2013-09-04 в 6:34:01

Не вздумайте делать ротацию логов bind через newsyslog! После такой ротации bind потеряет дескриптор к лог-файлу и перестанет писать логи, мало того он перестанет  обновлять ddns зону! Правильнее, как уже замечали выше использовать syslog, либо осилить себя и дочитать man named.conf :) где пишут про волшебные опции file "/var/log/named-auth.log" versions 6 size 512K;
versions - кол-во старых лог-файлов.
size - размер, при достижении которого нужно произвести ротацию.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0623 секунд
Из них PHP: 45%; SQL: 55%; Число SQL-запросов: 77 шт.
Исходный размер: 48254; Сжатая: 9161