application을 구현할 때, 운영 및 유지보수를 위해 log를 기록하는 것은 당연히 요구되는 기능이다. log를 기록하고 관리하는 방법은 다양할텐데 file로 로그를 출력하는 application에는 특정 기간 또는 용량을 기준으로 log file을 분리하여 기록하도록 요구되는 경우가 많다. linux에서 구동되는 application에서 log file에 대한 관리(rotate, delete)를 따로 구현하고 싶지 않다면 logrotate라는 데몬을 활용하여 쉽게 rotate와 삭제 관리가 가능하다. CentOS, Ubuntu 모두 설정 방법은 동일하다.
logrotate 데몬 설치 방법, 설정 방법, 그리고 logrotate를 적용한 후 rotate가 잘 되는지 확인을 빠르게 하기 위해 사용했던 단위 테스트 방법에 대해 설명을 해보려고 한다.
설치 하기 Installation
CentOS 7
yum install logrotate
Ubuntu 18.04
apt install logrotate
설정 하기 Configuration
데몬 기본 정보
- 데몬 위치 : /usr/sbin/logrotate
- 데몬 설정 파일 경로 : /etc/logrotate.conf
- rotate 기능을 활용하고 싶은 application의 rotate 설정 파일 경로 : /etc/logrotate.d/
- 데몬에서 관리되는 log file에 대한 rotate 상태 기록 파일 : /var/lib/logrotate/logrotate.status
logrotate.conf 설정 하기
기본적으로 데몬이 설치되면 기본 설정 파일이 생성되고, 기본적인 설정 값들이 포함되어 있다.
그 중에 application log의 rotate rule을 설정한 설정 파일들을 /etc/logrotate.d/ 경로에 포함하고, 그 경로를 데몬 설정파일에 아래와 같이 참조하도록 설정이 되어 있음을 확인한다.
Application log의 rotate 설정 하기
/etc/logrotate.d/ 경로에 testlotate 파일을 아래와 같이 생성
주요 설정 항목 :
* 더 많은 옵션에 대해서는 man logrotate 를 참고.
- rotate 10000 : 로그 파일 갯수를 10000개로 유지 (10000개가 넘어가면 오래된 파일부터 삭제)
- create : 원본 파일이 roate되고, 원본 파일명으로 신규 파일이 생성 (비활성화 nocreate, 복사본을 만들려면 copy. copy 옵션을 사용할 경우 create 옵션이 적용되지 않음)
- daily : 일단위로 rotate (weekly, monthly, hourly 등 원하는 rotate 기간에 따라 설정)
- missingok : 로그 파일이 없는 경우에도 에러 없이 다음으로 넘어감 (nomissingok 가 default. 로그 없을 시 error 발생)
- dateext : test.log.1 test.log.2 처럼 숫자를 붙이는 대신 지정한(dateformat) 날짜 형태의 값으로 확장자를 생성
- dateformat : dateext 옵션과 함께 사용하며, 로그 파일이 rotate될 때, 어떤 형태로 확장자를 생성할지 설정 (test.log -> test.log-2021-07-31_00 )
- maxage 14 : 14일 이상이 지난 로그 파일을 삭제
- maxsize 10M : 10M 이상이 된 로그 파일을 설정된 기간 조건과 관계없이 rotate
실행 하기 Run - Cron 데몬 활용하기
logrotate 는 cron 데몬을 통해 주기적으로 logrotate 데몬을 실행하는 방법을 사용하는 것이 일반적이다.
cron 데몬을 설정하는 방법은 crontab 이나 cron.daily에 등록하는 방법 등 다양하지만, 설치된 시점에 cron.daily에 등록이 되어 있기 때문에 설정을 확인하고, cron 데몬의 실행 여부를 확인하는 정도면 충분할 것 같다.
CentOS 에서 cron 데몬 실행 확인
[확인] systemctl status crond.service
[실행] systemctl start crond.service
Ubuntu 에서 cron 데몬 실행 확인
[확인] service cron status
[실행] service cron start
단위 테스트 하기(1) - logrotate 데몬 수동 실행
/usr/sbin/logrotate /etc/logrotate.conf
또는
/usr/sbin/logrotate /etc/logrotate.d/testrotate
단위 테스트 하기(2) - rotate 시뮬레이션 (logrotate 실행 시 예상 동작 확인)
logrotate를 실행하기 전에 rotate가 될지 여부를 시뮬레이션 해볼 수 있는 옵션이 있다.
rotate 테스트를 할 때, rotate 여부를 미리 확인할 수 있는 유용한 옵션이다. 실행 옵션 뒤에 -d 를 붙여 실행하면 실제 rotate가 되지는 않고, logrotate가 실행될 경우에 대한 기대 결과 및 체크된 내용에 대해 stdout 로그를 출력해준다.
/usr/sbin/logrotate /etc/logrotate.d/testrotate -d
< rotate 조건이 만족되지 않았을 경우 >
< rotate 조건이 만족될 경우 >
단위 테스트 하기(3) - 시간별 또는 일별로 rotate 설정 후, 시간이 도달하기 전에 강제로 rotate 실행하기
daily 옵션을 통해 1일이 지난 로그에 대해 rotate 조건을 설정하였다고 가정한다.
이 daily 옵션은 logrotate 데몬에 의해 마지막 rotate가 실행되었던 시간을 기준으로 1일 이상이 지났다면 rotate를 하겠다는 의미이다.
rotate가 1일 이상이 되었다고 해도 logrotate 데몬이 실행되지 않으면 rotate 되지 않으며, logrotate 데몬이 하루에 10번 실행이 된다 하더라도 마지막 rotate 시간이 1일 이상 지나지 않았다면 rotate 되지 않는다.
만약 로그가 rotate 된 시간이 아직 1일이 지나지 않았음에도 logrotate 데몬을 실행하여 강제로 rotate를 하려면 어떻게 해야할까?
..
logrotate 데몬이 각 로그별로 마지막 rotate 된 시간을 기록하는 파일을 편집하여, 마치 rotate한 시간이 1일 이상 지난 것처럼 조작 후, logrotate 데몬을 실행하면 된다.
/var/lib/logrotate/logrotate.status 파일을 vi 편집기로 편집하여, 강제로 rotate를 하고 싶은 log 파일 위치를 찾아 시간 값을 1일 이상의 과거 시간으로 변경하고, logrotate 데몬을 수동으로 실행한다.
'Engineering > OS -Linux, Windows, EXSi' 카테고리의 다른 글
linux + docker 환경에서 netstat 로 ESTABLISHED socket 조회하기 (2) | 2022.01.24 |
---|---|
Ubuntu에서 IP Address Setting 하기 (0) | 2022.01.17 |
자주 사용하는 docker 명령어(command) (0) | 2021.12.19 |
Redis : 기본 설치(docker-compose) 및 redis-cli 기본 사용 (1) | 2021.10.08 |
CentOS에서 NFS로 폴더 공유하기 & reboot 후에도 mount 유지하기 (0) | 2021.08.24 |
댓글