카테고리 없음

[Linux] 서버 로그관리 - logrotate

AustinProd 2022. 4. 27. 23:58

오늘 포스트에서는 리눅스 서버 로그 관리 툴 logrotate에 대해 알아본다. 서버에서 응용 프로그램을 실행하면 보통 로그 파일 생성된다. 로그는 애플리케이션과 같은 응용 프로그램이 실행되어 호출될 때 쌓이게 되는데, 이 로그를 잘 관리해주지 못하면 서버 스토리지가 가득 차거나 프로그램 실행 속도가 느려지는 등의 문제를 야기할 수 있다.

 

logrotate는 서버에 쌓이는 로그를 사용자 설정에 맞춰 관리할 수 있게 돕니다. 일정 시간 주기를 설정해 오래된 로그는 자동 삭제되게 할 수 있으며, 일별 혹은 주별 로그를 압축 파일로 만들게 할 수 있다. 이 외에도 로그 파일명 지정, 생성된 로그가 없을 때 알림 기능 등을 설정할 수 있다.

 

아래 본문에서는 logrotate 옵션들과 설정 및 실행 방법에 대해 정리하였다.

 

로그 설정 파일 생성

logrotate 구조는 다음과 같다. lograte 데몬이 있고, 이 데몬이 서버 응용 프로그램 로그 파일을 바라보게 매핑시켜 생성되는 로그를 관리한다. 나는 아래 소개한 4개 구조 중, 마지막에 있는 프로세스 설정 파일에 대해 다룰 예정이다.

  • logrotate 데몬 : /usr/sbin/logrotate
  • logrotate 데몬 설정 파일 : /etc/logrotate.conf
  • logrotate 데몬 로그 : /etc/cron.daily/logrotate
  • logrotate 적용 프로세스 설정 파일 : /etc/logrotate.d/[프로세스 설정 파일]

 

먼저 logrotate 경로로 이동한 뒤, 관리자 권한으로 로그 설정 파일을 생성한다. 파일명에 규칙은 없는 걸로 알고 있다. 나는 보통 log_프로세스명으로 표기한다.

 

선택 사항이지만, 나는 파일이 수정될 경우를 피하기 위해 파일이 생성되면 파일 권한을 644로 설정한다. ( 644 = 파일 소유자는 읽고 쓰기, 그룹 소유자와 일반 사용자는 읽기만 )

 

# logrotate 이동
/etc/logrotate.d/

# 설정 파일 생성
sudo vi log_sample

# 파일 권한 변경
sudo chmod 644 log_sample

 

로깅 옵션 설정

응용 프로그램에 매핑시킬 logrotate 설정 파일이 위 경로에 생성했다면, 이제 파일 내부에 옵션을 넣어준다. 로그 파일이 위치한 경로에 중괄호로 옵션값을 감싸주는 형식으로 입력하면 된다. -> 로그 경로 { 설정 옵션 ... }

 

기본적인 로깅 옵션을 정리했다. 자세한 사용 예시는 아래 코드 블록에서 확인할 수 있다.

 

  • daily, weekly, monthly : 로그 파일 정리 주기 (일별, 주별, 월별 등 정해진 시간 주기에 맞춰 로그 파일 관리)
  • rotate : 로그 파일 보관 주기. 이 옵션 뒤에 숫자를 입력하며, 시간이 경과된 파일은 삭제 처리 (이 주기는 위 daily, weekly, monthy 텀을 따름)
  • dateext : rotate 처리된 로그 파일명에 날짜가 입력되게 설정
  • compress : 로그 파일 압축
  • notifempty : 지정된 경로에 로그 파일이 없을 경우 rotate 미실시
  • create : rotate 후 새로 생성될 파일 옵션 (권한 및 파일 소유자 지정)
  • missingok : 지정된 경로에 로그 파일이 없을 경우 에러 처리 미실시
  • copytruncate : 로그 파일 생성 방법 중 하나. rotate 처리된 로그 파일에 기존 로그가 계속 쌓이는 걸 방지 (자세한 내용은 https://brunch.co.kr/@alden/27 참조)

 

# logrotate 설정 파일 형식 -> 로그 경로 { 설정 옵션 }
/home/userName/appName/app.log {
  daily
  rotate 14
  dateext
  missingok
  compress
  notifempty
  create 644 userName userName
  copytruncate
  su userName userName
}

 

logrotate 실행

기본적으로 logrotate가 설치되면 리눅스에 포함되어 있는 cron(자동 예약 스케쥴러)에 등록된다. 이 말은 곧, logrotate를 실행하는 가장 쉬운 방법은 cron을 재실행하는 것이다.

 

추가로 logrotate 데몬을 이용한 실행법이나 디버그 모드, 실행 과정 모니터링 방법을 공유한다.

 

# 방법 1  cron 재실행
sudo systemctl restart cron.service

# 방법 2 - logrotate 데몬 실행
/usr/sbin/logrotate -f /etc/logrotate.d/log_sample

# 방법 3 - logrotate 데몬 디버그 모드 실행
/usr/sbin/logrotate -d /etc/logrotate.d/log_sample

# 방법 4 - logrotate 데몬 실행 및 모니터링
/usr/sbin/logrotate -v /etc/logrotate.d/log_sample