본문 바로가기
개발/서버

[Linux] 서버 로그 관리해보자!

by 설이주인 2022. 7. 16.

해당 작업은 프로젝트의 관리를 점검하는 과정에서 작성 된 작업 물입니다.

본래 서버에서 이루어지는 행동은 로그로 보관 되어있어야 합니다. 이는 서버로 접근하는 이상 징후에 대비하여 분석 할 수 있기에도 용이합니다. 또한 실제 운영 하는 서비스라면 정책을 정하고 서버 보관 - 하드웨어 보관을 해야합니다.

 

하지만 우리의 VM은 저장 공간이 제한 되어있습니다.

그럼 우리가 해야하는 작업은 무엇인가…!

 

실시간, 또는 매일 정리하는 우리들의 로그를 압축 그리고 일정 기간 이후 주기적인 삭제를 진행해야합니다.

 

아래의 작업은 위의 일을 자동화 처리하기 위해 진행되었습니다.

 

우선 위의 작업을 진행하는 이유가 메모리와 용량을 위해서인만큼 복사 -> 압축이 진행되는 만큼

작업 시작하기 전에 해당 작업이 이뤄지는 디렉토리의 용량을 확인하자

 

du -ah : 용량을 확인

du -ah —max-depth=1 : 해당 명령어는 확인하고 싶은 디렉토리에 위치한 1댑스까지의 용량을 다 합쳐서 보여줍니다.

ls -al : 목록 형태로 디렉토리의 리스트를 보여줌 자세히

 

프로젝트의 웹 서버 : nginx, WAS : tomcat 으로 구성된 상태입니다.

 

먼저 nginx을 진행했습니다.

처음에 logrotate를 만들 예정입니다. 우선 root 계정(sudo su)으로 변경하여 진행한다. 해당 파일은 /ets/logrotate에 위치하고

진입하여  vi nginx로 아래 명령어를 작성해준다.

/var/log/nginx/*.log {
    copytruncate
    daily
    compress
    maxage 90
    missingok
    notifempty
    dateext
}
#해당 명령어는 복사, 압축 최대일자 90일 지정으로... etc로 이루어져있다.

 

이후 제작한 명령어 logrotate를 실행하는데 그전에 해당 디스트에 충분한 용량(du -ah)이 존재하는지 확인 하여야한다.

용량 확인 후 logrotate -f /etc/logrotate.d/nginx 를 실행해주자

 

해당 명령어 실행 중 또는 실행 후 nginx의 로그가 생성되는 곳에 압축 파일 생성과 catalina.out이 제대로 clear된 상태인지 확인해주자


tomcat에서도 같은 작업을 하지만 조금 다른 방식으로 진행 할 예정이다

우선 logrotate의 파일을 만들기 직전까지는 같은 방법으로 진입한다.

tomcat에서는 아래의 파일을 생성해주자

/home/[file]/tomcat8/logs/*.out {
    copytruncate
    daily
    missingok
    notifempty
    dateext
}

 

추가적으로 진행하는 프로젝트에서는 log와 txt 파일이 만들어지고 있는 상황이었기에

둘의 처리를 위한 자동화 파일 또한 생성 작업을 진행하였다.

 

자동화를 위해 필요한 준비물은 sh(쉘)파일과 crontag를 등록하는 것이었다.

우선 sh 파일부터 제작해보자

해당 파일은 root가 아닌 일반 계정으로 진행하며 위치는 tomcat8 아래의 bin에서 명령어 vi rotateLog.sh를 실행하였다.

 

LOGDIR=/home/[file]/tomcat8/logs 
GZIP_DAY=5 
DEL_DAY=90

cd $LOGDIR 
echo "cd $LOGDIR"

################ ZIP & DELETE ################ 
/usr/bin/find . -type f -name ".log" -mtime +$GZIP_DAY -exec /usr/bin/gzip {} \; 2> /dev/null 
/usr/bin/find . -type f -name ".txt" -mtime +$GZIP_DAY -exec /usr/bin/gzip {} \; 2> /dev/null
/usr/bin/find . -type f -name "*.gz" -mtime +$DEL_DAY -exec /bin/rm -rf {} \; 2> /dev/null


:wq #저장 후 나가기

 

이제 자동화를 위한 crontag를 작성할 시간이다

해당 crontag는 root계정으로 등록한다.

5 0 * * * /home/[file]/tomcat8/bin/rotateLog.sh 를 작성하자

해당 명령어는 0시 5분에 쉘 명령어를 실행한다는 명령이다.

 

작업 완료 되었다.

 

본래는 3분마다 돌아가는 명령어로 실행 되는 것을 확인 후 시간을 지정해준 상태이다.

이제 출근한날에 로그가 제대로 압축, 또는 삭제가 되고 있는지 확인 하자