[Tomcat] 로그 관리 - catalina.out 로그 하루씩 롤링(rolling)하기
※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!
ο 목차
※ 코드 보는 방법 참고
ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력
ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력
ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력
ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력
안녕하세요, 네모입니다~
기존에 웹서버 관리하시던 분이 톰캣 서비스만 올려두시고 로그 설정을 별도로 해두지 않아서 서버 용량이 90%가 넘는 사태가 발생했네요ㅠ
비슷한 상황을 겪으신 분들이 있을까봐 쉽고 간단하게 로그 관리할 수 있는 방법 알려드리고자 합니다.
(* 톰캣 뿐만 아니라 다른 로그들도 모두 적용 가능)
아래 내용 참고하셔서 손쉽게 로그 관리 하시길 바래요 :P
Catalina.out 로그 하루씩 롤링(rolling)하기
1) 작업 필요성
톰캣은 별도의 로그 설정을 하지 않고 사용하게 되면 catalina.out 이라는 로그 파일 하나에 tomcat 서비스의 콘솔 로그가 모두 저장됩니다. (stdout, stderr 포함)
웹 서비스에서 다루는 데이터가 많지 않거나 쌓이는 로그 양이 적다면 큰 문제는 없겠지만(?) 데이터 양이 많거나 서버 용량이 적다면 용량 부족 현상이 발생할 가능성이 아주 높죠. (관리상의 문제도 있음)
그래서 서버의 용량 및 로그의 중요도 등을 고려해서 로그 롤링 기준(날짜, 용량 등)과 로그 보관 기관 등을 정한 후 로그 관리를 해주셔야 합니다.
2) Logrotate 개요
(1) Logrotate란?
logrotate는 리눅스 시스템에서 기본적으로 제공되는 로그 관리 도구입니다.
(2) Logroate 동작 원리
- 기본적으로 하루에 한 번 동작을 원칙으로 함
(특별한 옵션을 주거나 강제로 실행시키지 않는 한 단일 로그 파일에 대해 하루에 여러번 작업하지 않음)
- cron 데몬은 매일 /etc/cron.daily/ 디렉터리에 있는 job을 실행하는데 그 안에 logrotate job이 포함되어 있음
- logrotate job은 /etc/logrotate.d 디렉터리 안에 있는 설정 파일을 기반으로 로그 관리 작업을 수행함
3) Logrotate 설정하기
(1) /etc/logrotate.d 디렉터리에 tomcat 파일 생성 후 편집
$ cd /etc/logrotate.d
$ vi tomcat
(아래와 같이 내용 편집)
톰캣기본경로/logs/catalina.out {
copytruncate
daily
rotate 30
missingok
}
* 옵션 정보
- copytruncate : 기존 로그 파일 내용을 새로운 로그 파일로 복사한 뒤(로그파일명-YYYYMMDD) 기존 로그 파일 내용을 비움. 특별한 경우가 아니라면 기본값으로 설정 권고(어플리케이션의 로그 처리 방식에 따라 이슈가 있을 수 있음)
- daily : 데이터 롤링 기준이 하루인 경우 daily 옵션 사용. 만약 로그 용량을 기준으로 롤링하고 싶은 경우 daily 대신 size 5MB 등 size 옵션으로 대체
* size 옵션을 사용하는 경우 로그 사이즈가 지정된 수치가 될 떄까지는 롤링되지 않음(며칠에 한번 롤링 하는 등 주기 조정 가능)
- rotate 30 : 로그 보관 주기 설정. 일수 기준이므로 일주일 보관하고 싶으면 7, 이주는 14, 한달은 30 등 보관 주기 조정
- missingok : log 파일이 없는 경우 에러를 발생시키지 않고 넘어감(선택)
※ 위의 정보는 기본 옵션으로 파일의 권한 및 소유자를 변경하거나 기타 다른 옵션들이 많으니 원하는 옵션 찾아서 더 추가해주시면 됩니당
(2) 롤링 테스트
- 아래 명령어 수행 후 catalina.out 로그가 롤링 되었는지 확인
$ /usr/sbin/logrotate -f /etc/logrotate.d/tomcat
4) 롤링 시간 지정하기
만약 시간이 지정하지 않는 경우 cron 데몬이 알아서 하루에 한번 로테이션 잡을 돌립니다.
(시간은 cron 데몬이 정한 시각에 반복적으로 수행됨)
logrotate가 수행되면 수행되는 시각을 기준으로 날짜가 붙는데 애매한 시각에 로테이션이 돌아가면 날짜 관리가 힘들 수 있어요(ex. catalina.out-20230330 파일에 2023-03-29 로그도 있고, 2023-03-30 로그도 있고... @.@)
이걸 미연에 방지하기 위해 crontab을 사용해서 원하는 시간에 logrotate를 실행시켜 줍니다
* 매일 밤 11시 55~59분쯤 로테이션을 돌리면 로그파일 뒤에 따라오는 날짜가 실제 저장된 로그 날짜와 일치
(1) crontab 설정하기(root 계정으로 수행)
- 크론탭 편집하기
$ crontab -e
- 매일 23:55에 수동으로 logrotate를 실행
(크론탭에 아래 내용 추가)
# rolling catalina.out daily
55 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/tomcat
- ":q" 입력하여 저장
(2) 다음날 결과 확인
catalina.out 로그가 아니더라도 어떤 로그 파일도 동일한 방식으로 롤링 작업이 가능합니다~
다양한 곳에 활용해보세요 :P
※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다.