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)
Ответ на: комментарий от KOTOXJle6

Или я вас не понимаю, или достаточно опции compress

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.