Engineering/WEB & WAS

[Tomcat] Crontab을 이용한 톰캣 로그 관리

[앙금빵] 2021. 11. 22.

목적

톰캣 로그의 종류 중 보통 catalina.out에 중요 로그파일이 모두 적재되는것을 알 수 있다. 이 catalina.out이 너무 커지면 몇만, 몇십만 이상의 문장이 적재되어 로그분석이 힘들 수 있고, 경우에 따라 100기가가 넘어가면 톰캣이 중지된다는 사례도 있다. 따라서 보기 좋게, 혹은 안정성을 위해 날짜별로 쪼개고 그 날짜가 오래된것은 지우는 과정이 필요하다.

 

💡 톰캣 로그 종류

  • catalina.out : 서버상에서 발생한 모든 내용(서버의 기동,정지,개시 등)을 기록한 파일이다.
    그렇기 때문에 생기는 로그의 양이 방대하다. 날짜별, 혹은 시간별로 로그를 분리하는것은 일반적으로 catalina.out에 사용한다.
  • catalina.yyyy-mm-dd.log : 톰캣에서 생기는 로그만을 기록한다.
    (Standard output(표준 스트림), Standard error(표준에러)의 로깅은 제외)
  • host-manager.log : Tomcat Host Manager Web app 로그 (가상호스트 매니저)
    manager.log : Tomcat Manager Web App 로그 (웹콘솔)
    localhost.log : host(특정 가상호스트 대상)한정 로그

 

톰캣 로그 디렉토리 변경

로그 저장 위치 원하는 곳으로 변경하는 방법

  1. logging.properties, catalina.sh, server.xml 등에서 디렉토리를 변경하는 방법
  2. ${catalina.base}/logs 디렉토리를 원하는 디렉토리로 soft link 시키는 방법

 

1. logs 폴더 경로 변경하기

 

1-1. 톰캣 server.xml 수정

[root@localhost]# vim /usr/local/tomcat8.5/conf/server.xml

# 수정 전: default 설정

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log." suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

# 수정 후: /data/tomcat_logs로 경로 설정

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/tomcat_logs"
       prefix="localhost_access_log." suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

 

1-2. logging.properties 수정

  • juli = java.util.logging (JDK에서 기본적으로 제공하는 Logging 클래스)
  • 트러블 슈팅 및 디버깅을 위해서는 많은 로그를 남기는 것이 효과적
[root@localhost] vim /usr/local/tomcat8.5/conf/logging.properties

# java.util.logging.FileHandler = 날짜별로 롤링되는 특정파일에 출력하는 핸들러

# 수정 전 ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

# 수정 후: /data/tomcat_logs
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = /data/tomcat_logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

 

1-3. catalina.sh 수정

[root@localhost] vim /usr/local/tomcat8.5/bin/catalina.sh

# 수정 전 ${catalina.base}/logs
228 if [ -z "$CATALINA_OUT" ] ; then
229   CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

# 수정 후: /data/tomcat_logs
228 if [ -z "$CATALINA_OUT" ] ; then
229   CATALINA_OUT=/data/tomcat_logs/catalina.out

 

1-4. 변경된 경로로 로그 저장 확인

[root@localhost] systemctl stop tomcat
[root@localhost] systemctl start tomcat

[root@localhost] cat /data/tomcat_logs/catalina.out

---
23-Aug-2021 17:01:40.678 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/8.5.70
23-Aug-2021 17:01:40.681 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Aug 9 2021 16:17:14 UTC
23-Aug-2021 17:01:40.681 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 8.5.70.0
23-Aug-2021 17:01:40.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
23-Aug-2021 17:01:40.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.14.238-182.422.amzn2.x86_64
23-Aug-2021 17:01:40.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
23-Aug-2021 17:01:40.683 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64/jre
23-Aug-2021 17:01:40.686 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_302-b08
23-Aug-2021 17:01:40.686 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Red Hat, Inc.
23-Aug-2021 17:01:40.687 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat8.5
23-Aug-2021 17:01:40.687 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat8.5
23-Aug-2021 17:01:40.688 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat8.5/conf/logging.properties
---

 


 

로그 관리 설정

로그 처리 방법

1. crontab: 특정 시간이나 날짜를 설정하여, 반복되는 작업을 자동화할 수 있다.

  • tail -f catalina.out 으로 실시간 확인이 필요한 경우
  • 지난 날짜 파일을 Labeling 해주고 분리 후 catalina.out 파일의 내용을 비워준다.

 

2. Crontab 을 이용한 오래된 로그파일 삭제

 

2-1. crontab 서비스 시작

# crontab 서비스 시작
[root@localhost] service crond start

 

2-2. logmanager.sh 스크립트 작성

[root@localhost] vim /data/tomcat_logs/logmanager.sh

#!/bin/bash
# 톰캣 로그 디렉토리
TOMCAT_LOG=/data/tomcat_logs

#오늘 날짜 가져옴
DATE='date +%Y_%m_%d'

#압축처리할 타겟 파일 
target_file="*.log.$DATE" 

#압축처리 
tar cvf - $TOMCAT_LOG$target_file | gzip -c > $TOMCAT_LOG$target_file.gz 

#오래된 로그 파일 삭제(catalina로 시작하는 10일 이상 지난 파일들 삭제)
find $TOMCAT_LOG -mtime +10 -name catalina* -exec rm -f {} \\;

 

2-3. Crontab 설정

참조: Crontab 기본 사용법 정리

# 권한 설정
[root@localhost] chmod 755 /data/tomcat_logs/logmanager.sh

[root@localhost] crontab -e

# 매일 0:30 분에 logmanager.sh 파일 실행
30 0 * * * /data/tomcat_logs/logmanager.sh

참조

Tomcat의 logs와 webapps 폴더 변경
https://forgiveall.tistory.com/230

Tomcat 의 logging.properties 및 log 디렉토리 설정
https://littlecarbb.tistory.com/entry/Tomcat-의-loggingproperties-및-log-디렉토리-설정

Server 4. Tomcat log에 대한 이해와 분리 방법

https://zunoxi.github.io/infra/2020/07/03/infra-server-hourlylog/

댓글