[Linux] nohup.out 서버 로그 Logrotate 로 분산 관리

2024. 6. 17. 12:08기술 창고/Linux

728x90
SMALL

Spring Boot 프로젝트 빌드 파일을 리눅스와 같은 서버에 배포하여 무중단으로 배포하게 되었을 경우, 로그가 nohup.out 이라는 로그 파일이 생성되며, 모든 동작에 대한 로그 내용이 계속해서 쌓이게 되는데, 이것을 계속 유지할 경우 과하게 용량이 커지게 되어 서버 자체에 접속이 안되거나 운영을 할 수 없게 될 수 있습니다. 

 

더군다나 Spring Boot의 경우 내장 톰캣으로 운영되기 때문에 별도로 이 Spring Boot의 로그를 커스텀하여 관리하기에는 어려운 일입니다.

따라서, Spring Boot 어플리케이션을 리눅스에 배포하게 되었을 때에는 리눅스에서 자체적으로 지원해주는 logrotate를 사용하여 관리해줄 수 있습니다.

 

이 logrotate를 활용하여 날마다 쌓인 로그들을 압축하여 일 별로 저장되는 방법에 대해 정리해보겠습니다.

 

 


(1) 로그 저장 경로 설정 및 로그 파일 생성

우선 로그를 생성하기 이전에 로그 파일들이 저장될 경로를 만들어 줍니다.

기존에 있던 아무 경로를 사용해도 괜찮습니다.

 

저는 파일질라를 통해 배포될 리눅스 서버에서 logs 폴더 경로를 만들어주었습니다.

 

 

nohup java -jar {빌드된 jar파일 명.jar} > {로그가 쌓일 경로/생성될 로그 파일 명} &
# 예 : nohup java -jar Onnury-0.0.1-SNAPSHOT.jar > /home/onnury/web/logs/onnury_server.log &

 

이제 어플리케이션 jar 파일이 배포된 경로에 가서 무중단 실행 명령어를 실행해 주는데, jar 파일 뒤에 > 기호와 함께 로그가 쌓일 경로와 생성될 로그 파일 명을 입력해하여 실행해주면, 무중단으로 배포되며서 입력한 로그 파일 명으로 로그 파일이 생성되게 됩니다.

 

 

 

 

(2) logrotate 설정

우선 logrotate 가 기본적으로 어떻게 생긴 파일, 설정을 갖고 있는지 확인해보겠습니다.

 

최상위 경로에서 etc 경로에 있는 lorotate.conf 파일을 조회해줍니다.

 

 

logrotate.conf 설정 파일 내용을 확인해보면,

 

(1) 로그를 rotate할 주기 설정 (daily : 날마다, weekly : 주마다 ...)

# rotate log files weekly

daily

 

(2) 로그 파일 저장 개수 지정 및 개수 충족 시 삭제 (rotate 7 이면 7개까지 저장)

# keep 4 weeks worth of backlogs

rotate 7

 

(3) 이전 rotate된 로그 파일 이후로 새로운 로그 파일 생성 여부

# create new (empty) log files after rotating old ones

create

 

(4) 로그 파일 rotate 시 뒤에 붙을 확장자 명 (dateext : 날짜)

# use date as a suffix of the rotated file

dateext

 

(5) 로그 파일 압축 여부 (compress : 압축 OK)

# uncomment this if you want your log files compressed

compress

 

(6) rotate 할 설정 파일 포함 설정 (/etc/logrotate.d 경로의 설정 파일 포함)

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

 

이와 같은 내용으로 구성되어있으며, 여기서 따로 설정 내용을 건드릴 필요는 없고, 이 내용을 참조하여 우리가 운영할 로그 파일 rotate 설정을 잡아주면 됩니다.

기본적으로 6번 항목 내용처럼 /etc/logrotate.d 경로에 있는 설정 파일들의 내용들을 토대로 logrotate가 돌아가기 때문에 우리가 운영할 로그 파일에 대한 설정 내용도 이 경로에 만들어 주어야 합니다.

 

 

최상위 경로의 etc 경로에서 logrotate.d 경로에 제가 아까 무중단 실행하여 만들어진 로그 파일 명을 가진 설정 파일을 만들어주고, 앞서 확인했던 logrotate.conf 파일 내용을 토대로 설정을 넣어줍니다.

 

저는 daily (날마다), rotate 30 (30개까지 저장), copytruncate (복사 후 기존 쌓인 로그 초기화), dateext (로그 확장자명을 날짜 확장자로 지정), notifempty (로그 파일이 비어있으면 rotate X), missingok (로그 파일이 없어도 에러 처리하지 않음), compress (rotate 된 일자별 로그 파일을 압축) 설정을 넣어주었습니다.

 

 

(3) logrotate 실행

이제 설정한 설정값으로 logrotate를 실행해줍니다.

# only 실행
/usr/sbin/logrotate -f /etc/logrotate.d/onnury_server
# 디버그 모드 
/usr/sbin/logrotate -o /etc/logrotate.d/onnury_server
# 실행 과정 화면 표시
/usr/sbin/logrotate -v /etc/logrotate.d/onnury_server
# 실행 + 실행과정 화면 표시
/usr/sbin/logrotate -vf /etc/logrotate.d/onnury_server

 

뒤에 붙는 onnury_server 는 자신이 logrotate.d 에 방금 만든 logrotate 설정 파일 명을 적어주면 됩니다.

저는 마지막 명령어를 실행하였습니다.

 

 

이제 초기에 logs 경로로 들어가서 확인해보면 압축되어 rotate 된 로그 파일들을 확인할 수 있습니다.

저의 경우 4일 정도 지나고 난 이후 다시 확인한 결과 입니다.

 

# 처음에 실행 후 다음날 확인했을 때 rotate 되지 않았을 경우가 있는데 이는 초기 실행 후 익일 까지는 rotate되지 않고 그 이후부터 rotate 되게 됩니다.

 

 

vi /var/lib/logrotate/logrotate.status

정상적으로 동작되고 있는지 확인하기 위해 위의 명령어를 입력하여 확인해줍니다.

 

 

제가 지정한 onnury_server.log 정상적으로 동작되고 있는 것을 확인할 수 있습니다.

 

 

 


 

[Logrotate 작동 방식 및 작동 시간 참고 글]

https://comarts.tistory.com/entry/logrotate-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D-%EB%B0%8F-%EC%9E%91%EB%8F%99-%EC%8B%9C%EA%B0%84-%EC%83%88%EB%B2%BD-3%EC%8B%9C%EA%B2%BD-%EB%9E%9C%EB%8D%A4%ED%95%98%EA%B2%8C-%EC%88%98%ED%96%89%EB%90%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

 

logrotate 작동 방식 및 작동 시간 (새벽 3시경 랜덤하게 수행되는 이유)

Crontab 과 logrotate Linux 시스템은 기본적으로 crond(crontab) 서비스가 작동되고 있음 @ crontab 과 logrotate 관계 및 흐름도 1. crontab - /etc/cron.d : 디렉토리에 있는 내용 모두 수행 (default) - /var/spool/cron : 사

comarts.tistory.com

 

 

[Logrotate 설정 내용 참고 글]

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sory1008&logNo=221124291927

 

logrotate command

사용목적logrotate 는 계속 쌓이는 로그를 주기적으로 관리해주는 툴 입니다. 아래와 같은 일들을 해주죠. ...

blog.naver.com

 

728x90
반응형
LIST