[리눅스] logrotate 개념 및 설정 방법, 로그 관리 손쉽게!
- IT/linux
- 2024. 3. 20. 15:40
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 크기가 되는데 얼마나 걸리는지 정확하게 알아야 호출 시간 간격을 설정할 수 있다.)
'IT > linux' 카테고리의 다른 글
[리눅스] RHCSA 9(2), network 및 hostname 설정 (0) | 2024.03.27 |
---|---|
[리눅스] RHCSA 9(1), root 암호 복구/분실 (0) | 2024.03.26 |
[리눅스] 소유자 없는 파일 또는 소유그룹 없는 파일 찾기 (0) | 2024.03.18 |
[리눅스] 계정 잠금 임계값 설정 (RHEL 8버전 이상) (0) | 2024.03.11 |
[리눅스] root 파일시스템 Read-only file system 문제 (0) | 2023.02.04 |