내 잡다한 노트

Logrotate 본문

DevOps/리눅스

Logrotate

peanutwalnut 2024. 12. 12. 19:19

logrotate는 리눅스 시스템에서 로그 파일을 효율적이고 자동적으로 관리하기 위한 도구이다. 서버나 애플리케이션은 동작하면서 다양한 이벤트 및 상태 정보, 에러 메시지를 로그로 기록하게 되는데, 이 로그 파일의 크기가 무한정 커지면 디스크를 과도하게 차지하고 관리가 어려워진다. logrotate는 이러한 로그 파일을 일정한 정책에 따라 주기적으로 회전(rotation)하거나, 오래된 로그를 삭제하거나, 압축하고, 권한을 재설정하는 등 로그 파일 관리 전반을 자동화하여 시스템 관리자의 부담을 줄여준다.

아래는 logrotate의 주요 개념과 동작 방식, 설정 방법 등에 대한 자세한 설명이다.

 

주요 기능 및 동작 원리

  1. 로그 회전(log rotation):
    특정 주기(일별, 주별, 월별 또는 로그 크기 기준)에 따라 기존의 로그 파일을 다른 이름(예: 로그파일.1, 로그파일.2.gz)으로 변경(회전)한 후 원래의 로그 파일 이름을 빈 파일로 재생성하여 애플리케이션이 같은 파일명을 계속 사용하도록 한다. 이를 통해 오래된 로그를 분리하고 새로운 로그 파일을 항상 초기화된 상태로 유지한다.
  2. 로그 압축:
    회전된 오래된 로그 파일을 gzip, bzip2, xz 등의 압축 프로그램을 사용해 압축함으로써 저장 공간을 절약할 수 있다.
  3. 오래된 로그 파일 삭제:
    일정한 회전 횟수 혹은 일정 기간이 지난 로그를 자동으로 삭제할 수 있다. 예를 들어 rotate 4 설정을 통해 4번 회전된 로그는 자동으로 삭제할 수 있다.
  4. 권한 및 소유권 변경:
    회전된 로그 파일에 대해 특정 소유자나 그룹, 퍼미션을 지정할 수 있다. 예를 들어 create 0640 root adm와 같이 설정하면 회전 후 생성되는 새로운 로그 파일의 권한, 소유자, 그룹을 제어할 수 있다.
  5. 사전/사후 스크립트 실행:
    로그 회전 전(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