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 |