[리눅스] logrotate 개념 및 설정 방법, 로그 관리 손쉽게!

반응형

 

logrotate란?

logrotate는 각종 실행 파일의 행적을 남기는 로그 파일들을 로테이션을 시켜 관리할 수 있는 Linux 기능이다.

용량, 압축, 날짜별 관리, 메일링 등 부가적인 기능들을 이용해 관리에 용이하게끔 활용할 수 있다.

 

 

logrotate 관련 파일

경로 및 파일 설명
/usr/sbin/logrotate 실행 파일
/etc/logrotate.conf 기본 설정 파일
/etc/logrotate.d/* 개별 설정 파일
/var/lib/logrotate/logrotate.status logrotate 실행 로그
/etc/cron.daily/logrotate logrotate는 Daily Cron에 의해 구동됨

 

 

logrotate 설정 방법

기본 설정 파일인 /etc/logrotate.conf을 열어보면 아래처럼 Default로 설정된 항목들을 확인할 수 있다.

# vi /etc/logrotate.conf

# see "man logrotate" for details

# rotate log files weekly
weekly 

# 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 

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d // /etc/logrotate.d 하위에 개별 설정 파일도 참고한다는 의미

# system-specific logs may be also be configured here.

### 기본 설정 파일에 로그를 관리하려면 아래처럼 작성하면 된다. (예시) ###
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

 

 

실제로 사용 중인 nginx 로그 파일 설정을 들여다보자

# cd /etc/logrotate.d
# vi access.log

/var/log/nginx/access.log{
  copytruncate			// 로테이트 수행 후 원본 로그 파일 크기를 0으로 리셋
  daily               		// 백업 주기 daily(일), weekly(주), monthly(월), yearly(년)
  rotate 5            		// 최대 로그 파일 개수
  create 0640 appuser commus	// create [권한] [유저] [그룹]
  missingok           		// 대상 로그 파일이 존재하지 않아도 에러 발생 없음
  notifempty          		// 대상 로그 파일이 비어있으면 로테이트 수행 안함
  maxsize 1G          		// 지정크기보다 크거나(OR) 지정시간이 지났을 때 로테이트 수행
  dateext             		// 대상 로그 파일명에 확장자 추가(Default : YYYYMMDD)
  dateformat -%Y%m%d_%s   	// YYYYMMDD 형식이 아닌 다른 형식으로 지정 가능
  compress			// 기간이 지난 파일은 삭제하지 않고 압축
  compressext .gz		// 확장자는 .gz
  delaycompress			// 최근 파일 외 전부 압축
}


# 그 외 자주 사용되는 옵션
maxage 30	// 30일이 지난 경우 삭제
minsize 1G	// 대상 원본 로그 파일의 크기가 1GB보다 크면서
		지정한 시간 조건(daily/weekly/monthly/yearly)을 충족했을 때 로테이트 수행
maxsize 50M	// 대상 원본 로그 파일의 크기가 25MB보다 크거나
		지정한 시간 조건을 충족했을 때 로테이트 수행
size 3G		// 지정한 시간 조건은 무시하고
		대상 원본 로그 파일의 크기가 3GB보다 크면 로테이트 수행


* size의 크기 단위는 아래와 같음
Default : byte
kilobytes : size + K (ex. 500K)
Megabytes : size + M (ex. 2048M)
Gigabytes : size + G (ex. 1G)

 

 

실무 테스트

* 하루 미만의 기간 단위로 logrotate 수행하고 싶다면?

→ 최소 단위가 daily(일)이다. 시간 단위로 관리하려면 crontab을 활용해야 한다.

→ 또한, 특정 시간 단위로 지정한 만큼 rotate 된 파일의 데이트 포맷 형식도 파일 구분을 위해 다르게 설정해야 함(dateformat)

 

 

* minsize(and 조건), maxsize(or 조건), size

 예시1) 로그 파일 크기가 20M이고, 하루가 지난 경우

설정값

minsize 30M

daily

→  하루는 지났지만, 30M를 넘지 못했으므로 미수행

 

설정값

maxsize 30M

daily

→ 30M를 넘지 못했지만, 하루가 지났기에 수행

 

설정값

size 30M

daily

→ 시간에 관계없이, 파일 크기가 30M에 도달했느냐가 관건이므로 미수행

 

 예시2) 로그 파일 크기가 65M이고, 하루가 지난 경우

설정값

minsize 50M

daily

→ 50M를 넘었고, 하루가 지났기에 수행

 

설정값

maxsize 50M

daily

→ 파일 크기와 기간 둘 다 충족했으므로 수행(둘 중 하나만 달성해도 수행됨)

 

설정값

size 50M

daily

→ 시간에 관계없이, 50M를 넘었으므로 수행

 

 예시3) 로그 파일 크기가 65M이고, 3시간 후 크론잡에 의해 재실행된 경우

설정값

minsize 50M

daily

→ 50M를 넘었지만, 하루가 안 지났기에 미수행

 

설정값

maxsize 50M

daily

→ 하루가 안 지났지만, 50M를 넘었으므로 수행

 

설정값

size 50M

daily

→ 시간에 관계없이, 50M를 넘었으므로 수행

 

 예시4) 원본 로그 파일 크기 관계없이 매일 수행하고 싶다면

size 1

daily

 

 예시5) 원본 로그 파일 크기 관계없이 매시간(1시간마다) 수행하고 싶다면

size 1

+ crontab 활용하여 1시간마다 호출하기

 

 예시6) 시간 조건과 관계없이 로그 파일 크기 기준으로만 수행하고 싶다면

rotate 9999

size 30M

+ crontab 활용하여 oo시간마다 호출하기

(원본 로그 파일이 30M 크기가 되는데 얼마나 걸리는지 정확하게 알아야 호출 시간 간격을 설정할 수 있다.)

반응형

댓글

Designed by JB FACTORY