LINUX.ORG.RU
ФорумAdmin

Не отрабатывает logrotate

 , ,


0

1

Коллеги, добрый день. Помогите пожалуйста. Настроил logrotate для squid, но он не хочет работать, не понимаю почему.

В /etc/cron.daily/logrotate:

  test -x /usr/sbin/logrotate || exit 0
  /usr/sbin/logrotate /etc/logrotate.conf
В /etc/logrotate.conf всё по умолчанию:
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# 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
}

В /etc/logrotate.d/squid:

  /ClFS/squid/logs/access.log {
    rotate 5
    daily
    compress
    delaycompress
    missingok
    notifempty
    create 0640 proxy proxy
    sharedscripts
    postrotate
    test ! -e /var/run/squid.pid || test ! -x /usr/sbin/squid || /usr/sbin/squid -k rotate
    endscript
  }
  
  /var/log/squid/*.log {
          daily
          compress
          delaycompress
          rotate 2
          missingok
          nocreate
  }
Вывод /usr/sbin/logrotate /etc/logrotate.conf -d:
rotating pattern: /ClFS/squid/logs/access.log  after 1 days (5 rotations)
empty log files are not rotated, old logs are removed
switching euid to 0 and egid to 106
considering log /ClFS/squid/logs/access.log
  Now: 2019-12-10 14:22
  Last rotated at 2019-12-10 06:25
  log does not need rotating (log has been rotated at 2019-12-10 6:25, that is not day ago yet)
not running postrotate script, since no logs were rotated
switching euid to 0 and egid to 0

rotating pattern: /var/log/squid/*.log  after 1 days (2 rotations)
empty log files are rotated, old logs are removed
switching euid to 0 and egid to 106
considering log /var/log/squid/cache.log
  Now: 2019-12-10 14:22
  Last rotated at 2019-12-10 06:00
  log does not need rotating (log has been rotated at 2019-12-10 6:0, that is not day ago yet)
switching euid to 0 and egid to 0
Ошибок нет, вижу что сейчас ничего не происходит потому что еще не прошел день, но в директории /var/log/squid остается больше двух файлов, а в ClFS больше 5. Настроено всё уже больше месяца. Я же правильно понимаю что файлы при такой конфигурации должны удаляться автоматически и дополнительно ничего не нужно настраивать? При вроде бы аналогичной настройке, на другом сервере, всё работает корректно. Мануалов читал несколько разных, везде написано что при конфигурации с rotate 5 и daily, у меня должно каждый день оставаться 5 файлов логов.

Я что-то упустил и дополнительно нужно где-то настроить удаление старых файлов?

Попробовал принудительно выполнить очистку через logrotate -f /etc/logrotate.d/squid -d. Вижу что скрипт отрабатывает:


rotating pattern: /ClFS/squid/logs/access.log  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /ClFS/squid/logs/access.log
  Now: 2019-12-10 15:21
  Last rotated at 2019-12-10 15:19
  log needs rotating
rotating log /ClFS/squid/logs/access.log, log->rotateCount is 5
dateext suffix '-20191210'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /ClFS/squid/logs/access.log.5.gz to /ClFS/squid/logs/access.log.6.gz (rotatecount 5, logstart 1, i 5),
renaming /ClFS/squid/logs/access.log.4.gz to /ClFS/squid/logs/access.log.5.gz (rotatecount 5, logstart 1, i 4),
renaming /ClFS/squid/logs/access.log.3.gz to /ClFS/squid/logs/access.log.4.gz (rotatecount 5, logstart 1, i 3),
renaming /ClFS/squid/logs/access.log.2.gz to /ClFS/squid/logs/access.log.3.gz (rotatecount 5, logstart 1, i 2),
renaming /ClFS/squid/logs/access.log.1.gz to /ClFS/squid/logs/access.log.2.gz (rotatecount 5, logstart 1, i 1),
renaming /ClFS/squid/logs/access.log.0.gz to /ClFS/squid/logs/access.log.1.gz (rotatecount 5, logstart 1, i 0),
log /ClFS/squid/logs/access.log.6.gz doesn't exist -- won't try to dispose of it
renaming /ClFS/squid/logs/access.log to /ClFS/squid/logs/access.log.1
creating new /ClFS/squid/logs/access.log mode = 0640 uid = 13 gid = 13

Но в директориях старые файлы остаются, ничего не удаляется.

root@squid-01:/home/stb# ls -la /ClFS/squid/logs/
total 30885642
drwxr-xr-x 2 proxy proxy       4096 дек 10 15:19 .
drwxr-xr-x 5 proxy proxy       4096 дек  6 08:49 ..
-rw-r----- 1 proxy proxy  128687334 дек 10 15:35 access.log
-rw-r----- 1 proxy proxy          0 дек 10 15:19 access.log.0
-rw-r----- 1 root  root   312210822 сен  9 07:47 access.log.06-09.09
-rw-r----- 1 proxy proxy   65811620 ноя 25 06:25 access.log.12.gz
-rw-r----- 1 proxy proxy   61090187 ноя 24 06:25 access.log.13.gz
-rw-r----- 1 proxy proxy  234014030 ноя 23 06:25 access.log.14.gz
-rw-r----- 1 proxy proxy   15891869 дек 10 15:19 access.log.1.gz
-rw-r----- 1 proxy proxy  120616827 дек 10 15:19 access.log.2
-rw-r----- 1 proxy proxy 3550927790 дек 10 15:04 access.log.3
-rw-r----- 1 proxy proxy  764099836 дек 10 06:25 access.log.3.gz
-rw-r----- 1 proxy proxy 6474753207 дек 10 06:25 access.log.4
-rw-r----- 1 proxy proxy  234113705 дек  9 06:25 access.log.4.gz
-rw-r----- 1 proxy proxy 3063272437 дек  9 06:25 access.log.5
-rw-r----- 1 proxy proxy  247080271 дек  8 06:25 access.log.5.gz
-rw-r----- 1 proxy proxy 3125321940 дек  8 06:25 access.log.6
-rw-r----- 1 proxy proxy 5311918958 дек  7 06:25 access.log.7
-rw-r----- 1 proxy proxy  248557571 ноя 30 06:25 access.log.7.gz
-rw-r----- 1 proxy proxy 5469450324 дек  6 06:25 access.log.8
-rw-r----- 1 proxy proxy 2199066411 дек  5 06:25 access.log.9

Все верно и я не так понял принцип работы logrotate или все же файлы должны быть удалены?

KOTOXJle6 ()
Последнее исправление: KOTOXJle6 (всего исправлений: 1)
Ответ на: комментарий от KOTOXJle6

Почистил всю папку сам, оставил только access.log и cache.log в соответствующих папках. Еще раз запустил logrotate вручную. Непонятно почему в логе четко написано renaming /ClFS/squid/logs/access.log to /ClFS/squid/logs/access.log.1, и так же для cache.log, но в папках остались только access.log и cache.log - ничего не переименовалось и не создалось.

KOTOXJle6 ()
Последнее исправление: KOTOXJle6 (всего исправлений: 1)
Ответ на: комментарий от KOTOXJle6

logrotate удаляет только те файлы, в пределах которых он работает. Т.е. если раньше не было параметра compress, то создавались файлы вида *.1, *.2, вот такие и удалялись бы. Теперь есть compress, значит удаляться будут *.1.gz, *.2.gz, а на несжатые он внимания не обращает.

Когда происходит ротация лога, он переименовывается в какой-то, если другой лог с таким именем уже есть, тогда logrotate переключается на переименование этого другого. И так далее, пока не дойдёт до лимита переименований (rotate N). Вот последний он уже не переименовывает, а удаляет.
Любые другие файлы, не участвующие в этом процессе, logrotate не замечает. Т.е., например, access.log.06-09.09 не удалится никогда, нужно чистить вручную.

spirit ★★★★★ ()
Ответ на: комментарий от spirit

Спасибо, стало немного понятнее. Но по идее, если я почистил всё, оставив только access.log и cache.log, то при запуске

logrotate -f /etc/logrotate.d/squid -d
у меня запись логов должна пойти в новый access.log, а старый должен переименоваться в access.log.1. Независимо от того, когда logrotate стоит на запуск в cron. А этого не произошло.

Почитал еще несколько тем с аналогичной проблемой, там у людей logrotate просто внезапно начинал работать. Не знаю, может у меня завтра всё станет нормально после ручной чистки лишнего.

KOTOXJle6 ()
Последнее исправление: KOTOXJle6 (всего исправлений: 1)
Ответ на: комментарий от KOTOXJle6

Не знаю, может у меня завтра всё станет нормально после ручной чистки лишнего.

Если только тестируете можно не ждать, просто поправить цифирки вот здесь /var/lib/logrotate/status

anc ★★★★★ ()
Ответ на: комментарий от KOTOXJle6

Ещё в logrotate есть такой момент, как обработка новых логов: если какой-то лог добавляется в обработку впервые, для него в /var/lib/logrotate/status (или /var/lib/logrotate.status) ещё нет пометки с датой. Поэтому при первом запуске logrotate ротацию этого лога не выполняет, просто ставит пометку, а уже при последующих делает ротацию.

Запуск через logrotate -f /etc/logrotate.d/squid не совсем корректный, т.к. при этом не читаются настройки из общего /etc/logrotate.conf.

Также при проблемах помогает просмотр ошибок в режиме отладки:

logrotate --debug /etc/logrotate.conf |& fgrep -i error

spirit ★★★★★ ()
Ответ на: комментарий от anc

Не, это сервер в проде, на нём 3к юзеров. Сегодня проверил - пока в папке есть основной access.log и 5 файлов .log.0, log.1.gz, log.2, log.2.gz и log.3. Завтра еще проверю, надеюсь количество не вырастет.

Большое всем спасибо за помощь!

KOTOXJle6 ()
Ответ на: комментарий от KOTOXJle6

К сожалению, не заработало. За эти дни накопились вот такие файлы:

-rw-r----- 1 proxy proxy  1239158691 дек 16 13:29 access.log
-rw-r----- 1 proxy proxy           0 дек 16 06:25 access.log.0
-rw-r----- 1 proxy proxy    57525754 дек 16 06:25 access.log.1.gz
-rw-r----- 1 proxy proxy   443571409 дек 16 06:25 access.log.2
-rw-r----- 1 proxy proxy    79578946 дек 15 06:25 access.log.2.gz
-rw-r----- 1 proxy proxy   777560840 дек 15 06:25 access.log.3
-rw-r----- 1 proxy proxy   313149210 дек 14 06:25 access.log.3.gz
-rw-r----- 1 proxy proxy  2998314101 дек 14 06:25 access.log.4
-rw-r----- 1 proxy proxy   784988641 дек 13 06:25 access.log.4.gz
-rw-r----- 1 proxy proxy 12431366181 дек 16 13:29 access.log.5
-rw-r----- 1 proxy proxy   714814379 дек 12 06:25 access.log.5.gz
-rw-r----- 1 proxy proxy  6007294981 дек 12 06:25 access.log.6
-rw-r----- 1 proxy proxy  2803396273 дек 11 06:25 access.log.7

drwxr-xr-x  2 proxy proxy     4096 дек 16 06:25 .
drwxrwxr-x 16 root  syslog    4096 дек 16 07:28 ..
-rw-r-----  1 proxy proxy  1355187 дек 16 13:35 cache.log
-rw-r-----  1 proxy proxy       63 дек 16 06:25 cache.log.0
-rw-r-----  1 proxy proxy  3530251 дек 15 06:25 cache.log.1
-rw-r-----  1 proxy proxy  1651863 дек 16 06:25 cache.log.2
-rw-r-----  1 proxy proxy       83 дек 14 06:25 cache.log.2.gz
-rw-r-----  1 proxy proxy  2323597 дек 13 06:25 cache.log.3
-rw-r-----  1 proxy proxy  2776645 дек 14 06:25 cache.log.4
-rw-r-----  1 proxy proxy  5253602 дек 11 06:25 cache.log.5
-rw-r-----  1 proxy proxy  4970258 дек 12 06:25 cache.log.6

В /var/lib/logrotate/status

"/ClFS/squid/logs/access.log" 2019-12-16-6:25:1
"/var/log/squid/cache.log" 2019-12-15-6:25:1

Команда

logrotate --debug /etc/logrotate.conf |& fgrep -i error
ошибок не показала. Если смотреть её вывод по указанным логам, то там вот это:

rotating pattern: /var/log/squid/*.log  after 1 days (2 rotations)
considering log /var/log/squid/cache.log
rotating log /var/log/squid/cache.log, log->rotateCount is 2
renaming /var/log/squid/cache.log.2.gz to /var/log/squid/cache.log.3.gz (rotatecount 2, logstart 1, i 2),
renaming /var/log/squid/cache.log.1.gz to /var/log/squid/cache.log.2.gz (rotatecount 2, logstart 1, i 1),
renaming /var/log/squid/cache.log.0.gz to /var/log/squid/cache.log.1.gz (rotatecount 2, logstart 1, i 0),
log /var/log/squid/cache.log.3.gz doesn't exist -- won't try to dispose of it
renaming /var/log/squid/cache.log to /var/log/squid/cache.log.1

И

rotating pattern: /ClFS/squid/logs/access.log  after 1 days (5 rotations)
considering log /ClFS/squid/logs/access.log

Странно что он в одном месте удалил .gz, а всё остальное оставил. В другом просто сжимает логи, но ничего не удаляет.

KOTOXJle6 ()
Последнее исправление: KOTOXJle6 (всего исправлений: 1)
Ответ на: комментарий от KOTOXJle6

После запуска

logrotate -vf /etc/logrotate.conf

Удалились те журналы, которые должны были удалиться - cache.log.3 и access.log.3, access.log.4. При этом остались все архивы

-rw-r-----  1 proxy proxy     3337 дек 16 13:59 cache.log.1
-rw-r-----  1 proxy proxy       63 дек 16 06:25 cache.log.2
-rw-r-----  1 proxy proxy       83 дек 14 06:25 cache.log.2.gz
-rw-r-----  1 proxy proxy  2323597 дек 13 06:25 cache.log.4
-rw-r-----  1 proxy proxy  2776645 дек 14 06:25 cache.log.5
-rw-r-----  1 proxy proxy  5253602 дек 11 06:25 cache.log.6
-rw-r-----  1 proxy proxy  4970258 дек 12 06:25 cache.log.7
-rw-r----- 1 proxy proxy     2393301 дек 16 14:00 access.log
-rw-r----- 1 proxy proxy           0 дек 16 13:59 access.log.0
-rw-r----- 1 proxy proxy    57525754 дек 16 06:25 access.log.1.gz
-rw-r----- 1 proxy proxy  1348993427 дек 16 13:59 access.log.2
-rw-r----- 1 proxy proxy    79578946 дек 15 06:25 access.log.2.gz
-rw-r----- 1 proxy proxy   313149210 дек 14 06:25 access.log.3.gz
-rw-r----- 1 proxy proxy   784988641 дек 13 06:25 access.log.4.gz
-rw-r----- 1 proxy proxy  2998314101 дек 14 06:25 access.log.5
-rw-r----- 1 proxy proxy   714814379 дек 12 06:25 access.log.5.gz
-rw-r----- 1 proxy proxy 12535501960 дек 16 14:00 access.log.6
-rw-r----- 1 proxy proxy  6007294981 дек 12 06:25 access.log.7
-rw-r----- 1 proxy proxy  2803396273 дек 11 06:25 access.log.8
KOTOXJle6 ()
Ответ на: комментарий от anc

Да, спасибо. Я понял что если не включать компрессию, то логи удаляются корректно, пока оставил этот вариант. Но только не понял как можно чистить логи, если компрессия используется?

KOTOXJle6 ()
Ответ на: комментарий от anc

Несколько раз перечитал и не понял. Из того что написали выходит что если я сейчас удалю все файлы и включу компрессию, то у меня при лимите в 2 должны будут сохраняться логи access.log, access.log.1 и access.log.1.gz. В прошлый раз я так и делал и логи продолжали переименовываться и копиться. Это был глюк? Если нет, то я не понимаю как настроить так, чтобы logrotate обращал внимание и на .log и на .log.gz

KOTOXJle6 ()
Ответ на: комментарий от anc

Не знаю. Мне кажется было бы удобно, если бы основной лог был в обычном виде, log.1, 2, 3 в .gz, а остальное бы удалялось. Я правильно понимаю что чтобы получить такой результат нужно кроме logrotate использовать что-то еще, либо как-то настраивать два задания - одно на .log и одно на .log.gz?

KOTOXJle6 ()
Последнее исправление: KOTOXJle6 (всего исправлений: 1)