서버가 느려지고 심한 경우 다운이 되길레 호스트하는 업체에 물어봤더니 이유로 말한 것이 로그파일이 계속 누적되어 용량이 커져서 그렇다고 하였다.
/usr/local/apache/log/access.log 파일을 확인해보니 1기가에 육박하였다. 내가 사용하는 서버가 로그파일이 1기가면 무리가 생길 정도로 허약한 시스템인지 먼저 의심은 되었지만 호스트업체에서 하는 말도 일리가 있으니 로그파일을 일자별로 분리해서 저장하는 것을 알아보았다.
알아보니 rotatelogs와 cronolog가 사용되는 것을 확인했다. 그 중에서 많이 사용한다는 cronolog를 설치하기로 했다.
프로그램은 공식홈페이지 http://www.cronolog.org 에서 다운받아서 설치했다. 1.6.2버전이었다. 다운받은 파일은 다시 서버의 임시 저장소로 업로드하고 압축을 풀었다. 압축은 gz로 묶여져 있어서
tar xvzf cronolog-1.6.2.tar.gz
로 압축을 풀었다. 다음으로 설치를 하기 위한 절차로
./configure
make
make install
명령어를 차례로 실행하여 설치를 완료했다. 설치 후 프로그램은
/usr/local/sbin/ 에 설치되어 있음을 확인 할 수 있었다.
이제 httpd.conf 를 수정하여 로그파일을 분할하는 옵션을 주는 일만 남았다.
vi /usr/local/apache/conf/httpd.conf
기존에
CustomLog /usr/local/apache/logs/access_log common
으로 설정되어 있는 것을
CustomLog “|/usr/local/sbin/cronolog /usr/local/apache/logs/access_log.%Y%m%d” common
으로 수정하였다.
이 설정은 access_log 파일을
access_log.20060322
access_log.20060323
이런 식으로 일자별로 분할해 주는 옵션이다. 새로운 폴더를 만들어서 저장하는 옵션도 있었지만 그냥 편하게 관리할려고…
이제 최종 마무리는 아파치를 리스타트시키는 일.
/usr/local/apache/bin/apachectl restart
OK! access_log 파일이 날짜별로 새로 만들기 시작했다.
이제 로그파일 때문에 시스템이 느려지거나 다운되는 일은 없기를 바래야지.
추가적으로 정리하는 내용
아파치 서버 실행
/usr/local/apache/bin/apachectl start
아파치 서버 종료
/usr/local/apache/bin/apachectl stop
아피치 서버 재시작
/usr/local/apache/bin/apachectl restart
부팅할 때 자동으로 아파치, Mysql서버 실행되게 설정하기
vi /etc/rc.d/rc.local 파일에 아래 내용 추가
■ mysql start
/usr/local/mysql/bin/mysqld_safe -O max_connections=1000 -O table_cache=256 -O wait_timeout=300 &
■ apache start
/usr/local/apache/bin/apachectl start &
[이 게시물은 라이노님에 의해 2008-04-15 18:58:04 홈페이지관리에서 이동 됨]
최신 업데이트 (2026년 기준)
cronolog의 현재 상태
이 글에서 사용한 cronolog는 현재 공식적인 업데이트가 중단된 상태다. 대신 Apache에 기본 내장된 rotatelogs와 리눅스 시스템 도구인 logrotate가 현재 가장 널리 사용되는 로그 분할 방법이다.
Apache 내장 rotatelogs 사용 방법
rotatelogs는 아파치 자체에 포함된 도구로, httpd.conf 설정에서 아래와 같이 사용할 수 있다. 86400은 초 단위 값으로 24시간 주기를 의미하며, 한국 시간 기준으로 설정하려면 9시간(32400초)을 오프셋으로 추가한다.
CustomLog “|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%Y%m%d 86400” common
ErrorLog “|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log.%Y%m%d 86400”
다만 rotatelogs는 주기적으로 새로운 로그파일을 생성하지만, 시간이 지난 로그파일을 자동으로 삭제하지 않기 때문에 오래된 파일을 주기적으로 삭제하는 cron 스크립트가 별도로 필요하다.
logrotate를 이용한 로그 관리
logrotate는 리눅스 기본 시스템 로그 파일 관리 도구로, rotatelogs나 cronolog와 달리 자동으로 오래된 파일을 삭제해주기 때문에 더욱 편리하게 사용할 수 있다. /etc/logrotate.d/ 경로에 설정 파일을 추가하면 daily, weekly 등 주기를 지정하고 보관 기간까지 자동으로 관리할 수 있다.
/usr/local/apache/logs/*_log
{ daily rotate 30 compress missingok postrotate /bin/kill -HUP
cat /usr/local/apache/logs/httpd.pid
endscript }
클라우드 환경에서의 로그 관리
현재 AWS, NCP 등 클라우드 서버를 사용하는 경우 CloudWatch Logs, ELK 스택 등 중앙화된 로그 수집·분석 도구를 활용하는 것이 일반적이다.
로그파일이 서버 디스크에 쌓여 시스템이 다운되는 상황 자체를 원천적으로 방지할 수 있다.