>> Delete No. 1398 article
No. 아파치 로그를 postgreSQL로 관리하기..

등록 2001-06-24 13:59:00     조회 5
이름 김용성    

		웹서버를 운영하면서.. 로그 관리라는 걸 하게 되었습니다.
로그 파일이 커지면 일단 웹서버가 느려지고 보통의 경우 /var/log에 로그 관리를 했는데
(님들은 어떻게 하시는 지 모릅니다..^^) 저의 경우 /var에 메모리 할당을 적게 하기 때문에
주기적으로 지워주기 위해 logrotate를 썼는데 컴파일이 잘 안되더군요.(참고로 전 스크래칭
리눅스를 사용하고 있습니다..^^) 그리고 cron디몬이 root로 뿌려대는 메일의 양도 만만치
않더군요. 특히나 제가 webalizer를 깔고 5분마다 한번씩 돌려주었기 때문에..-_-;;
 그래서 다른 방법을 찾아보다가 로그를 디비로 관리하는 걸 우연치 않게 발견해서 그냥 
맨날 보고 가기 미안한 마음도 있구해서리...그야말로 1전짜리 팁을 하나 제공하고자 합니
다.  이 아파치 모듈은 포스트그래스를 이용합니다. 전 포스트그래스와 MySQL을 동시에 사용
하고 있는데요. 일단 포스트그래스는 MySQL에 비해 시스템 리소스를 덜먹습니다.(디몬자체
는..)물론 쿼리속도는 MySQL이 짱이지요. 따라서 극한의 빠른속도가 필요한 항목이 아닌 경
우엔 오히려 MySQL보다 나은점이 많이 있는것같구요. 저는 초보라(디비에 있어선..) 잘 모르
겠습니다만은 포스트그래스가 고급기술이 더 많이 채용되어 있다고 하네용.^^ 근데 사실 
제가 운영하는 소형 웹서버에서는 거의 상관이 없을 정도로 속도가 그렇게 나쁘다고 생각
되지는 않습니다.  이 모듈은 아파치를 첨부터 다시 컴파일을 할 필요가 없습니다...모듈만
 컴파일해서 그냥 httpd.conf 에 올려주기만 하면 되더군요.
 *설치
 PostgreSQL의 설치는 설명하지 않겠습니다. http://kltp.kldp.org에 좋은 팁들이 많이 있더군요.
 일단 그냥 하시던대로 아파치를 컴파일하십시오. rpm으로 해도 상관은 없는 듯합니다.
이 부분도 많은 하우투들이 있으니 참고하세요.
 저의경우엔, MySQL,PostgreSQL,php,mod_gzip을 미리 컴파일하였습니다.
 모듈소스코드 다운로드 : http://download.extreme-ware.com/  무슨 소프트웨어 회사인거 같은데요..
.Open Source Project라는 항목 3번째에 mod_pgsqllog 항목이 있습니다. 다운로드 받으세요..
 압축푸세용.
#zcat mod_pgsqllog-0.4.tar.gz|tar xvf -
#cd mod_pgsqllog-0.4
#ls
COPYING  INSTALL  create-table.sql  src
 일단 INSTALL을 잘 읽으세요..하우투가 있더라도..특정한 문제엔 INSTALL을 보는 게 좋더구만
요. 제 경험...^^
 src디렉으로 이동합니다. 컴파일해야죵...^^
 #cd src
#ls
Makefile  mod_pgsqllog.c  mod_pgsqllog.h
 다음 Makefile을 vi나 기타 좋아하시는 에디터로 편집하세요.
#vi Makefile
 <<<<<파일의 시작
##
##  Makefile -- Build procedure for sample pgsqllog Apache module
##  Autogenerated via ``apxs -n pgsqllog -g''.
##
 #   the used tools
APXS=apxs //<-아파치에 포함되어 있는 apxs가 있는 위치로 바꿔주세요..
APACHECTL=apachectl//<-마찬가지..만약 아파치를 /usr/local/apache에 깔았다면..이부분은 /usr/local/apac
he/bin/apachectl이라고 하면 됩니다.  #   additional defines, includes and libraries
#DEF=-D_DEBUG -D_TRACE_C_CALLS -D_TRACE_POSTGRESQL
INC=-I/usr/local/pgsql/include // <-postgres를 깐위치..저의경우 prefix를 /usr/local/pgsql에 두었으니 이
렇게 되었겠지요? LIB=-L/usr/local/lib -lpq -L/usr/local/pgsql/lib -lpq // <-마찬가지입니다.
 #   the default target
all: mod_pgsqllog.so
 #   compile the shared object file
mod_pgsqllog.so: mod_pgsqllog.c
        $(APXS) -c $(DEF) $(INC) $(LIB) mod_pgsqllog.c
 #   install the shared object file into Apache
install: all
        $(APXS) -i -a -n 'pgsqllog' mod_pgsqllog.so
 #   cleanup
clean:
        -rm -f mod_pgsqllog.o mod_pgsqllog.so
 #   simple test
test: reload
        lynx -mime_header http://localhost/pgsqllog
 #   install and activate shared object by reloading Apache to
#   force a reload of the shared object file
reload: install restart
 #   the general Apache start/restart/stop
#   procedures
start:
        $(APACHECTL) start
restart:
        $(APACHECTL) restart
stop:
        $(APACHECTL) stop
 <<끝...
 제가 주석달아놓은 그부분만 수정하시면 되구요..
일단 올바르게 수정되었으면 make하세요.
 #make
#make install <-이렇게 해주면..아파치의 prefix에 libexec에 바이너리가 자동으로 들어가구..
httpd.conf도 고쳐줍니당...
 이제 디비를 만들어주어야겠지요..
일단 postgresql을 다룰수 있는 계정으로 접근하세요. 보통의 경우 postgres란 이름의 계정을 만
들지요.
 #su - postgres
 디비를 만들어줍니다.
 $createdb apache
CREATE
 다음 디비를 사용할 사용자를 만들어줍니다.
 $psql
>CREATE USER "apache" WITH SYSID 1012 PASSWORD '사용할패스워드' CREATEDB NOCREATEUSE
R VALID UNTIL '2038-01-18 00:00:00+09';
>q
 다음 소프트웨어 배포시 나오는 sql파일을 덤프하세요.
원래 배포되는 사이트에서 나온 sql파일은 테이블이름이 apachelog로 되어 있을 겁니다.
맘에 안드시면 바궈도 됩니다. 그럼 뒤에 httpd.conf에 table항목을 그 이름으로 바꿔주면 되겠
지요.  #psql apache < create-table.sql
 이제 모든 준비는 끝났습니다.
httpd.conf에 디비 접속정보를 넣어주어야겠군요.
 INSTALL파일을 읽어보면 LoadModule이나 Addmodule을 넣어주어야 한다는데 그건 make install시에
다 됩니다. 따라서....
 <IfModule mod_pgsqllog.c>
        PgSqlLogHost    localhost
        PgSqlLogPort    5432
        PgSqlLogDatabase        apache
        PgSqlLogUsername        apache
        PgSqlLogPassword        사용할패스워드
        PgSqlLogTable           apachelog
</IfModule>
 이것만 넣어주세요.
아파치 리부팅.
#apachectl restart
 다음 확인해보세요.
$psql apache
$select * from apachelog;
 만약 돌아간다면...httpd.conf에 access로그 관련을 모두 날리세요.(인스톨파일에는 중복-dual-
관리가 가능하다고 말하고 있으나 별 필요없는 듯합니다...)하지만 errorlog부분은 남기셔야 
합니다. 로그를 쓸 수 없을 경우 에러를 잡기 위해서입니다. 디비접속 실패 등도 이곳에 기
록됩니다.  다시 아파치 리부팅.
#apachectl restart
 모두 끝났군요.
 테스트해보세요.
 로그 분석툴을 php로 짜도 되겠죠? 히히...
지금 제가 연구중인데...워낙 초보라...혹시 잘짜신 분계심 짜서 공개해 주시면 엄청 감사
시럽겠죵..^^  ps. 디비에 무척이나 많이 쌓이는군여..크크..역시 가끔은 비워줘야 할것같습
니다. 하지만 일단 로그를 쓰는게 느려지지 않으니까...좋군염...
 잘못된 점 있으면 사정없이 후려주셈.
 그럼~^^--멍멍
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved