Logrotate가 예상대로 작동하지 않습니다.

Logrotate가 예상대로 작동하지 않습니다.

내 로그 회전 구성은 다음과 같습니다.

/var/log/glusterfs/*.log /var/log/glusterfs/bricks/*.log /var/log/glusterfs/bricks/*.log.* {
  sharedscripts
  daily
  rotate 3
  copytruncate
  size 100M
  missingok
  compress
  delaycompress
  ifempty
  postrotate
  /usr/bin/killall -HUP glusterfs > /dev/null 2>&1 || true
  /usr/bin/killall -HUP glusterd > /dev/null 2>&1 || true
  endscript
}

디렉토리는 다음과 같습니다.

username@server:/var/log/glusterfs/bricks$ ll
total 405980
-rw------- 1 root root         0 Dec 23 00:05 be-data.log
-rw------- 1 root root         1 Dec 29 09:38 be.log.1
-rw------- 1 root root         0 Dec 25 11:24 nl.log
-rw------- 1 root root         0 Dec 29 09:49 nl.log.1.1
-rw------- 1 root root         0 Dec 29 09:50 nl.log.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1.1
-rw------- 1 root root 368402432 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1.1.1
-rw------- 1 root root    610304 Dec 23 00:05 bo.log.1
-rw------- 1 root root    860160 Dec 23 00:05 bricks.log.1
-rw------- 1 root root    589824 Dec 23 00:05 other.log.1

내가 볼 수 있는 것:

  • 로그는 압축되지 않습니다.
  • 로그가 100MB보다 큼
  • 계산이 작동하지 않습니다
  • 빈 로그 파일이 존재하며 빈 로그 파일이 순환되는 것을 원하지 않습니다.

내 logrotate 구성은 위의 모든 문제를 어떻게 해결해야 합니까?

답변1

구성 파일에서 디렉터리의 로그 파일에 대해 두 가지 모드를 지정합니다 /var/log/glusterfs/bricks.

  1. *.log
  2. *.log.*

이러한 패턴 중 두 번째 패턴은 회전된 로그 파일과 일치합니다. 이것이 .1끝없이 접미사가 붙는 파일을 얻는 이유입니다.

로그 파일은 delaycompress구성에서 압축했기 때문에 압축되지 않습니다. 다음 회전에서는 압축됩니다. 첫 번째 문제(위의 두 번째 패턴으로 인해 이미 회전된 로그의 회전)는 모든 회전이 "첫 번째" 회전이므로 실제로 압축을 비활성화합니다.

로그 파일이 100M보다 크면 구성에 따라 순환됩니다. 이보다 더 큰 파일이 있습니다. 위의 두 번째 로그 파일 패턴과 관련된 문제로 인해 모든 호출에서 회전되고 압축되지 않습니다.

빈 로그 파일이 있습니다. 이는 위의 잘못된 로그 파일 일치 패턴의 또 다른 효과일 뿐입니다. 로그 파일이 회전되면 name-of-file.log.1원본 파일 에 복사되고 name-of-file.log잘립니다("비워짐"). 또한 *.log.*구성의 패턴 으로 인해 name-of-file.log.1다음 회전 시 파일이 복사되고 원본 파일은 잘립니다.name-of-file.log.1.1name-of-file.log.1

이 모든 것이 잘 작동하지만 로그 파일 모드는 실제 로그 파일뿐만 아니라 회전된 로그 파일도 가져오기 때문에 결국 혼란을 겪게 됩니다.

답변2

이번 주에 logrotate 맨페이지를 무료로 확인해 보세요!

   delaycompress
          Postpone compression of the previous log file to the next  rota‐
          tion  cycle.  This only has effect when used in combination with
          compress.  It can be used when some program cannot  be  told  to
          close  its logfile and thus might continue writing to the previ‐
          ous log file for some time.

   size size
          Log  files are rotated only if they grow bigger then size bytes.
          If size is followed by k, the size is assumed  to  be  in  kilo‐
          bytes.   If the M is used, the size is in megabytes, and if G is
          used, the size is in gigabytes. So size  100,  size  100k,  size
          100M and size 100G are all valid.

   ifempty
          Rotate  the  log  file  even  if  it  is  empty,  overriding the
          notifempty option (ifempty is the default).

관련 정보