백앤드 애플리케이션의 대부분이 REST 방식의 웹 애플리케이션이다. 애플리케이션들은 모두 아파치 웹 서버 방식의 엑세스로그를 남긴다. 일반유저들이 사용하는 API들이다 보니 상당한 크기의 로그파일들이 만들어진다. 일주일만 그냥 둬도 파일의 크기가 수 기가바이트를 넘어갈 판이다. 모든 로그 파일들은 ELK로 어차피 색인이 되기 때문에, 굳이 시스템에 남겨두거나 백업할 필요도 없다.
하여 logrotate 파일을 이용해서 로그로테이션을 적용하기로 했다. 로그로테이션이란 일정시간 주기로 원본 로그 파일을 다른 이름으로 복사하고, 로그 파일을 truncate 해서 새로 로그를 쌓게 하는 일련의 과정을 말한다. 일정 시간이 지난 로그파일은 알아서 삭제를 해주기 때문에 로그파일이 계속 커지는 것을 막을 수 있다.
postrotate로 로테이트를 수행 한 후 실행할 스크립트를 설정 할 수 있다. 로테이트를 실행하면 원본파일을 백업 파일로 복사한 후에 삭제한다. 이렇게 되면, 로그를 만드는 애플리케이션은 파일포인터를 잃어버려서 로그를 쌓을 수 없게 된다. 많은 애플리케이션들이 특정 시그널을 받으면 로그파일을 새로 만들도록 해서 이 문제를 해결 하고 있다. 예를 들어 nginx는 USR1 시그널을 받으면 로그파일을 새로 만든다.
copytruncate : 대부분의 잘 만든 애플리케이션들은 로그파일을 새로 만들기 위한 시그널 처리 코드를 가지고 있다. 하지만 그렇지 않은 애플리케이션들도 있다. copytruncate를 이용하면 원본파일을 지우지 않고 truncate(파일 크기를 0으로 만든다)한다. 애플리케이션은 파일을 잃어버리지 않으므로 계속 해서 로그를 쓸 수 있다. 다만 파일을 복사하고 truncate 하는 순간 로그를 잃어버릴 수도 있다.
size : size 보다 로그파일이 클 경우 로테이션을 수행한다. M(메가), K(키로)단위로 설정 할 수 있다.
파일의 확장자가 맘에 들지 않는다. 일련의 숫자 만으로는 이 백업파일이 언제 만들어 진 것인지 확인 할 수가 없다. 백업파일이 만들어진 시간으로 확인 할 수 있겠으나 이런 백업 파일은 NAS나 S3같은 외부 저장매체에 복사하기 마련이다. 이 경우 파일이 만들어진 시간은 무용지물이 된다. 그래서 백업 파일의 이름에 날짜가 들어가도록 바꾸기로 했다. 설정파일에 dateext만 추가하면 된다.
logrotate는 cron을 이용해서 실행 주기를 관리한다. 그냥 logrotate 설정파일을 /etc/logrotate.d에 복사하면 된다. logrotate 패키지를 설치하면, /etc/cron.daily, /etc/cron.weekly 등에 자동으로 cron 설정이 저장되므로 관리자가 신경 쓸 건 없다.
Contents
1. 로그 파일 관리
2. logrotate
2.1. logroate 설정 파일
3. 테스트
3.1. 확장자를 날짜로 설정
3.2. cron을 이용한 관리
1. 로그 파일 관리
2. logrotate
2.1. logroate 설정 파일
3. 테스트
3.1. 확장자를 날짜로 설정
3.2. cron을 이용한 관리
Recent Posts
Archive Posts
Tags