안녕하세요~~ 저희는 공공의적 팀입니다~~ <(*^.^*)/
서버 운영에서 로그는 정말 중요한 데이터 중 하나입니다.
이렇게 중요한 데이터이지만, 덮어두고 쌓다보면 하나의 로그 파일에만 몇GB가 넘는 용량이 쌓여 스토리지 용량을 잡아먹곤 합니다.
이를 해결하기 위한 방안으로 Logrotate를 사용하게 되는데, 이 작업을 동일한 시간대에 실행하기 위해 crontab을 함께 사용하는 방안을 주로 사용합니다.
(주로 Daily로 로그가 순환되게끔 사용)
Crontab을 접목한 Logrotate가 실행되는 순서는 아래와 같습니다.
crontab > cron.daily > logrotate > logrotate.conf > logrotate.d
Crontab
사용자가 지정한 command를 crons 데몬이 주기적인 작업 실행을 처리
crontab과 관련된 파일
- /etc/cron.d : 필요한 작업을 등록하는 파일
- /etc/cron.allow : 해당 파일에 지정된 사용자만 crontab 사용 가능 (지정되지 않으면 사용 불가)
- /etc/cron.deny : 해당 파일에 지정된 사용자는 crontab 사용 불가능, (허용 파일이 없는 경우)
crontab과 관련된 명령어
$crontab -l : 예약된 작업리스트
$crontab -e : crontab 작업 수정
$crontab -r : 예약된 작업 삭제
$crontab -u [username] : root 관리자는 해당 사용자 crontab 파일을 보거나 편집 및 삭제 가능
crontab 설정
# .---------------- 분 (0 - 59)
# | .------------- 시간 (0 - 23)
# | | .---------- 일 (1 - 31)
# | | | .------- 월 (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- 요일 (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* 분 : 0~59
* 시간 : 0-24
* 일 : 0~31
* 월 : 1~12
* 요일 : 0~7(0 또는 7=일요일, 1=월, 2=화 . 3=수 , 4=목, 5=금=6, 토7=일)
user-name 사용자명 : /etc/crontab , /etc/cron.d에 저장될 경우 필요
command 작업명령 : 실행할 명령을 한줄로 기입
crontab 예시
위는 매일 새벽 1시에 apache access_log를 순환시키는 명령어 입니다.
Logrotate
직역하면 '로그순환', 말 그대로 로그를 순환시킬 수 있는 기능
Logrotate와 관련된 파일
- /usr/sbin/logrotate : Logrotate 데몬 프로그램 위치
- /etc/logrotate.conf : 데몬 설정 파일
- /etc/logrotate.d/ : 프로세스 설정 폴더 (폴더 내 파일 위치)
- /etc/cron.daily/logrotate : 작업내역 로그
logrotate.conf 예시
# see "man logrotate" for details
# rotate log files weekly
weekly
#원하는 주기로 로그 회전
#yearly : 매년
#monthly : 매월
#weekly : 매주
#daily : 매일
# keep 4 weeks worth of backlogs
rotate 4
#정리할 로그의 갯수
# create new (empty) log files after rotating old ones
create
#새로운 파일 생성 여부
#create : 새로운 파일 생성
#empty : 새로운 파일 생성
# use date as a suffix of the rotated file
dateext
#로그 파일명의 날짜 부여
# uncomment this if you want your log files compressed
#compress
#로그 파일 압축 여부
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
#로그순환 프로세스 경로
logrotate.d 예시
[로그를 순환할 파일 경로] {
copytruncate daily
rotate 10000
missingok
notifempty
dateext
dateformat -%Y-%m-%d
}
설정할 수 있는 옵션들
설정
|
의미
|
daily | weekly | monthly | yearly
|
rotate 주기
|
rotate 개수
|
순환되어 보관될 파일 개수
|
compress
|
순환될 파일 압축(gzip)
|
nocompress
|
순환될 파일 압축하지 않음
|
compressext 확장자명
|
압축된 백업로그파일에 지정할 확장자 설정
|
compresscmd 압축명
|
gzip이외의 압축파일 지정
|
cpmpressoptions 옵션
|
압축프로그램에 대한 옵션 설정(-9: 압축률 최대)
|
dateext
|
로그파일에 YYYYMMDD형식의 확장자 추가
|
errors 메일주소
|
에러발생시 지정된 메일주소로 메일 발송
|
extention 확장자명
|
순환된 로그파일의 확장자 지정
|
ifempty
|
로그파일이 비어있는 경우 순환(기본값)
|
notifempty
|
로그파일이 비어있는 경우 순환하지 않는다.
|
mail 메일주소
|
순환 후 이전 로그파일을 지정된 메일주소로 발송
|
maxage
|
count로 지정된 날수가 지난 백업파일 삭제
|
missingok
|
로그파일이 없을 경우에도 에러처리하지 않는다.
|
prerotate / endscript
|
순환작업 전에 실행할 작업 설정
|
postrotate / endscript
|
순환작업 후에 실행할 작업 설정
|
sharedscripts
|
prerotate, postrotate 스크립트를 한번만 실행
|
size 사이즈
|
순환결과 파일사이즈가 지정한 크기를 넘징낳도록 설정
|
copytruncate
|
현재 로그파일의 내용을 복사하여 원본로그 파일의 크기를 0으로 생성
|
실행하는 방법
$/usr/sbin/logrotate -f /etc/logrotate.d/[파일 이름]
위 내용을 바탕으로 crontab을 적용시키면,
이랬던 로그가
이런식으로 설정한 명령어에 따라 매일 새로운 파일에 로그가 쌓이게 됩니다.
감사합니다.
'OS > Linux' 카테고리의 다른 글
[Linux] ssh 접속 (0) | 2022.06.24 |
---|---|
리눅스 레드마인(Redmine) 설치 방법 (0) | 2022.06.15 |
[ Linux ] 작업 관리 (2) (0) | 2022.06.03 |
[Linux]-CentOS 파일 및 디렉토리 검색 - grep, find 이론 (0) | 2022.05.31 |
알아보자! 프로세스 정보들을! top을 이용해서. (0) | 2022.05.25 |
댓글