아파치에서 사이트 접속자가 많아 로그파일 용량이 계속 증가할 경우 서버 부하의 원인이 될 수 있습니다.
효과적으로 여러 로그로 나눠 저장하는 방법을 rototagelogs, logrotate, cronlog 를 통해 살펴보도록 하겠습니다.
1. rototagelogs
아파치 여러 툴 중 하나입니다. 설정 후 아파치를 실행할 경우 자동으로 실행됩니다.
서비스 설정이 되어 있는 아파치 설정파일을 엽니다.
# vi /usr/local/apache/conf/extra/httpd-vhosts.conf |
기존 설정값에 Customlog 와 ErrorLog를 수정합니다.
CustomLog “|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/www.smilecast.co.kr-access-%Y-%m-%d.log 86400” combined ErrorLog “|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/www.smilecast.co.kr-error-%Y-%m-%d.log 86400” |
여기서 %Y-%m-%d 부분은 현재 년, 월, 일 입니다.
86400은 초 단위 값이며, 이 수치를 환산하면 24시간 주기로 한번씩 로그파일이 새로 생성되게 설정됩니다.
자정 12시에 저장할 경우 GMT 기준 시간이므로 한국시간으로 환산하면 9시간(60*9초)를 추가하면 됩니다.
즉, 86400 뒤에 +540을 추가하면 됩니다.
combined 부분은 httpd.conf의 LogFormat 설정의 별명이며, 설정되어있는 별명으로 선택하시면 됩니다.
<IfModule log_config_module> … (이하생략) |
시간 주기가 아닌 용량으로 설정할 경우 86400 부분 대신 원하는 용량 단위를 입력하면 됩니다.
CustomLog “|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/www.smilecast.co.kr-access-%Y-%m-%d.log 100M” combined ErrorLog “|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/www.smilecast.co.kr-error-%Y-%m-%d.log 100M” |
아파치 로그폴더의 파티션 용량이 부족할 경우 다음과 같이 오래된 기간의 파일을 삭제 스크립트를 예약해두면 됩니다.
#!/bin/bash find /usr/local/apache/logs/*-access-*.log -ctime +180 \-exec rm -f {} \;
|
생성된지 180일이 경과된 파일만 삭제합니다.
2. cronolog
cronolog 는 아파치 로그를 날짜별로 나눠주는 설치 프로그램입니다.
http://cronolog.org 사이트를 통해 소스 다운로드하여 설치합니다.
– cronolog 다운로드
# wet http://cronolog.org/download/cronolog-1.6.2.tar.gz
※ 소스 원본 위치는 위와 같으나 작성일 현재 사이트 접근이 안되고 있으므로 우회 주소를 공유합니다.
# wget http://fossies.org/linux/www/cronolog-1.6.2.tar.gz
※ 웹 다운로드 주소 (구글)
http://code.google.com/p/vps/downloads/detail?name=cronolog-1.6.2.tar.gz&can=2&q=
– cronolog 설치
# tar xvfz cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure –prefix=/usr/local/cronolog —> 설치 위치는 달리 지정할 수 있으며, 여기서는 편의상 /usr/local 밑에 설치하도록 하겠습니다.
# make && make install
– cronolog 셋팅
서비스 설정된 httpd.conf 또는 httpd-vhosts.conf 파일을 열어 CustomLog, ErrorLog 에 다음과 같이 셋팅해줍니다.
CustomLog “|/usr/local/cronolog/sbin/cronolog /usr/local/apache/logs/www.smilecast.co.kr-access.log.%Y-%m-%d” combined |
셋팅이 완료되었으면 저장하고 나와서 아파치를 restart 해주면 적용된다.
-rw-r–r– 1 root root 1871795 11월 24 23:58 www.smilecast.co.kr-access.log.2014-11-24
|
3. logrotate
logrorate는 리눅스 기본 시스템 로그 파일들의 설정으로, rotatelogs, cronlog와는 달리 자동적으로 오래된 파일을 삭제해주므로 더욱 편리하게 사용할 수 있습니다.
/var/log 폴더를 보면 일정 기간 단위로 시스템 로그 파일들이 분리되어 있는것을 볼 수 있습니다.
acpid btmp.1 httpd messages.2 rpmpkgs.4 secure.7 vbox |
이런 로그파일들은 logrotate를 통해 기본적으로 설정이 되어있으며 아래와 같습니다.
/etc/logrotate.conf 파일내용입니다.
# see “man logrotate” for details # rotate log files weekly # keep 4 weeks worth of backlogs # create new (empty) log files after rotating old ones # uncomment this if you want your log files compressed # RPM packages drop log rotation information into this directory # no packages own wtmp — we’ll rotate them here /var/log/btmp { # system-specific logs may be also be configured here. |
이 파일에 설정되어있는 wtmp처럼 아래에 설정할 수 있지만 추가할 로그파일이 많아질경우
/etc/logrotate.d 폴더 내에 파일을 생성해서 개별적으로 추가할 수 있습니다.
apache 라는 파일을 생성해서 아파치 로그파일들을 로테이션 설정해보겠습니다.
/usr/local/apache/logs/*_log {
|
daily
– 어느 시간에 한번씩 로테이션을 돌릴지를 정합니다. daily, weekly, monthly, yearly 등으로 설정할 수 있고,
daily의 경우 하루에 한번씩 로그 파일을 생성합니다.
rotate 8
– 로그 파일을 8개까지 생성하겠다는 의미이며 주기가 돌아올경우 .1 로그 파일은 .2가 됩니다.
.8의 로그 파일은 .9가 되므로 서버에서 자동으로 삭제됩니다.
postrotate ~ end스크립트
– 로테이션이 실행된 직후 자동으로 작업할 스크립트를 작성하는 부분입니다.
로테이션이 실행되기 직전에 작업할 경우 postrotate 대신 prerotate를 쓰시면 됩니다.
위와 같이 아파치를 재시작을 하고 스크립트를 닫습니다.
여기서 아파치를 재시작 해야 하는 이유는 로테이션이 실행된 후라도 아파치 프로세스는 계속 실행중이기 때문에
로그 파일명이 변경되었더라도 그 곳에 계속 쌓입니다.
다시 설명하면, access_log 가 access_log.1 가 되어도 재시작을 하지않으면 새로 쌓일 경우 access_log.1 로 쌓이게 되는 것입니다.
이 경우 스크립트 대신 logrotate 옵션값으로 copytruncate 를 이용하는것이 가능합니다.
작업시 파일명 변경(move)이 아닌 동일 파일을 다른 이름으로 복사(copy)하기 때문입니다.
위와같은 설정으로 아파치 로그는 아래와 같이 쌓이게 됩니다.
-rw——- 1 root root 0 11월 27 04:02 access_log
|
로그 로테이트 주기는 사이트 접속 빈도에 따라 하루 또는 주 단위로 설정하면 됩니다.
로그 로테이트 설정 후 syslog 데몬을 재시작해줍니다.
# /etc/init.d/syslog restart
[polldaddy rating=”7739789″]