title | date | description |
---|---|---|
logrotate를 이용하여 로그 파일을 자동으로 삭제하기 |
2019-10-15T17:37:03.284Z |
logrotate 설정 방법 |
안녕하세요.
오랜만에 인사드리는 주니어 개발자 한유덕입니다.
오늘은 톰캣 서버의 로그 파일을 관리하는 방법을 알아보려고 해요. 얼마 전에 사내 서버의 용량이 꽉 차서 다운되는 현상이 있었습니다. 용량을 보니, 주 디스크로 쓰이는 폴더의 용량이 어마어마하더라고요. 원인은 바로 각종 log 파일들과 catalina.out 파일이었는데요. 매번 수동으로 지우는 건 무리가 있다고 생각해서, 자동화할 수 있는 방법은 없을까 고민하다 logrotate를 통해 자동화한 경험을 공유해보고자 합니다.
위의 스크린샷이 서버의 디스크 사용 용량인데.. 이미 100%를 넘어서고 있습니다. 이러니 서버가 정상 동작할리가 없죠..? 그래서 로그 파일을 좀 더 뒤져보니..
catalina.out
파일이 무려 5.3G를 차지하고 있습니다. 와우..
그래서 저는 어떻게 하면 이 catalina.out
파일의 용량을 줄이고, 날짜가 오래된 로그 파일들을 삭제할 수 있을까를 고민했는데요. 이미 서버에서 로그 파일을 관리하는 전략을 많은 분들이 포스팅해 놓으셨더라고요 ㅎㅎㅎㅎ 그래서 참고하여 저도 적용해보았습니다. 참고한 포스팅들은 맨 아래 참고하실 수 있습니다.
이번 포스팅에서는 크게
- catalina.out 파일 자체를 생성하지 않는 방법
- linux의 기본 패키지인 logrotate를 사용하여 로그 파일을 관리하는 방법
을 알아보도록 하겠습니다.
서버에 접속하신 후, vi /etc/profile
을 입력합니다.
위와 같이 /etc/profile
파일을 수정할 수 있는 vim 에디터 창이 열립니다. 이 때, 맨 아래를 보면 readonly 라고 되어있는데요. 수정할 수 있는 권한이 없다는 얘기입니다. 이럴 때는 보통 $ sudo su
를 입력하여 root 계정으로 접속하여 파일에 대한 접근 권한을 수정하거나, root 계정으로 직접 수정하여야 합니다. 저희는 root 계정에서 직접 수정해보겠습니다. q!
를 입력하여 vim 에디터를 종료합니다.
위와 같은 식으로 계정을 변경하고 다시 $ vi /etc/profile
을 입력합니다.
아래 readonly 라는 표시가 사라지신 걸 확인할 수 있습니다.
그리고 맨 위에 아래와 같은 명령어를 추가합니다.
https://gist.github.com/97d11a2b96158319e05d55b92874ad81
이번에는 달라진 내용을 저장하고 종료해야하기 때문에, wq!
를 입력하여 vim 에디터를 종료합니다.
그리고 profile의 내용 적용을 위해서
$ source /etc/profile
명령어를 실행합니다.
이제 /etc/profile
이 서버 내 tomcat 서버의 설정을 덮어쓰게 됩니다.
그리고 다시 살펴보시면 catalina.out
파일 자체가 생성되지 않는 것을 볼 수 있습니다! 하지만 이 옵션은 서버 로그 자체를 확인할 수 없게 되기 떄문에, 운영중인 서비스에 적용하시는 것을 권장하지 않습니다. 개인 프로젝트나 간단한 프로젝트에서 활용해보세요!
#2. linux의 기본 패키지인 logrotate를 사용하여 로그 파일을 관리하는 방법
그렇다면 catalina.out 파일은 유지하되, 용량을 줄이면서 오래된 로그 파일들을 관리할 수 있는 방법은 없을까요?!
있습니다!
바로 리눅스의 기본 패키지 logrotate
를 이용하면 되는데요. 로그가 생성되는 경로마다 옵션을 설정해서 로그 파일들을 관리할 수 있습니다.
그럼 바로 한 번 시작해볼까요?
먼저 logrotate의 환경 설정은 /etc/logrotate.d
폴더 안에 파일로 저장하게 되는데요. 저희는 tomcat 이라는 설정 파일을 만들고 설정 옵션을 넣어보도록 하겠습니다.
먼저 아래 명령어로 logrotate 설정 파일들이 있는 폴더로 이동합니다.
$ cd /etc/logrotate.d
이제 cat 명령어를 통해 tomcat 파일을 만듭니다.
$ cat > tomcat
그리고 tomcat 파일에 환경 설정 내용을 적어야하니, vim에디터로 파일을 엽니다.
vi tomcat
환경설정은 다음과 같은 형식으로 하면 되는데요.
https://gist.github.com/a36a192caed76df4b222028519fee3ce
실제 적용 예는 아래와 같습니다.
https://gist.github.com/4904f7e1d38b34f6350baf1320170c5b
이 옵션들에 대해서 간단히 알아볼까요?
copytruncate : 기존 파일을 복사한 후, 기존 파일 부분의 내용을 삭제합니다. 만약 이 옵션을 넣지 않으면 맨 처음 로그가 생성된 파일에 계속해서 로그가 쌓이게 됩니다.
compress : 로그 파일을 압축해서 생성하게됩니다. .gzip
확장자로 생성하는데, vim 에디터를 이용하면 압축을 해제에서 읽기, 수정이 가능하므로 편리합니다.
daily : 하루 단위로 로그 파일을 생성합니다.
rotate : 14일이 지난 로그 파일은 모두 삭제합니다.
missingok : 로그 파일이 생성되지 않는 경우에 에러를 발생시키지 않습니다.
notifempty : 로그로 기록할 내용이 없을 때는 신규 로그파일을 생성하지 않습니다.
dateext : 파일 명에 날짜를 넣어서 생성합니다.
위와 같은 옵션을 넣은 후 wq!
를 입력하여 vim 에디터를 종료합니다.
이제 제대로 적용되는지 확인을 해봐야겠죠?
다음의 명령어를 입력합니다.
https://gist.github.com/e0044277e6a9687de2bb90280588dd7c
위의 명령어를 실행하면 강제로 logrotate를 한 번 실행하는 건데요. 이렇게 되면 아래와 같이 새로운 catalina.out 파일이 생성되는 걸 보실 수 있습니다.
이제 하루에 한 번씩 logrotate가 실행되면서, catalina.out 파일과 다른 로그 파일들을 날짜별로 생성해주고, 오래된 로그 파일은 알아서 삭제해주게 되었습니다!
그럼 서버 디스크의 용량 차이를 한 번 볼까요?
와! 확 줄어든거 보이시나요? 거의 50%에 가까운 용량을 정리했네요. 앞으로 서버가 로그 파일 때문에 힘들어할 일은 없을 것 같습니다.
어떠신가요? 너무너무 편리하죠? 서버 용량 관리는 서버 개발자 분들이라면 다들 한 번쯤은 겪으시는 문제일 것이라고 생각합니다.
부디 같은 문제에 직면하신 분들께 작은 도움이나마 되었으면 좋겠네요.
오늘은 여기서 마치고, 다음에 더욱 유익한 포스팅으로 돌아오도록 하겠습니다!