Apache 로그 · 3 min read · Jan 28, 2026

vlogger로 Apache 로그 분할하기

vlogger로 Apache 로그 분할하기

버전 1.0
저자: Falko Timme

Vlogger는 가상 호스트와 날짜별로 분할된 Apache 로그를 작성할 수 있는 작은 도구입니다. vlogger를 사용하면 전역 Apache 구성에 단 하나의 CustomLog 지시문만 추가하면 되며, 각 가상 호스트와 날짜에 대한 접근 로그를 작성합니다. 따라서 Apache의 전체 접근 로그를 매일 각 가상 호스트에 대한 접근 로그로 분할할 필요가 없으며, 각 가상 호스트에 대해 하나의 접근 로그를 작성하도록 Apache를 구성할 필요가 없습니다(이는 파일 설명자를 매우 빠르게 소진시킬 수 있습니다).

이 튜토리얼의 끝에서 Apache 접근 로그에서 통계를 생성하기 위해 webalizer를 사용하는 방법을 보여드리겠습니다.

이것이 여러분에게 작동할 것이라는 보장은 하지 않습니다!

1 사전 참고

저는 Apache2가 이미 설치되어 작동 중인 Debian Etch 시스템에서 vlogger를 테스트했습니다.

2 vlogger 설치 및 구성

vlogger를 설치하려면 간단히 다음을 실행합니다.

apt-get install vlogger

그 후, /etc/apache2/apache2.conf에서 LogFormat 줄(여러 LogFormat 줄이 있으므로 - 최소한 combined이라고 이름 붙여진 줄을 변경해야 함)을 변경해야 합니다. 그 줄의 시작 부분에 %v 문자열을 추가해야 합니다:

vi /etc/apache2/apache2.conf

| [...] #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined [...] |

그런 다음 같은 파일에 다음 CustomLog 줄을 추가합니다(로그 형식 줄 바로 뒤에 넣을 수 있습니다):

vi /etc/apache2/apache2.conf

| [...] CustomLog "| /usr/sbin/vlogger -s access.log /var/log/apache2" combined [...] |

이것이 전체 Apache 구성에서 필요한 유일한 CustomLog 지시문입니다. 특히 가상 호스트 구성에서 다른 모든 CustomLog 지시문을 비활성화하십시오!

하나의 접근 로그만 작성하는 장점은 서버의 부하를 크게 줄여준다는 것입니다. 특히 서버에 트래픽이 많은 사이트가 있는 경우 더욱 그렇습니다.

이제 Apache를 재시작합니다:

/etc/init.d/apache2 restart

이제 vlogger는 /var/log/apache2 디렉토리에 가상 호스트당 하나씩 하위 디렉토리를 생성하고, 파일 이름에 현재 날짜가 포함된 접근 로그를 생성합니다. 또한 현재 로그 파일을 가리키는 access.log라는 심볼릭 링크도 생성합니다.

www.example.com과 www.test.tld라는 두 개의 가상 호스트가 있다고 가정해 보겠습니다. 그러면 /var/log/apache2 디렉토리는 다음과 같이 보일 것입니다:

/var/log/apache2/
www.example.com/
06042007-access.log
06052007-access.log
06062007-access.log
access.log -> 06062007-access.log
www.test.tld/
06042007-access.log
06052007-access.log
06062007-access.log
access.log -> 06062007-access.log

CustomLog 줄에 넣을 수 있는 다른 vlogger 명령줄 지시문을 알아보려면 다음을 참조하십시오.

man vlogger

3 webalizer로 통계 생성하기

이 장에서는 분할된 로그 파일에서 webalizer를 사용하여 통계를 생성하는 방법을 보여드리겠습니다. 다시 말하지만, www.example.com과 www.test.tld라는 두 개의 가상 호스트가 있으며, 이 가상 호스트의 문서 루트는 /var/www/www.example.com/web와 /var/www/www.test.tld/web입니다(서버 이름이 문서 루트 경로에 포함되어야 하며, 그렇지 않으면 다음 절차가 작동하지 않습니다). 통계를 /var/www/www.example.com/web/stats와 /var/www/www.test.tld/web/stats 디렉토리에 넣고 싶으므로 이 디렉토리는 이미 존재해야 합니다.

먼저 webalizer를 설치합시다:

apt-get install webalizer

다음에서 webalizer가 작동하는 방식을 확인하십시오.

man webalizer

기본적으로 어제의 접근 로그에서 www.example.com에 대한 통계를 생성하려면 다음 명령을 사용할 수 있습니다:

/usr/bin/webalizer -c /etc/webalizer/webalizer.conf -n www.example.com \
-s www.example.com -r www.example.com -q -T -o /var/www/www.example.com/web/stats \
/var/log/apache2/www.example.com//bin/date -d "1 day ago" +%m%d%Y-access.log

( /etc/webalizer/webalizer.conf는 Debian의 기본 webalizer.conf 위치입니다. /bin/date -d “1 day ago” +%m%d%Y는 어제 날짜를 정확히 우리가 필요로 하는 형식으로 출력하여 어제의 access.log를 webalizer에 전달할 수 있도록 합니다.)

물론, 각 가상 호스트에 대해 수동으로 이러한 명령을 실행하고 싶지 않으므로, /var/log/apache2 디렉토리를 읽고 해당 디렉토리에 로그가 있는 각 가상 호스트에 대한 통계를 생성하는 작은 셸 스크립트를 작성합니다. 스크립트 이름은 webstats이며 /usr/local/sbin 디렉토리에 배치합니다:

vi /usr/local/sbin/webstats

| #!/bin/sh logdir=/var/log/apache2 webalizerconf=/etc/webalizer/webalizer.conf yesterdaysdate=`/bin/date -d "1 day ago" +%m%d%Y` cd ${logdir} for directory in * do if [ -d ${directory} ]; then /usr/bin/webalizer -c ${webalizerconf} -n ${directory} \ -s ${directory} -r ${directory} -q -T -o /var/www/${directory}/web/stats \ ${logdir}/${directory}/${yesterdaysdate}-access.log fi done exit 0 |

이 스크립트를 실행 가능하게 만들어야 합니다:

chmod 755 /usr/local/sbin/webstats

마지막으로, 매일 밤 04:00에 /usr/local/sbin/webstats 스크립트를 호출하는 cron 작업을 생성합니다:

crontab -e

| 0 4 * * * /usr/local/sbin/webstats &> /dev/null |

cron 작업이 처음으로 실행된 후, www.example.com/stats 및 www.test.tld/stats로 가서 브라우저에서 통계를 확인할 수 있습니다. .htaccess/.htpasswd로 통계 디렉토리를 비밀번호로 보호하는 것이 좋습니다.

4 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.