1. 로그로테이션

1) 개념

- 리눅스 시스템에서 로그 파일을 관리하고 유지하는 프로세스

- 로그 파일은 시간이 지남에 따라 매우 커질 수 있기 때문에 로그파일을 주기적으로 교체해줄 필요가 있다.

 

2) 로그로테이션

① 로그 파일 설정

② 로그로테이션 설정

③ logrotate 설정 파일 작성

④ 로그로테이션 주기 설정

⑤ 로그 파일 압축 및 백업

⑥ 새로운 빈 로그 파일 생성

⑦ 로그 파일 삭제

 

☆ 로그로테이션은 시스템 관리에서 중요한 작업 중 하나이며 로그 파일의 크기를 관리하고 시스템 성능을 최적화하는 데 도움이 된다.

 

 

2. logrotate 패키지를 사용해 상세한 로그 파일 관리방침 설정하기

1) 패키지 설치

$ sudo apt-get install logrotate

 

2) logrotate 서비스 동작 원리

$ cat /etc/cron.daily/logrotate

logrotate 설치 시 cron에서 매일 자정에 수행하는 작업을 모아두는 /etc/cron.daily 경로 아래에 logrotate 파일이 생성된다.

즉, logrotate는 cron 서비스에 의해 daily job으로 실행되고, 매일 자정에 rotate 조건을 검사하고 실행한다.

 

3) logrotate.conf에 등록된 기본 경로에 스크립트 등록

$ cat /etc/logrotate.conf

logrotate.conf에서 rotate 스크립트를 등록할 기본 경로 확인

위와 같이 /etc/logrotate.d 경로에 등록된 스크립트를 감지하도록 되어 있다.

include </your/additional/logrotate/path> 구문으로 기본 경로로 삼을 디렉토리를 추가할 수 있다.

→ 기본 경로에 등록된 rotate 스크립트는 매일 자정에 조건 검사 및 수행

 

4) logrotate 설정 파일 예시

# 로그 파일을 저장할 경로 및 설정 시작
/var/log/syslog {
    rotate 7                          # 최대 7개의 백업 파일을 유지합니다.
    size 30                           # 30k 초과시 순환합니다.
    daily                             # 매일 로그를 로테이션합니다.
    create 0600 root root             # rotation된 로그파일 생성
    missingok                         # 로그 파일이 없는 경우 경고 없이 진행합니다.
    notifempty                        # 로그 파일이 비어 있는 경우 로테이션을 스킵합니다.
    delaycompress                     # 이전 로그 파일을 압축하기 전에 1회 로그를 더 남깁니다.
    compress                          # 이전 로그 파일을 압축합니다.
    postrotate                        # 로테이션 후에 실행할 스크립트의 시작입니다.
    /usr/bin/killall -HUP syslog-ng   # syslog-ng 프로세스에 HUP 신호를 보냅니다.
    endscript                         # postrotate 스크립트의 끝입니다.
}
# 로그 파일 경로 및 설정 끝

/var/log/syslog 파일을 매일 로그로테이션하며, 최대 7개의 백업 파일을 유지한다.

missingok, notifempty, delaycompress, compress는 다양한 옵션을 설정하는 데 사용되고, postrotate와 endscript 사이의 부분은 로그로테이션 이후에 실행할 스크립트를 지정한다.

 

 

3. 일 단위보다 더 자주 logrotate를 실행하는 방법

임의의 커스텀 경로에 logrotate 스크립트를 등록하고 crontab에 등록해서 실행

→ cronjob의 실행 주기인 1분마다 rotate 수행 가능

# cron 주기에 따라 logrotate -vf <로테이트 파일명> 으로 커스텀 파일을 강제로 즉시 실행
*/10 * * * * deploy /usr/sbin/logrotate -s /home/username/logrotate/status -vf /your/custom/logrotate/file/path >> /your/custom/logrotate/path/logrotate_exec_log.log 2>&1

위와 같이 -s 옵션을 통해 logrotate 수행 status를 관리하는 파일 경로를 수동으로 지정해야 한다.

 

 

4. 실습하기

- 로그로테이트 : 기존의 로그 파일을 썰어주는 역할

- 먼저, 원본 로그파일이 저장된 경로를 적고 { }를 추가로 적어주어야 함

- su 유저명 그룹명 형식으로 하나 더 적어주어야 함

<log file> { 
    # 주기
     [daily, weekly, monthly, yearly <cycle of rotates>]
    # 로테이트 횟수
     [rotate <number of rotates>]
    # 로테이트 실행 후 비어있는 로그 파일 생성
     [create <permission value> <owner> <own group>]
    # 로그 파일 크기가 설정 값 보다 크고 지정한 주기가 됐을때 로테이트 수행
     [minsize <1M, 100k>]
    # 로그 파일 크기가 설정 값 보다 크거나 지정한 주기가 지났을때 로테이트 수행
    [maxsize <1M, 100k>]
    # 주기에 관계 없이 로테이트를 수행하는 로그 파일 크기
    [size <1M, 100k>]
    # 로테이트를 통해 새로 생성되는 파일에 날짜를 덧붙혀서 생성하는지 여부
     [dateext]
    # 로테이트를 통해 생성되는 파일을 압축하는지 여부
     [compress]
    # 설정을 참고할 로그로테이트 파일 위치
     [include /etc/logrotate.d]
    # 로그 파일이 존재하지 않는 경우 메시지 출력 (기본 값)
     [nomissingok]
    # 로그 파일이 존재하지 않아도 오류로 처리하지 않음
     [missingok]
    # 로테이트 시 기존 로그 파일 복사 후 제거 후 빈 파일로 생성
     [copytruncate]
    # 로그 썰기 전후 처리작업 
		 [prerotate]
				# prerotate 로직 작성
		 [endscript]
		 [postrotate]
				# postrotate 로직 작성
		 [endscript]
}

※ 위와 같이 다양한 옵션이 있다.

이제 위 두 파일을 생성해준다.

rotate_result.log는 로그로테이트 시 pre, post script에 의해 콘솔에 찍힐 값을 담을 파일이다.

logrotate_status는 프로세스 상태를 저장해주는  파일로 데몬에 의해 관리하지 않는 경우 필요하다.

# 로그로테이트를 logrotate 데몬 프로세스가 관리하는 기본 경로가 아닌 곳에서 실행할 경우
# s 옵션으로 프로세스 스테이터스 경로를 별도로 지정해야 함
# f 옵션은 rotate 강제 실행, -v 옵션은 verbose 로 실행 내용을 콘솔에 출력

/usr/sbin/logrotate -s /home/username/logrotate/status -vf /your/logrotate/file/path > /your/rotate/job/checking/file.log 2>&1

실행해보면 위와 같이 lock이 걸려 있어서 로그로테이트를 할 수 없다고 나온다. 

이를 해결하기 위해서 추가적인 조작이 필요하다.

logrotate_status 파일의 권한을 600으로 만들어 현재 로그인 중인 유저만 참조할 수 있게 해야 한다.

위와 같이 로그를 썰어주는 것을 확인할 수 있고, 원래 로그 파일 뒤에 .1이라는 확장자가 붙는다.

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

로깅 실습  (0) 2024.02.22
jshell을 활용해서 어플리케이션 로깅 체험하기  (0) 2024.02.22
크론탭 메일전송  (0) 2024.02.21
크론잡과 크론탭  (0) 2024.02.21
Shell Script 실습  (0) 2024.02.20

+ Recent posts