내 잡다한 노트
Logrotate 본문
logrotate는 리눅스 시스템에서 로그 파일을 효율적이고 자동적으로 관리하기 위한 도구이다. 서버나 애플리케이션은 동작하면서 다양한 이벤트 및 상태 정보, 에러 메시지를 로그로 기록하게 되는데, 이 로그 파일의 크기가 무한정 커지면 디스크를 과도하게 차지하고 관리가 어려워진다. logrotate는 이러한 로그 파일을 일정한 정책에 따라 주기적으로 회전(rotation)하거나, 오래된 로그를 삭제하거나, 압축하고, 권한을 재설정하는 등 로그 파일 관리 전반을 자동화하여 시스템 관리자의 부담을 줄여준다.
아래는 logrotate의 주요 개념과 동작 방식, 설정 방법 등에 대한 자세한 설명이다.
주요 기능 및 동작 원리
- 로그 회전(log rotation):
특정 주기(일별, 주별, 월별 또는 로그 크기 기준)에 따라 기존의 로그 파일을 다른 이름(예: 로그파일.1, 로그파일.2.gz)으로 변경(회전)한 후 원래의 로그 파일 이름을 빈 파일로 재생성하여 애플리케이션이 같은 파일명을 계속 사용하도록 한다. 이를 통해 오래된 로그를 분리하고 새로운 로그 파일을 항상 초기화된 상태로 유지한다. - 로그 압축:
회전된 오래된 로그 파일을 gzip, bzip2, xz 등의 압축 프로그램을 사용해 압축함으로써 저장 공간을 절약할 수 있다. - 오래된 로그 파일 삭제:
일정한 회전 횟수 혹은 일정 기간이 지난 로그를 자동으로 삭제할 수 있다. 예를 들어 rotate 4 설정을 통해 4번 회전된 로그는 자동으로 삭제할 수 있다. - 권한 및 소유권 변경:
회전된 로그 파일에 대해 특정 소유자나 그룹, 퍼미션을 지정할 수 있다. 예를 들어 create 0640 root adm와 같이 설정하면 회전 후 생성되는 새로운 로그 파일의 권한, 소유자, 그룹을 제어할 수 있다. - 사전/사후 스크립트 실행:
로그 회전 전(prerotate)이나 후(postrotate)에 특정 스크립트를 실행하여 추가 작업(예: 로그 분석, 알림 전송, 로그 서버로 이전 등)을 수행할 수 있다.
구성 파일 위치 및 형식
- 기본 설정 파일: /etc/logrotate.conf
여기에서 전역 설정 및 include 디렉토리를 지정할 수 있다. - 개별 서비스별 설정: /etc/logrotate.d/ 디렉토리 아래에 패키지나 서비스 단위별로 별도의 설정 파일이 위치한다. 예를 들어, apache2 로그 회전을 위한 /etc/logrotate.d/apache2와 같은 형식의 파일이 있을 수 있다.
logrotate는 기본적으로 /etc/logrotate.conf를 읽은 후, include /etc/logrotate.d와 같이 설정되어 있으면 해당 디렉토리 내의 모든 설정 파일을 추가로 읽어들여 전체 정책을 적용한다.
설정 예제
다음은 /etc/logrotate.d/apache2 파일의 예시이다. 아파치 웹서버의 액세스 로그(/var/log/apache2/access.log)와 에러 로그(/var/log/apache2/error.log)를 관리하는 설정이다.
/var/log/apache2/*.log {
weekly # 매주 로그 회전
rotate 4 # 4번 회전 이후 오래된 로그 삭제
compress # 회전된 로그를 gzip으로 압축
delaycompress # 압축을 회전 다음 회전 시점까지 지연(즉, 하나 건너뛰어 압축)
missingok # 로그 파일이 없어도 에러 발생 안 함
notifempty # 빈 로그 파일은 회전하지 않음
create 640 root adm # 회전 후 새로운 로그 파일 권한 및 소유자 지정
postrotate
# apache2 로그를 회전한 후 아파치 웹 서버에게 로그 파일을 재오픈하라고 알림
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
주요 디렉티브(설정 항목) 정리
- rotate [count]: 회전 보관 횟수.
- daily / weekly / monthly / yearly: 로그 회전 주기 지정.
- size [size]: 로그 크기가 특정 용량을 초과하면 회전하도록 지정.
- compress / nocompress: 회전 후 압축 여부 결정.
- delaycompress: 압축을 한 주기 늦게 수행.
- missingok: 해당 로그 파일이 없어도 에러를 내지 않음.
- notifempty: 로그 파일이 비어있다면 회전하지 않음.
- create [mode owner group]: 회전 후 새로운 로그 파일의 퍼미션, 소유자, 그룹 지정.
- postrotate / endscript: 로그 회전 후 실행할 스크립트 지정.
- prerotate / endscript: 로그 회전 전 실행할 스크립트 지정.
- sharedscripts: 여러 파일을 회전하는 경우 스크립트를 한 번만 실행하도록 지정.
-f 는 force 옵션이고, -d 옵션은 debug 옵션으로 실제로 작업을 수행하지 않고 시뮬레이션하는 옵션이다.
'DevOps > 리눅스' 카테고리의 다른 글
우분투 시스템 전역 환경변수 설정 (0) | 2024.12.10 |
---|---|
tmux (0) | 2024.11.30 |
PAM ( Pluggable Authentication Modules ) (0) | 2024.11.19 |
Reverse DNS가 필요한 이 (0) | 2024.11.19 |
Bind에서 Zone (0) | 2024.11.19 |