- sample
# more /etc/logrotate.d/apache2
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
# more /etc/logrotate.d/tomcat
/var/log/tomcat/catalina.out {
copytruncate
weekly
rotate 52
compress
delaycompress
missingok
create 0640 root root
notifempty
}
1. logrotate 개론
앞선강좌에서 누차 강조드린 바와 같이 리눅스뿐아니라 거의 모든 운영체제에서는 로그파일의 종류와 그 크기를 어떻게 보관하고 관리할 것인가에 대한 것이 아주중요하게 다루어지고 있다.
logrotate는 이에 대한 해답을 주는 유틸리티라고 할 수 있다.
즉, logrotate는 시스템에 있는 모든 로그파일들을 관리할 수 있으며 이들 로그파일들을 자르고(rotate), 보관하고, 삭제하고, 압축하고, 메일로 보내주는 등의 작업을 할 수 있게 한다.
구체적인 예를 들자면, 아파치 웹서버에서 방문기록을 저장하고 있는 웹로그파일은 access_log이다. (물론 이파일의 이름과 위치는 얼마든지 바꾸어 사용할 수 있다. )
이 파일은 하루에도 엄청나게 많은 용량으로 저장이 된다. (물론 어느정도의 방문자가 있다는 조건에서)
필자가 관리하는 수퍼유저코리아의 웹서버만 하더라도 하루에 약 33MB정도의 용량으로 저장이 된다.
그렇다면 한달이면 약 990MB, 그러니까 약 1GB정도가 조금 들 필요하다고 할 수 있을 것이다.
이런 파일을 그냥 두게되면 얼마가지 않아서 할당된 파티션에 파일시스템풀(Filesystem Full)이 나서 시스템이 다운이 될 수가 있다.
특히, 웹호스팅서버와 같이 하나의 서버에 여러개의 웹사이트를 운영되는 서버에는 매우 심각하다고 할 수 있다.
더군다나 서버에는 웹로그만 있는 것이 아니고 앞선강좌에서 설명드렸듯이 리눅스의 기본적인 로그파일만 10여개가 넘는다.
이런 로그파일들을 적당한 크기로 자르고(rotate), 압축하여, 보관하거나, 삭제하는등의 작업이 주기적으로 필요하게된다.
logrotate는 이런 cron에 의해 주기적으로 이런작업을 훌륭히 수행해 낸다.
바로 여기에 logrotate의 역할과 필요성이 존재한다고 볼 수 있으며 logrotate가 개발된 이유이기도 하다.
2. logrotate 파일구성 logrotate는 리눅스가 설치되면서 대부분 기본적으로 패키지형태로 설치가 된다. logrotate의 데몬과 설정파일들을 살펴보면 다음과 같다.
먼저, /usr/sbin/logrotate는 logrotate의 데몬프로그램이다. crond에 의해 주기적으로 실행이 되는 프로그램이다 . /etc/logrotate.conf파일은 logrotate가 실행이되면서 읽어들인후 각각의 로그파일들을 이 파일의 설정에 의하여 자르거나(rotate), 삭제하거나, 압축을 하게된다. /etc/logrotate.d 파일은 각각의 로그파일들에 대한 개별적인 설정파일들이 존재하는 디렉토리이며, 추가로 적용할 로그파일에 대한 설정을 여기서 하면된다. 예를 들어 보안체크를 위해 tripwire를 설치하였다면 이프로그램의 로그파일이 존재할 것이다. 따라서 이 로그파일의 관리를 위해서 이 디렉토리에 적당한 이름의 파일을 생성하고 원하는 설정을 하여 logrotate에 의해 관리되게끔 하면 된다. 마지막으로 /etc/cron.daily/logrotate 파일은 주기적으로 실행이 될 logrotate를 cron에 넣어둔 것이다. 즉, 이 cron설정으로 인해 logrotate는 하루에 한번씩 주기적으로 실행이 될 수 있는 것이다.
|
출처 - http://www.superuser.co.kr/linux/logrotate/page01.htm
추가 옵션
dateext : 순환된 로그파일의 날짜확장자
mail : 순환되어 저장된 갯수를 넘게되는 파일은 메일주소로 메일을 보내게 된다. 반대는 nomail
size 100M : 순환된 결과 파일사이즈가 지정한 크기를 넘지 않도록 한다. 숫자만 적으면 byte로 킬로바이트는 k, 메가바이트는 M이다 ex) 100k, 100M
/etc/logrotate.d 밑에 보면 로그를 위한 설정파일이 위치해 있습니다.
특정 서비스를 추가, 변경, 삭제하는 것으로 적용할 수 있습니다.
다음은 Ubuntu에서 /etc/logrotate.d/apache2 내용입니다.
/var/log/apache2/*.log { # 로그파일 순환 주기 # valid value : daily, weekly, monthly # 파일이 존재하지 않을 경우 # vaild value : nomissingok - 불가, missingok - 처리 # 로그파일 개수 # 설정갯수 이후로는 순차적으로 삭제 # 압축여부 # valid value : compress, nocompress # compress와 같이 쓰이며 지난 파일에 대해 압축하지 않는다. # 없으면 지난 파일도 압축 # 로그 파일이 비어있을 경우 # valid value : ifempty - 처리, notifempty - 불가 notifempty # 순환되는 파일의 권한과 소유,그룹 설정 # 개별적으로 각 로그파일에 대한 스크립트(prerotate or postrotate)를 실행합니다. # valid value : sharedscripts, nosharedscripts # rotate 작업 이후에 실행될 스크립트 # 시작(postrotate)과 종료(endscript)를 명시해야 합니다. |
출처 - http://blog.naver.com/PostView.nhn?blogId=budget74&logNo=90108092379
리눅스를 서버로 돌리면 하루에도 많은 로그 파일이 생성된다. 사용자가 웹에 접속할때, 메일을 받거나 읽을 때 등 가만히 놓아두면 엄청나게 느는 로그 파일을 볼 수 있을 것이다.
이 런 로그 파일들을 컴퓨터가 적절히 압축하고 잘라내고 관리하도록 설정하는 프로그램이 logrotate이다. 요즘에는 기본적으로 시스템 설치시 logrotate를 설치하는 경우가 대부분이며 Mandrake 8.1에서는 /etc/cron.daily에 다음과 같은 내용으로 실행시키고 있다.
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
즉 /etc/logrotate.conf 파일을 설정 파일로 주어서 매일 logrotate를 실행시키는 것이다. 그럼 logrotate.conf 파일을 보자. 다음은 Mandrake 8.1의 기본 내용이다.
# 매주 로그 파일을 처리한다.
weekly
# 4주간의 로그 파일을 보관한다.
rotate 4
# 오류는 root 사용자에게 보고한다.
errors root
# 이전 로그 파일을 저장한 다음 새로운 로그 파일을 만든다.
create
# 이전 로그 파일은 압축하여 저장한다.
compress
# /etc/logrotate.d 디렉토리내의 파일들을 읽어들여서 처리한다.
include /etc/logrotate.d
배포판에 따라서 내용이 조금씩 다르겠지만 logrotate가 설치되어 있다면 기본 골격은 비슷할 것이다.
여기에 대한 설명은 코멘트로 생략하고 앞서 logrotate 매뉴얼에 나와 있는 예를 먼저 들어 보겠다.
# sample logrotate configuration file
errors sysadmin@my.org
compress
/var/log/messages {
rotate 5
weekly
postrotate
/sbin/killall -HUP syslogd
endscript
}
"var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
errors www@my.org
size=100k
sharedscripts
postrotate
/sbin/killall -HUP httpd
endscript
}
/var/log/news/* {
monthly
rotate 2
missingok
errors newsadmin@my.org
postrotate
kill -HUP `cat /var/run/inn.pid`
endscript
nocompress
}
제일 첫줄은 코멘트이고 다음 2줄은 logrotate 전체의 옵션이다. 즉, 로그 파일 처리중 발생하는 오류는sysadmin@my.org에게 메일로 알리고 로그 파일은 압축하는것을 기본으로 한다는 내용이다.
다음은 각각의 로그 파일에 대해 처리 옵션을 지정하고 있다.
먼저 /var/log/messages란 로그 파일은 1주일에 한번씩 새로운 로그 파일을 만들고(weekly) 이전 파일은 5주간 보관한 다음 제거한다.(rotate 5) 로그 파일이 새로 생성된 다음에는 /sbin/killall -HUP syslogd 명령이 실행된다. (postrotate ... endscript)
다음은 /var/log/httpd/access.log 와 /var/log/httpd/error.log 2개의 파일을 함께 지정하고 있다. 이들 파일은 크기가 100K 이상으로 커지면 새로운 로그 파일을 생성하고(size=100k) 5개의 로그 파일을 보관한 다음(rotate 5) 가장 오래된 로그 파일은 제거하지 않고 압축되지 않은 상태로www@my.org에게 메일로 보내진다.(mail www@my.org) 로그 파일 처리중에 발생하는 오류는www@my.org에게 보고하고(errors www@my.org) 2개의 로그 파일을 같이 처리할 때 postrotate스크립트는 각 로그 파일을 처리할때 마다 실행되지 않고 한번만 실행된다(sharedscripts)는 내용이다. 만일 로그 파일에 공백문자가 포함된다면 처음과 같이 "로 둘러싸서 지정할 수 있다.
마지막은 /var/log/news 디렉토리 안의 모든 로그 파일들에 대한 지정이다. 각 로그 파일들은 1달에 1번씩 새로 만들어지고(monthly) 오류는 newsadmin@my.org에 게 보고된다. 로그파일이 없더라도 오류를 발생시키지 않으며(missingok) 보관하는 로그파일은 압축하지 않는다.(nocompress) 여러 파일들을 처리하더라도 앞에서 파일을 와일드 문자(*)로 지정했기 때문에 하나의 파일처리로 인식되며 몇가지 파일에서 오류가 발생하더라도 오류 메일은 한통이 보내진다.
다음은 설정파일에서 사용할 수 있는 명령어들중 일부이다.
- compress
- 오래된 로그 파일들은 gzip으로 압축하여 보관한다. 압축을 원하지 않을 경우 nocompress를 사용하라.
- copytruncate
- 보통 로그 파일 처리시에는 원래 로그 파일의 이름을 바꾸고 새로운 로그 파일을 생성하지만 이 옵션을 사용하면 현재 로그 파일의 내용을 복사하고 로그 파일의 크기를 0으로 만든다.
- create mode owner group
- postrotate 스크립트가 실행되기 전에 새로운 로그파일을 만들때 로그 파일의 mode, 사용자, 그룹을 지정한다. 기본으로는 원래 로그 파일과 같은 mode, 사용자, 그룹으로 새로운 로그 파일이 만들어진다.
- daily, weekly, monthly
- 각각 매일, 매주, 매달 로그 파일을 처리한다.
- errors 메일주소
- 로그 파일 처리시 발생한 오류를 메일주소로 알린다.
- extension 확장자
- 보관한 로그파일의 확장자를 지정한다. 압축하는 경우에는 확장자 다음에 .gz이 붙게된다.
- ifemtpy
- 기본값으로 르고 파일의 내용이 없더라도 새로운 로그 파일을 생성한다.
- include 파일/디렉토리
- 파일의 경우 파일의 내용을 읽어들여서 처리하고 디렉토리의 경우 디렉토리 내의 모든 파일들을 읽어서 처리한다. 이 명령어는 전체설정에서만 사용할 수 있다. 디렉토리나 파이프와 같이 정규 파일이 아닌 것들과 뒤에서 설명할 tabooext의 확장자를 가지는 파일은 읽어들이지 않는다.
- mail 주소
- 로그 파일의 보관 주기가 끝나면 주소로 로그 파일을 보낸다.
- mailfirst
- mail 주소 명령에서 보관 주기가 끝난 로그 파일이 아니라 방금 보관된 로그 파일을 메일로 보낸다.
- missingok
- 로그 파일이 존재하지 않더라도 오류를 발생시키지 않는다.[/dl]]
- [[dl]]nocopytruncate
- copytruncate와 유사하게 작동하지만 보관할 로그 내용을 복사한 다음 현재 로그파일의 크기를 줄이지 않는다.
- olddir 디렉토리
- 오래되서 보관해야 할 로그 파일이 저장될 디렉토리를 지정한다. 디렉토리는 로그 파일과 같은 물리적 장치에 존재해야 한다.[/dl]]
- [[dl]]prerotate/endscript
- 두 명령사이에 위치하는 명령들을 로그 파일 처리전에 실행시킨다.
- postrotate/endscript
- 로그 파일 처리후에 실행할 명령들을 지정한다.
- sharedscripts
- 기본적으로는 로그파일을 처리할때마다 prerotate, postrotate 스크립트가 실행된다. 만일 여러 로그 파일을 처리하더라도 prerotate, postrotate 스크립트가 한번만 실행되기를 원한다면 이 명령어를 사용할 수 있다. 단, 이 명령어를 사용하면 처리된 로그 파일이 없더라도 prerotate, postrotate 스크립트가 한번 실행된다.
- rotate 수
- 로그 파일은 지정한 수만큼 저장된 다음 제거되거나 메일로 보내진다. 만일 0을 지정하면 보관하지 않고 바로 처리한다.
- size 크기
- 로그 파일의 크기가 지정한 크기 이상이 되면 처리한다. 크기는 M,k 단위를 사용하여 지정할 수 있다.
- tabooext [+] 확장자들
- include 문에서 읽어들이지 않을 파일의 확장자를 지정한다. 기본값으로는 .rpmorig, .rpmsave, v, .swp, .rpmnew, ~이 지정되어 있으며 +를 사용하는 경우 현재 리스트에 확장자들을 추가한다.
[출처] logrotate 설정파일|작성자 조아조아
출처 - http://blog.naver.com/PostView.nhn?blogId=hdd14&logNo=40090045609&redirect=Dlog&widgetTypeCall=true
참조 원문 : Setting Up Logrotate on RedHat Linux
1. 소개
Logrotate는 로그가 많이 쌓이는 상용 서버를 관리하는 관리자를 위한 유틸리티로 디스크 공간을 아끼면서 시스템이 용량 부족으로 뻗는 것을 방지합니다. 일반적으로 이런 문제를 막는 방법은 /var 마운트 포인트를 별도의 파티션이나 로지컬 볼륨으로 설정하는 것이지만 logrotate는 로그 파일을 일정 조건에 따라 다음 파일로 순환시키고 관리하여 해결합니다. 기본적으로 logrotate는 /etc/cron.daily/에 있는 cron 파일을 통해 하루에 한 번씩 실행됩니다.
$ ls -al /etc/cron.daily/logrotate
-rwxr-xr-x 1 root root 372 12월 1 2012 /etc/cron.daily/logrotate
2. Logrotate 설정
Logrotate를 설정하려면 아래 두 파일을 수정해야 합니다.
- /etc/logrotate.conf
- /etc/logrotate.d/ 디렉토리에 있는 서비스별 설정 파일
/etc/logrotate.conf 파일은 일반 및 디폴트 설정을 담고 있습니다. 어떤 로그 파일에 대한 설정에서 관련 항목이 없다면 그 항목은 이 파일에 있는 내용을 따릅니다. 아래는 파일 내용의 예입니다.
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
# system-specific logs may be configured here
- weekly : 로그 파일을 주 단위로 순환시킨다.
- rotate 4 : 4주 분량의 로그 파일을 보관한다.
- create : 순환 후 새로운 빈 로그 파일을 생성한다.
- include : 해당 디렉토리에 있는 파일들을 읽어서 적용한다.
/etc/logrotate.d/ 디렉토리에는 각 서비스별 설정 파일이 있습니다.
3. 새로운 서비스의 로그를 logrotate의 관리하에 두기
/var/log/sample.log라는 로그 파일이 있고 이 파일을 매일 순환시키길 원한다고 가정하면 /etc/logrotate.d/ 디렉토리에 새로운 파일을 생성(파일명은 원하는 것으로 생성하나 보통은 서비스명을 사용)하여 아래의 내용을 작성하여 저장합니다.
/var/log/linuxcareer.log {
missingok
notifempty
compress
size 20k
daily
create 0600 root root
}
참고로 같은 디렉토리에 있는 다수의 로그 파일에 같은 설정을 적용하길 원한다면 와일드카드(*)를 사용할 수 있습니다. 예를 들어 파일명에 /var/log/mylogs/*.log 라고 적는다면 /var/log/mylogs/ 디렉토리 안에 .log 확장자를 가진 모든 파일을 순환시킵니다.
위의 예제에 있는 각 항목에 대한 설명은 아래와 같습니다.
- missingok : 로그 파일이 없어도 에러를 출력하지 않습니다.
- notifempty : 파일이 비어있다면 순환하지 않습니다.
- compress : 순환 대상을 gzip으로 압축합니다.
- size : 로그 파일의 크기가 20k보다 클 때만 순환합니다.
- daily : 매일 순환합니다.
- create : 퍼미션은 600, 소유자와 소유 그룹은 root로 새로운 로그 파일을 생성합니다.
그 외에도 많은 옵션이 존재하며 man logrotate를 통해 확인할 수 있습니다.
출처 - http://www.myservlab.com/195
'System > Linux' 카테고리의 다른 글
고급 Bash 스크립팅 가이드 (0) | 2013.01.02 |
---|---|
Linux VFS(Virtual File System Switch) 해부 (0) | 2012.10.29 |
debian/ubuntu - iptables 저장 및 restore (0) | 2012.09.01 |
linux - iptables 설정 (0) | 2012.09.01 |
linux - 소스(source) rpm 설치 (0) | 2012.08.23 |