(주의: 이글은 이틀전 설치했던 기억을 토대로 작성하기 때문에 약간 다른부분이 있을수 있습니다. 안되거나 하는 부분이 있다면 알려주시면 감사하겠습니다. 저도 나중에 똑같은 문제에 다시 부딪히게 될테니까요)
현재 쓰고 있는 가상서버의 아파치 로그들이 아무런 의미 없이 썩혀지는것 같아서
그 로그들을 효율적으로 이용해보고자 Cronolog 를 이용해 아차피 로그들을 분류해서 저장하고
Awstats 를 이용해 보기좋게 보여주는 시스템을 구축 해보았다.
현재 쓰는 가상서버의 OS 는 데비안 etch 버전이기 때문에 굳이 소스를 받아서 설치하거나 하지 않고
apt-get 을 이용해 설치하고 실행하였다.

현재 본인이 사용중인 Awstat 캡춰 화면
1. Cronolog
일반적으로 아파치 로그는 /var/log/apache2/access.log 와 같이 한개의 파일에 저장되고 지난 로그는 gz으로 압축된다.
하지만 이렇게 저장되어 있으면 분석하고자 하는 날의 로그를 찾는데 많은 시간이 걸리게 되고 백업을 하고 나중에 다시 찾기에는 사람의 손이 필요하게 된다.
그래서 아파치 로그를 일정한 규칙에 따라 파일이나 폴더로 분류해주는 프로그램이 몇가지 있는데 그중에 하나가 Cronolog 이다. 데비안에서 Awstats 설치하는 문서들(
Awstats on Debian,
Setting Up Awstats for Apache)을 보면 마지막에 이러한 프로그램의 하나인 prerotate 를 사용하여 연결하는 방법이 나오는데 나는 이미 Cronolog 로 해버렸기 때문에 굳이 그 문서의 마지막부분을 따라하지 않았지만, 처음 시작하는 경우라면 될수 있으면 prerotate를 사용하는 편이 그나마 괜찮을수 있겠다는 생각이 든다.
▶ Cronolog 설치
Cronolog 의 설치는 데비안 계열의 경우
apt-get install cronolog
위와 같은 명령어로 실행하면 자동으로 설치가 된다. (참고로 버전은 1.6.2-5.2)
/usr/bin/cronolog 와 /usr/sbin/cronolog 에 설치되어 진다.
▶ 아파치 설정
이제 apache 설정에서 로그관련 부분을 설정해주어야 한다.
데비안의 경우 /etc/apache2/ 폴더에 가면 아파치 관련 설정이 apache2.conf, httpd.conf 그리고 sites-available 에 존재하게 된다.
여기서 apache2.conf 는 기본적으로 세팅되는 정보가 들어있는 부분이고
httpd.conf 는 추가적으로 유저가 입력해서 공통적으로 설정되는 것들을 입력하게 된다.(나중에 awstats 는 이파일에서 설정하게 된다.)
그리고 cronolog 를 위한 설정은 sites-available 폴더 밑에 있는 설정파일에서 해주면 된다.
데비안에서는 sites-available 폴더 밑에 여러가지 설정파일중에 하나를 실행하게 되는 방식이기 때문에
처음 기본설정파일로 쓰는 경우에는 sites-available/default 파일을 열어서 수정해주면 된다.
(저의 경우 처음에 apache2.conf 에 설정해놓고 아 이거 로그 왜 안되는거야 하면서 해메었습니다.)
default 파일을 편집기로 열어보면 VirtualHost:* 부분에서 맨 아래로 내려가면 Log 관련된 부분이 있다.
아래와 같은 CustomLog 설정을 해주었다.
SetEnvIfNoCase Request_URI "\.(gif|jpg|png|swf|css|js|ico)$" do_not_log
CustomLog "|/usr/sbin/cronolog --symlink=/var/log/apache2/access_log /var/log/apache2/%Y/%m/access_log_%Y%m%d" combined env=!do_not_log
ErrorLog "|/usr/sbin/cronolog --symlink=/var/log/apache2/error_log /var/log/apache2/%Y/%m/error_log_%Y%m%d"
CustomLog 에서 첫부분은 cronolog 의 명령어 위치를 지정해주고
--symlink 를 통해 최신의 아파치 로그를 심볼릭 링크로 만들어 두어 접근이 편하게 해두었다.
%Y 는 연도를 의미하고 %m은 월, %d는 날짜이다.
위의 파일경로는 결국 오늘의 로그는 2008/10/access_log_20081012 파일에 생성된다는 것을 의미한다.
env 는 위에서 SetEnvIfNoCase부분에서 지정한 이미지 관련부분은 로그에 기록하지 않겠다는 의미이다.
ErrorLog 도 마찬가지로 설정해주면 된다.
이제 아파치를 재시작 해주면 Cronolog 의 설정은 끝~ 생각보다 쉽다. !
2. Awstats
웹로그를 분석해서 보여주는 툴에는 Awstats 말고도 Webalizer 도 있다. 일부 블로그 글과 스크린샷을 보니 Awstats 가 더 비주얼 적이고 많은 정보를 가지고 있는것 같아서 설치하게 되었다.
결정적으로 데비안에서 apt-cache search webalizer 를 실행하게 되면
4개의 비슷한 프로그램이 나오는데 거기 설명이 다음과 같았다.
awffull - web server log analysis program
awstats - powerful and featureful web server log analyzer
modlogan - A modular logfile analyzer
webalizer - web server log analysis program
여기서 무엇을 선택할것인지는 머.... powerful 하고 feautreful 하다는데... ㅋㅋ
데모페이지 참고 :
http://www.nltechno.com/awstats/awstats.pl?config=destailleur.fr
▶ Awstats 설치
데비안 계열에서의 설치는
apt-get install awstats
/etc/awstats/ 폴더밑에는 설정파일
/usr/share/awstats/ 에는 여러가지 파일이;;
/var/lib/awstats/ 에는 분석이 끝난 자료를 정리해둔 파일
/etc/cron.d/awstats 에는 cron job 에 등록될 내용이 저장되어 있다.
/usr/lib/cgi-bin/awstats.pl 파일은 실제 실행 파일이다.(cron 에서 매일 실행하거나, 웹에서 보여줄때 모두 사용된다.)
▶ 초기 세팅(편리하게 하기 위해)
/usr/share/doc/awstats/examples/awstats_configure.pl 파일을 실행하면 처음에 간단한 설정이 자동으로 된다.
perl /usr/share/doc/awstats/examples/awstats_configure.pl
처음 실행하면 Non Standard Directiory 라고 하면서 계속할것인지 물어보는데 y를 눌러준다.~
config 파일의 경로를 물어보면
/etc/apache2/httpd.conf 를 입력해주고
새로운 config file 을 생성할꺼냐고 물어본다.(첫 실행이면 y 를 눌러준다고 한다.)
이제 awstats 의 config 파일이름을 입력하라고 하는데 예시를 보면 도메인이름이 써있다.
여기서 도메인별로 로그를 관리하려면 도메인 이름을 써주고 아니면 맘대로 써도 된다.(본인의 경우 j4f)
이제 끝~ 근데 오류가 난다 ㅋ 이건 정상이다.
-----> Create config file '/etc/awstats/awstats.j4f.conf'
Error: Failed to open '/usr/share/doc/awstats/examples/wwwroot/cgi-bin/awstats.model.conf' for read.
위에서 설정한 config 파일이름을 찾을수 없다는거다. 아직 생성하지 않았으므로 당연한거 무시!
▶ 아파치 설정(아이콘 경로)
아까 입력한 /etc/apache2/httpd.conf 를 vi 등의 편집기로 열고 추가작업을 할것이있다.
Alias /awstats-icon/ /usr/share/awstats/icon/
<Directory /usr/share/awstats/icon>
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
/etc/apache2/httpd.conf 파일을 열어보면 이미 awstats 관련 옵션이 설정되어 있는데 거기에 추가적으로 위 설정을 입력
▶ awstats config 파일 설정
이제 awstats 의 config 파일을 생성해보도록 하자.
/etc/awstats 폴더에 가보면 awstats.conf 파일이 이미 존재한다. 이파일을 복사해서 새로운 파일을 만들어 준다.
파일이름은 아래와 같은 형식으로 해주어야 한다.
awstats.아까입력한도메인이름.conf
저의 경우에는 awstats.j4f.conf
awstats.j4f.conf 파일을 열어 수정해주어야 할 항목이 있다.
제일 중요한 LogFile 부분 !
여기서는 실제 분석할 로그가 있는 파일을 지정해주면 된다.
LogFile="/var/log/apache2/%YYYY-0/%MM-0/access_log_%YYYY-0%MM-0%DD-0"
본인의 경우 로그파일이 위와같은 형식의 위치에 있다.(위의 Cronolog 참고)
%YYYY는 4자리수의 년도 표기법을 의미하고
뒤에 -?는 해당 폴더를 추적 반복하겠다는 옵션.(2008년이 있으면 2007년도 ...2006년도)
-1 이라면 바로 전년도까지만 추적 할것이다. -0 는 추적하지 않고 현재만 ...
마찬가지로 %MM 은 두자리수의 월 표기법이고 이를 추적반복한다는걸 의미한다.
(주의: 솔직히 이부분은 자신감이 없다. 문서에는 %YYYY-n is replaced with 4 digits year we were n hours ago 이렇게 나와있는데 0일 경우는 현재 년도와 현재월, 현재일을 의미한다는건 알겠는데... 월에 -1을 하면 1월일경우 오류가 발생하나? 등등.. 이부분은 나중에 추가적으로 해봐야겠다.)
서버를 처음 세팅하고 바로 적용할경우 여기서 -? 옵션은 의미가 없다고 본다. 어차피 최신의 파일로 갱신하기 때문에...
그 다음으로 LogFormat 은 1로 해준다.(combined 일 경우)
설명을 보면 1은 아파치나 로터스 같은 combined 된 일반적인 로그파일 형태,
2는 IIS나 ISA 포맷, 3은 webstar 로그포맷, 4는 아파치나 Squid 의 common 포맷이라고 되어있다.
물론 개인적으로 LogFormat 을 수정하여 사용할경우 이부분에도 마찬가지로 LogFormat 을 작성해주어야 한다.
SiteDomain 은 여러개를 관리할때 각각의 이름이라고 생각하면 된다.
본인은 j4f 로 했다. 여기서 입력한 이름이 웹분석결과의 title로도 나온다.
HostAliases 는 기본적으로 localhost, 127.0.0.1 이 되어잇는데 여기에 추가적으로 본인의 도메인을 입력해준다.
여기에 입력되있지 않으면 refer 로그를 분석할때 외부도메인으로 간주한다.
그외에도 DirData 는 분석이 끝난결과를 저장하고 웹에 보여줄때 사용할 저장 디렉토리이다.
기본적으로 /var/lib/awstats 폴더 밑에 존재하면 txt 파일로 저장된다.
▶ Awstats 초기 실행(로그 데이터의 분석 작업)
우선 수동으로 한번 업데이트 시켜보자
~$/usr/lib/cgi-bin/awstats.pl -config=j4f
이렇게 하면 /etc/awstats/awstats.j4f.config 파일의 로그파일 폴더를 참고하여 로그 분석결과를 만들어 내게 된다.
이전의 아파치 로그는 cronolog 를 사용하지 않거나 해서 j4f congif 에서 지정해주지 않았다면
~$/usr/lib/cgi-bin/awstats.pl -config=j4f -LogFiel=/var/log/apache2/olg/access.log.gz(제일오래된 로그파일)
위와같이 우선 실행하여 생성한다음 그 다음 로그파일부터는
~$/usr/lib/cgi-bin/awstats.pl -config=j4f -LogFiel=/var/log/apache2/olg/access.log1.gz -update
-update를 추가해주어 j4f 도메인 분석결과에 업데이트 시키는 식으로 해주면 된다.
여기서 맨 처음에 분석하는 로그파일이 가장 오래된것이어야 한다는것이다.
최신의 것으로 아차피 로그를 지정한다음 오래된것들을 아무리 -update 로 해주어 봤자 반영되지 않는다.
update 를 사용하게 되면 기존의 config 를 따른 분석결과 파일에 추가 된다는 의미이다.
▶ 아파치 설정(웹에서 확인을 위해)
이제 웹에서 확인할수 있도록 apache 설정을 해준다.
아까 cronolog 설정을 해주었던 파일을 열면 된다.(데비안 시스템의 본인의 경우 /etc/apache2/sites-available/defaulf)
중간쯤 보면 cgi-bin 폴더의 설정이 있는데 여기서 원래는 /var/www/cgi-bin 으로 되어있는것을 /usr/lib/cgi-bin 으로 변경
이렇게 하기 싫다면 awstats.pl 파일을 기본폴더인 /var/www/cgi-bin 으로 옮겨 주어도 된다.
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AuthType basic
AuthName "cgi-bin restricted"
AuthUserFile /etc/awstats/awstats.htpasswd
<Files awstats.pl>
Require valid-user
</Files>
</Directory>
Awstats 는 기본적으로 인증시스템을 지원하지 않기 때문에 apache 설정에서 위와같이 설정해주어 인증하도록 한다.
.htpasswd 파일은 htpasswd 명령어를 이용해 생성하면 된다.(검색해서 찾아보세요 ^^ 리눅스 아파치 명령어)
이제 다 되었는지 확인해보자
http://서버주소/cgi-bin/awstats.pl?config=j4f 이렇게 접근을 해서 로그인 아이디와 비밀번호를 쳐서 분석 페이지 결과가 나온다면 잘된것이다. 잘 안된다면 에러 메시지등을 분석해서 알아서 해보도록 하자~
▶ Cron 등록
자 여기까지 다 되었다면 지금까지 쌓여 있던 로그파일들에 대해서는 훌륭하게 분석되었다고 할 수 있다.
이러한 분석작업을 매일 수행해야 하는데 지금까지의 과정을 잘 따라왔다면 /etc/cron.d/awstats 파일이 생성되어있을 것이다.
(아마 apt-get 이 자동으로 생성해준것 같다.)
0,10,20,30,40,50 * * * * www-data [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.conf -a -r /var/log/apache2/access_log ] && /usr/lib/cgi-bin/awstats.pl -config=j4f -update >/dev/null
기본적으로 매 10분마다 작업이 등록되어 있는것을 알수 있다. 여기서 수정해주어야 할부분은 -config 뒤에 자신의 환경설정 이름을 적어주는것이다. (주의 : /etc/awstats/awstat.j4f.conf 와 같이 전체이름이 아니라 j4f 이다.)
이렇게 해주면 매 10분마다 awstats 가 아파치 로그를 분석해준다. !!
로그 분석한것들을 초기화 하고자 할경우에는 /var/lib/awstats/ 에 존재하는 해당 로그분석 결과 파일을 제거해주면 된다.
본인의 경우 awstats102008.j4f.txt 라는 파일이 존재하는데 이걸 제거 해주면 된다.
★ 참고사이트
ps. 마지막으로 Awstats 관련 설정을 하다가 잘 안되서 검색을 해봤더니 중국 블로거들이 쓴 엄청나게 많은 알수 없는 자료들이 가득하더라... 영어라면 대강 이해를 하겠는데 중국어는... 이제 중국어를 읽는 수준의 정도까지 중국어 공부를 해야하는건가 하는 생각이 들었다. 대세는 중국 프로그래머?