본문 바로가기

linux

linux - log 관리 logrotate

logging는 서버를 구축하게 되면 기본적으로 디버깅용이나 에러를 감지하는 용도 등으로 

반드시 활용하게 되는 기능입니다. 

하지만 로깅을 잘못관리하게 되면 기하급수적으로 쌓이는 로그의 용량 때문에 

서버가 다운되기도 하여 관리가 필수적입니다. 

최근에 서버를 구축하는 과정에서 테스트용 서버조차에서도 로그관리가 잘못되어 

로그관리의 필요성을 느끼고 nodejs에서 제공하는 모듈로 로그파일을 관리하려다가 

서버가 도커이기 때문에 도커의 로그 + nodejs에서 생성하는 로그로 이중으로 저장되어 

nodejs에서는 console에 남기는 기능만 활용하고 로그파일은 도커에서 생성하는 파일로 관리하기로 

하였습니다. 

 

도커로 구성된 서버가 실행되는 동안에 도커가 로그를 남기기 때문에 도커 자체가 남기는 로그의 

디렉토리를 찾아야 합니다. 

도커는 다른 설정을 하지 않으면 컨테이너 기반으로 로깅을 하게 되며 

경로는 다음과 같습니다. 

## *는 컨테이너 이름이 됩니다. 
$ /var/lib/docker/containers/*/*.log

위와 같은 경로로 컨테이너 별로 따로따로 로그파일이 무분별하게 쌓이게 됩니다. 

그렇기 때문에 서버를 오래 운영하게 되면 로그파일의 용량은 무시할 수 없게 됩니다. 

서버를 지속적으로 운영하기 위해 일정 기간을 기준으로 관리할 수 있게 해 봅시다. 

 

우분투에는 logrotate(18.0.4 기준)프로그램이 설치되어 있습니다. 

프로그램이 설치되어있지 않으면 설치합니다. 

$ apt install logrotate

logrotate를 설정하는 다음 경로에 안듭니다. 

# 경로: /etc/logrotate.d/
$ vi docker-container
/var/lib/docker/containers/*/*.log {
  rotate 3
  ifempty
  daily
  compress
  size=1M
  missingok
  delaycompress
  copytruncate
  include /home/ubuntu/logs
  mail scott.yang@chainrefund.com
}

/etc/logrotate.d/ 경로에 저같은 경우는 docker-container라는 파일을 만들었습니다. 

그 아래 내용은 설정 정보입니다. 

rotate 30(숫자)  : log파일 30개 이상 되면 삭제
maxage 30(숫자) : 30일 이산된 로그 파일 삭제
size : 지정한 용량이 되면 로그로테이트를 실행한다. 10k, 10M 이런식으로 지정한다.
create : [권한 유저 그룹] 으로 rotation된 로그파일 생성
notifempty : log 내용이 없으면 rotation 하지 않는다.
ifempty : 로그파일이 비어있는 경우에도 로테이트한다.
monthly : 월 단위로 로테이트 한다.
daily : 월 단위로 로테이트 한다.
weekly : 월 단위로 로테이트 한다.
compress : rotate 된 로그 gzip 압축
nocompress : 압축을 원치 않는다.
mail admin@mail : 로테이트 설정에 의해 보관주기가 끝난 파일을 메일로 발송한다.
mailfirst admin@mail : 로테이트시 신규파일 이전의 로그를 메일로 발송한다.
nomail : 메일로 통보받지 않음.
errors admin@mail : 로테이트 실행시 에러가 발생하면 이메일로 통보한다.
prerotate-endscript : 사이의 명령어를 로그파일 처리전에 실행한다.
postrotate-endscript : 사이의 명령어를 로그파일 처리후에 실행한다.
extension : 로테이트 후 생성되는 파일의 확정자를 지정한다.
copytruncate : 이옵션을 넣지 않으면 현재 사용중인 로그를 다른이름으로 move하고 새로운 파일을 생성한다.

설정 정보 참고하시기 바랍니다. 

 

기본적으로 logrotate는 리눅스의 cron.d로 실행하기 때문에 따로 재시작을 해주지 않아도 됩니다. 

하지만 지금 확인하고 싶다면 재시작을 할 수 있습니다. 

$ sudo /usr/sbin/logrotate -f /etc/logrotate.conf

재시작을 한 후 logrotate의 로그를 확인해봅니다. 

$ sudo /usr/sbin/logrotate -d /etc/logrotate.conf

참고사항

** logrotate 실행 순서

** logrotate 파일 구조

데몬 프로그램 : /usr/sbin/logrotate 

Logrotate 데몬 설정파일 : /etc/logrotate.conf

Logrotate를 프로세스 설정파일 : /etc/logrotate.d/

Logrotate 작업내역 로그 : /etc/cron.daily/logrotate

'linux' 카테고리의 다른 글

리눅스 파일 종류와 특징  (0) 2019.11.11
directory 사용 명령  (0) 2019.11.10