본문 바로가기
OS/Linux

Crontab과 Logrotate를 활용한 로그 순환

by BTC_JYP 2022. 6. 10.

안녕하세요~~ 저희는 공공의적 팀입니다~~ <(*^.^*)/


서버 운영에서 로그는 정말 중요한 데이터 중 하나입니다.

이렇게 중요한 데이터이지만, 덮어두고 쌓다보면 하나의 로그 파일에만 몇GB가 넘는 용량이 쌓여 스토리지 용량을 잡아먹곤 합니다.

 

이를 해결하기 위한 방안으로 Logrotate를 사용하게 되는데, 이 작업을 동일한 시간대에 실행하기 위해 crontab을 함께 사용하는 방안을 주로 사용합니다.

(주로 Daily로 로그가 순환되게끔 사용)

 

Crontab을 접목한 Logrotate가 실행되는 순서는 아래와 같습니다.

crontab > cron.daily > logrotate > logrotate.conf > logrotate.d


Crontab

사용자가 지정한 command를 crons 데몬이 주기적인 작업 실행을 처리

 

crontab과 관련된 파일

 - /etc/cron.d : 필요한 작업을 등록하는 파일

 - /etc/cron.allow : 해당 파일에 지정된 사용자만 crontab 사용 가능 (지정되지 않으면 사용 불가)

 - /etc/cron.deny : 해당 파일에 지정된 사용자는 crontab 사용 불가능, (허용 파일이 없는 경우)

 

crontab과 관련된 명령어

$crontab -l : 예약된 작업리스트

$crontab -e : crontab 작업 수정

$crontab -r : 예약된 작업 삭제

$crontab -u [username] : root 관리자는 해당 사용자 crontab 파일을 보거나 편집 및 삭제 가능

 

crontab 설정

# .---------------- 분 (0 - 59)
# |  .------------- 시간 (0 - 23)
# |  |   .---------- 일 (1 - 31)
# |  |   |  .------- 월 (1 - 12) OR jan,feb,mar,apr ...
# |  |   |  |   .---- 요일 (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |   |  |   |
# *  *  *  *  * user-name command to be executed

* 분 : 0~59
* 시간 : 0-24
* 일 : 0~31
* 월 : 1~12
* 요일 : 0~7(0 또는 7=일요일, 1=월, 2=화 . 3=수 , 4=목, 5=금=6, 토7=일)
user-name 사용자명 : /etc/crontab , /etc/cron.d에 저장될 경우 필요
command 작업명령 : 실행할 명령을 한줄로 기입

 

crontab 예시

위는 매일 새벽 1시에 apache access_log를 순환시키는 명령어 입니다.


Logrotate

직역하면 '로그순환', 말 그대로 로그를 순환시킬 수 있는 기능

 

Logrotate와 관련된 파일

 - /usr/sbin/logrotate : Logrotate 데몬 프로그램 위치

 - /etc/logrotate.conf : 데몬 설정 파일

 - /etc/logrotate.d/ : 프로세스 설정 폴더 (폴더 내 파일 위치)

 - /etc/cron.daily/logrotate : 작업내역 로그

 

logrotate.conf 예시

더보기

# see "man logrotate" for details
# rotate log files weekly
weekly    

#원하는 주기로 로그 회전

#yearly : 매년

#monthly : 매월

#weekly : 매주

#daily : 매일


# keep 4 weeks worth of backlogs
rotate 4

#정리할 로그의 갯수

# create new (empty) log files after rotating old ones
create

#새로운 파일 생성 여부

#create : 새로운 파일 생성

#empty : 새로운 파일 생성


# use date as a suffix of the rotated file
dateext

#로그 파일명의 날짜 부여

# uncomment this if you want your log files compressed
#compress

#로그 파일 압축 여부

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

#로그순환 프로세스 경로

 

logrotate.d 예시

더보기

[로그를 순환할 파일 경로] {
 copytruncate daily
 rotate 10000
 missingok
 notifempty
 dateext
 dateformat -%Y-%m-%d
}

설정할 수 있는 옵션들

설정
의미
daily | weekly | monthly | yearly 
rotate 주기
rotate 개수
순환되어 보관될 파일 개수
compress
순환될 파일 압축(gzip) 
nocompress
순환될 파일 압축하지 않음
compressext 확장자명
압축된 백업로그파일에 지정할 확장자 설정
compresscmd 압축명
gzip이외의 압축파일 지정 
cpmpressoptions 옵션
압축프로그램에 대한 옵션 설정(-9: 압축률 최대)
dateext
로그파일에  YYYYMMDD형식의 확장자 추가
errors 메일주소
에러발생시 지정된 메일주소로 메일 발송
extention 확장자명
순환된 로그파일의 확장자 지정
ifempty
로그파일이 비어있는 경우 순환(기본값)
notifempty 
로그파일이 비어있는 경우 순환하지 않는다.
mail 메일주소
순환 후 이전 로그파일을 지정된 메일주소로 발송
maxage
count로 지정된 날수가 지난 백업파일 삭제
missingok
로그파일이 없을 경우에도 에러처리하지 않는다.
prerotate / endscript
순환작업 전에 실행할 작업 설정
postrotate / endscript
순환작업 후에 실행할 작업 설정
sharedscripts
prerotate, postrotate 스크립트를 한번만 실행
size 사이즈
순환결과 파일사이즈가 지정한 크기를 넘징낳도록 설정
copytruncate
현재 로그파일의 내용을 복사하여 원본로그 파일의 크기를 0으로 생성

 

실행하는 방법

$/usr/sbin/logrotate -f /etc/logrotate.d/[파일 이름]


위 내용을 바탕으로 crontab을 적용시키면,

이랬던 로그가

이런식으로 설정한 명령어에 따라 매일 새로운 파일에 로그가 쌓이게 됩니다.

 

감사합니다.

댓글