Logrotate는 Linux에서 로그 데이터 손실을 처리합니다.

Logrotate는 Linux에서 로그 데이터 손실을 처리합니다.

우리는 로그 파일을 회전하기 위해 Linux logrotate를 사용합니다.

예:

/location/tomcat/logs/* /location/jboss/log/* {
      copytruncate
      daily
      rotate 10
      compress
      size 20M
      olddir rotated
      create 0644 test test
}

LINUX에 제공된 복사 잘림 정의에 따르면,

copytruncate
          Truncate  the  original log file in place after creating a copy,
          instead of moving the old log file and optionally creating a new
          one,  It  can be used when some program can not be told to close
          its logfile and thus might continue writing (appending)  to  the
          previous log file forever.  Note that there is a very small time
          slice between copying the file and truncating it, so  some  log-
          ging  data  might be lost.  When this option is used, the create
          option will have no effect, as the old log file stays in  place.

따라서 순환 중에 로그 파일의 데이터가 손실됩니다. 약 5~20초 정도 로그가 손실된 것으로 나타났습니다. 데이터 손실 없이 동일한 프로세스를 수행할 수 있는 방법/구성이 있습니까?

답변1

syslog-ng에서는 변수를 사용하고 날짜와 같은 항목을 포함하도록 출력 파일 이름을 설정할 수 있으므로 손실 없이 새 날 오전 12시에 자동으로 새 파일 쓰기를 시작할 수 있다는 것을 알고 있습니다.

그러나 syslog 프로그램을 syslog-ng로 변경해야 합니다. 하지만 유연성이 꼭 필요한 것 같습니다.

답변2

.set log/entry size를 사용하거나 다음을 logrotate사용하여 로그 파일 로깅 및 회전에서 전환할 수 있습니다.journaldsystemd-cat -t indentifier cmdline/etc/systemd/journald.confjournalctl --vacuum-size=, --vacuum-time=, --vacuum-files=

또 다른 방법은 logrotate사전 회전/사후 회전 기능을 사용하여 하루에 한 번씩 서버를 중지하고 로그를 회전한 다음 서버를 다시 시작하는 것입니다. 로그 회전 시간은 systemd logrotate.timer또는 (ana)cron 작업에 따라 다르며 오전 4시 또는 트래픽이 0만큼 낮은 시간으로 예약할 수 있습니다.

prerotate
    # stop jboss/tomcat server 
endscript

daily
rotate 10
compress
size 20M

postrotate
    #start servers
endscript

답변3

이것이 내가 로그로 하는 일입니다 Catalina:

/var/log/tomcat/catalina.out {
        daily
        size 100m
        compressext .gz
        compress
        delaycompress
        compressoptions "-9"
        dateformat -%Y%m%d-%s
        ifempty
        copytruncate
        prerotate
                SIZE=$(stat --printf='%s' /var/log/tomcat/catalina.out)
                /bin/bash -c "tail -c +$SIZE -f /var/log/tomcat/catalina.out > /var/log/tomcat/tmp.log" &
        endscript
        postrotate
                pgrep tail | xargs kill -9
                cat /var/log/tomcat/tmp.log >> /var/log/tomcat/catalina.out
                rm /var/log/tomcat/tmp.log -f
        endscript
}

선택적으로 명령 자체의 새로 고침 간격을 줄이기 위해 -swith를 지정할 수 있습니다 . 그리고 옵션을 사용하기 때문에 속도가 빠릅니다.tailtail-c

관련 정보