320x100
320x100

로그로테이트
: 지속적으로 쌓이는 로그의 크기가 무한하게 커지는 것을 방지하기 위해 로그를 분할하거나 압축 및 제거하여 관리하는 것
: 하루, 일주일, 한 달, 연 단위 혹은 크기 단위로 로테이션을 수행
: 리눅스 자체적으로 /etc/cron.daily 디렉터리에 서비스가 등록되어 스케줄링을 통해 실행됨

 

 



실행 방식
: logrotate 프로세스가 /etc/logrotate.conf를 읽고 해당 파일이 참고하는 위치 (default /etc/logrotate.d)에 위치하는 각 설정 파일들을 참고하여 매일 실행 (/etc/cron.daily)

: 설정에 따라 로그를 분할하여 압축 후 생성하거나 로그를 삭제한다 (로그 파일의 이름을 바꾸고 원래 이름의 빈 파일을 생성한다)

 

 

 


관련 명령어

: logrotate [option] <config file>


 

 

관련 파일
- /etc/logrotate.conf
: 로그로테이트 설정 파일
: 다른 logrotate를 읽어올 수도 있음

<log file> { 
     # 주기
     [daily, weekly, monthly, yearly <cycle of rotates>]
    
    # 로테이트 횟수
     [rotate <number of rotates>]
    
    # 로테이트 실행 후 비어있는 로그 파일 생성
     [create <permission value> <owner> <own group>]
    
    # 로그 파일 크기가 설정 값 보다 크고 지정한 주기가 됐을때 로테이트 수행
     [minsize <1M, 100k>]
    
    # 로그 파일 크기가 설정 값 보다 크거나 지정한 주기가 지났을때 로테이트 수행
    [maxsize <1M, 100k>]
    
    # 주기에 관계 없이 로테이트를 수행하는 로그 파일 크기
    [size <1M, 100k>]
        
    # 로테이트를 통해 새로 생성되는 파일에 날짜를 덧붙혀서 생성하는지 여부
     [dateext]
    
    # 로테이트를 통해 생성되는 파일을 압축하는지 여부
     [compress]
    
    # 설정을 참고할 로그로테이트 파일 위치
     [include /etc/logrotate.d]
    
    # 로그 파일이 존재하지 않는 경우 메시지 출력 (기본 값)
     [nomissingok]
    
    # 로그 파일이 존재하지 않아도 오류로 처리하지 않음
     [missingok]
     
    # 로테이트 시 기존 로그 파일 복사 후 제거 후 빈 파일로 생성
     [copytruncate]
}


- /etc/logrotate.d/*
: 로그 로테이트로 구동되는 프로그램 설정 파일 목록 디렉터리
 

- /var/lib/logrotate/status
: 로그 로테이트가 구동된 기록
 

- /etc/cron.daily/logrotate

: 로그 로테이트가 실행되는 cron 위치


 

 

 

수동 실행 방법
- logrotate /etc/logrotate.conf

- logrotate /etc/logrotate.d/testrotate

 

 


강제 실행
- /usr/sbin/logrotate -f /etc/logrotate.conf

 

 


시뮬레이션

- /usr/sbin/logrotate /etc/logrotate.d/testrotate -d

: `-d` 옵션으로 실행하면 실제 로테이트가 실행되지는 않고 실행 되었을 때에 대한 기대 결과 및 체크 내용을 stdout으로 출력
  
  

 


주기가 되기전에 로테이트 실행
- vim /var/lib/logrotate/logrotate
: 로테이트를 실행시키고 싶은 로그 파일의 시간 값을 1일 이상의 과거 시간으로 변경

: logrotate는 재시작을 하지 않아도 된다 crond에 의해서 하루마다 실행되기 때문

 

 

 

 

 

copytruncate

: 로그로테이트 시 원본 로그 파일을 복사하여 로테이트 한 뒤, 기존 파일을 삭제하고 빈 파일로 생성하는 옵션

: 해당 옵션을 사용하지 않으면 로그로테이트는 로그 파일의 이름만 바꾸고 빈 파일을 생성하여 로테이트를 돌리는데, 이 경우 아이노드 등의 정보가 바뀌지 않기 때문에 실행중인 프로그램이 있다면 계속해서 로테이트 된 로그파일에 로그를 쌓게 된다

: 때문에 `prerotate`나 `endscript` 등의 옵션을 통해 스크립트를 실행 전, 후에 로테이트를 실행하기도 한다

: 그러나 `copytruncate` 옵션을 사용하면 이러한 작업 없이 실시간으로 로테이트를 돌리고 로그가 쌓이는 파일도 바꿀 수 있다

 

 

 

 

 

 


Reference

 

Linux : logrotate 설정 방법 및 강제로 rotate 단위 테스트하는 방법

application을 구현할 때, 운영 및 유지보수를 위해 log를 기록하는 것은 당연히 요구되는 기능이다. log를 기록하고 관리하는 방법은 다양할텐데 file로 로그를 출력하는 application에는 특정 기간 또는

jinane.tistory.com

 

로그파일을 자동으로 분활하도록 하는 법 — logrotate

logrotate이란 연속해서 쓰여지고 있는 Log와 같은 파일을 로테이션시키는 Linux 시스템 명령어입니다. 그 외에도 압축, 메일링 등의 부가적인 기능들을 포함합니다.

medium.com

 

logrotate, copytruncate의 함정

오늘은 logrotate에 대해 이야기해볼까 합니다. logrotate 중에서도 copytruncate라는 옵션에 대해서 이야기하려고 합니다. 아주 매력적인 copytruncate 옵션이 가지고 있는 장점과 단점에 대해 살펴보겠습

brunch.co.kr

 

300x250
728x90