Logrotate는 Linux에서 Log를 저장하며 관리할 때 특정 Log파일이 한 파일로 계속해서, 크기가 커지며 저장되는 걸 분산시켜줄 때 사용한다.
한 Log파일에 Log가 지속적으로 쌓이게 되면, Log 확인이 필요한 경우 너무 방대해 확인이 어려워 지고, 디스크 용량 또한 낭비된다.
Logrotate는 다음과 같은순서대로 동작한다.
Crontab ⏩ Cron.daily ⏩ Logrotate ⏩ Logrotate.conf ⏩ Logrotate.d
Logrotate를 구성하는 파일들은 아래와 같은 구조를 가진다.
/usr/sbin/logrotate
: Logrotate 데몬 프로그램/etc/logrotate.conf
: Logrotate 데몬 설정 파일/etc/logrotate.d
: Logrotate 프로세스 설정 파일/etc/cron.daily/logrotate
: Logrotate 작업내역 로그Logrotate는 OS 설치시 기본적으로 설치된다.
Logrotate가 설치되어있는지 확인하기 위해 아래 명령어를 입력해본다.
rpm -qa | grep logrotate
rpm -qa
✅[ -q (query) ] : 어떤 옵션으로 설치된 패키지에 대해 물어보겠다는 필수 옵션
rpm 명령어는 사용하고자 하는 옵션을 사용하기 위해서는 필수적으로 먼저 붙여야하는 옵션이 있어야 한다.
rpm [필수옵션+사용하고자 하는 옵션][패키지 이름]
rpm -q [패키지 이름]
이렇게 패키지가 깔려 있는지 확인할 수 있지만, 이름을 정확하게 입력해야하는 어려움이 있다. 예를 들어 "vim-enhanced-8.0.1763-13.el8.x86_64"이란 패키지가 깔려 있을 시, "rpm -q vim-enhanced" 이렇게 패키지 이름까지 정확히 모두 적어야 검색이 된다.
✅[ -a (all) ] : 시스템에 설치된 모든 패키지목록을 출력해라
응용하여 사용하면 rpm -qa | grep [간략한 패키지 이름]
을 통해 찾고자하는 패키지를 간편하게 찾을 수 있다.
설치가 되어 있지 않다면 아래 명령어를 통해 설치한다.
yum -y install logrotate
yum
✅ -y : 모든 물음에 예를 진행
rotate [숫자]
: log파일이 5개 이상 되면 삭제maxage [30]
: log파일이 30일 이상 되면 삭제size
: 지정된 용량보다 클 경우 rotate 실행create [권한][유저][그룹]
: rotate 되는 로그파일 권한 지정notifempty
: 로그 내용이 없으면 rotate 하지 않음ifempty
: 로그 내용이 없어도 rotate 진행monthly(월), weekly(주), daily(일)
rotate 진행compress
: 로테이트 되는 로그파일 gzip 압축nocompress
: 로테이트 되는 로그파일 gzip 압축 Xmissingok
: 로그 파일이 발견되지 않은 경우 에러처리 하지 않음dateext
: 백업 파일의 이름에 날짜가 들어가도록 함logrotate.conf는 Logrotate 실행의 모든 설정을 담당하는 파일이다.
# rotate log files weekly
# log 회전 주기 yearly : 매년, monthly : 매월, weekly : 매주, daily : 매일
daily
# keep 4 weeks worth of backlogs
# log 파일 개수, 해당 개수가 넘어가면 logrotate의 주기에 따라 실행됨
rotate 7
# create new (empty) log files after rotating old ones
# 새로운 log 파일 생성 여부, create : log 파일 생성, empty : log 파일 생성 안함
create
# use date as a suffix of the rotated file
# 파일명 날짜 여부, logrotate 실행 후 log파일에 날짜를 부여
dateext
# uncomment this if you want your log files compressed
# log파일 압축 여부, 로그 파일 크기 조절 용도
# compress
# RPM packages drop log rotation information into this directory
# 개별 로그 process 설정 경로
include /etc/logrotate.d
/etc/logrotate.d
에서는 Logrotate를 실행하는 개별 프로세스들에 대한 설정을 지정할 수 있다.
먼저 /etc/logrotate.d
경로에 들어간다.
해당 경로에서 log 생성을 원하는 config 파일을 작성해주면 된다.
/var/log/maillog /var/log/freshclam.log {
// 일 단위로 실행
daily
// 회전 주기 파일 개수
rotate 7
// log 파일 내용 없을 시 rotate 하지 않음
notifempty
// log 파일 없을 경우 error 메시지 출력 후 다음 실행
missingok
// 로그 파일 압축
compress
// 여러개 log 파일을 script로 공유하여 실행
sharedscripts
// logrotate 실행 후 스크립트 실행(스크립트 파일 경로가 와도 됨)
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
config 파일을 작성한 후 아래 명령어를 통해 Logrotate를 실행시켜준다.
/usr/sbin/logrotate -f /etc/logrotate.conf
주기적으로 Logrotate를 실행하기 원한다면, crontab을 활용해주면 된다.
#매주 일요일 자정 logrotate 실행
00 00 * * 7 /usr/sbin/logrotate -f /etc/logrotate.conf
아래는 실행 관련 Logrotate 명령어들 이다.
#logrotate 전체 실행
/usr/sbin/logrotate -d /etc/logrotate.conf
#특정 logrotate process 실행
/usr/sbin/logrotate -d /etc/logrotate.d/apache
# logrotate 디버그 모드
/usr/sbin/logrotate -d /etc/logrotate.conf
# 실행 과정 화면 출력
/usr/sbin/logrotate -v /etc/logrotate.conf