리눅스

Total 331
Today 0
profile_image
슈퍼아이피
08-07-07 11:50 0개 14회
TIP
apache logrotated 설정
apache logrotated 설정

logrotated 설정이란?

아파치 웹로그파일(access_log)을 관리하기 위한 설정이며, access_log, error_log든 모든 로그파일을 생성하도록 설정 하였을 경우에는 "로그파일OPEN – 파일 끝으로 이동 – 로그내용추가 – 파일 CLOSE" 라는 프로세스를 거치게 되므로 로그파일의 사이즈가 클 경우 보안과는 별개로 속도와 성능에 적지 않은 영향을 줍니다. 즉, 로그파일 용량이 지속적으로 쌓여 용량이 클 경우 파일시스템풀이 나서 시스템이 다운되거나 또는 다운되지는 않더라도 웹서비스의 속도가 현저하게 떨어지게 됩니다. 이런 문제를 해결하기 위해 cron에 의해 주기적으로 로그파일을 순환시켜주는 설정입니다.

① httpd.conf 파일편집

vi 에디터 사용법

사용형식 : vi [옵션] [생성할 파일명/편집할 파일명]

vi 에디터는 입력모드, 명령모드, 실행모드로 구분됩니다.

입력모드 : vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기때문에 문자를 입력하기 전에 앞의 단축키중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다.

명령모드 : 커서이동/문자삭제/문자(열)교체/문자열검색 등을 할수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다.

x : vi 명령모드에서 커서위치의 한 문자 삭제
dw : vi 명령모드에서 커서위치의 한단어 삭제
dd : vi 명령모드에서 커서위치의 행 삭제
Ndd : vi 명령모드에서 커서위치의 여러행 동시 삭제

실행모드 : 특별한 명령어를 실행하는 모드로서 명령어모드에서 ":"(콜론)를 누르면 vi 화면 하단 좌측에 vi 특수명령어를 입력할 수 있습니다.

실행모드의 일반적으로 쓰이는 특수 명령어
q : 수정 작업이 이루어지지 않은 상태에서 vi 편집기에서 빠져나옵니다.
q! : 수정 작업이 이루어진 부분을 적용시키지 않고 vi 편집기를 강제로 빠져나옵니다.
w : 수정된 작업을 저장합니다.
wq : 수정된 작업을 저장하고 vi 편집기에서 빠져나옵니다.

초기 명령어모드 -> 입력모드진입 -> 편집 -> 명령어모드 -> 실행모드 -> 종료

vi 에디터를 이용하여 아파치 환경설정 파일(httpd.conf)을 엽니다.
[root@nextline ~]# vi /usr/local/apache/conf/httpd.conf

② LogFormat 제거

기본으로 설정되어 있는 LogFormat 부분을 제거합니다.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

③ 지시자 및 환경변수 설정

아래와 같이 LogFormat 과 로테이트 스크립트 부분을 추가합니다.

LogFormat "%v -> %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%m-%d 86400" combined env=!not_log
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log.%m-%d 86400" combined env=!not_log

SetEnvIfNoCase Request_URI "\.(bmp|gif|jpg|jpeg|png|css|swf)$" not_log
SetEnvIf Request_URI "/default.ida$" not_log
SetEnvIf Request_URI "(cmd.exe|root.exe)$" not_log

LogFormat 지시자
지시자에 설정된 내용에 따라 로그파일(access_log)에 기록을 하며 |(pipe)에 설정한 외
부 프로그램을 인자로 사용하여 다중 로그를 기록합니다.

%a : 원격의 IP 주소
%b : 헤더를 포함한 전송량(bytes)
%{var}e : 환경 변수 "var"
%f : 파일이름
%h : 원격의 호스트
%{hdr}i : 서버에 들어오는(요청) 헤더 값 "hdr"
%l : 원격의 로그인 ID(지원한다면)
%{label}n : 다른 모듈에서 "label" 구성
%{hdr}o : 응답 헤더 값 "hdr"
%p : 서버의 Canonical 포트 번호
%P : 자식 프로세스 ID(PID)
%r : 첫번째 요청 라인
%s : 상태코드
%t : 시간 포맷(CLF 포맷)
%{format}t : "format"으로 구성된 시간 포맷
%T : 서버에 요청하는 시간(초)
%u : 원격의 유저이름(인증시)
%U : 요청한 URL
%v : 클라이언트 요청에 따른 Canonical 서버네임
%V : UseCanonicalName 설정에 따른 서버네임

CustomLog 지시자
LogFormat 지시자와 비슷한 기능을 하며 LogFormat 지시자에 설정한 nickname이나
Logformat을 인자로 사용할 수 있습니다. CustomLog 지시자는 환경변수를 인자로 가
질수 있습니다.

환경변수 설정

SetEnvIfNoCase
지시자는 대소문자를 구분하지 않겠다는 의미입니다.

SetEnvIfNoCase Request_URI "\.(bmp|gif|jpg|jpeg|png|css|swf)$" not_log
특정 타입의 파일만 환경변수로 설정할 때 사용하며 요청 URL(Requset_URI) 파일이*.bmp, *.gif, *.jpg, *.jpeg, *.png, *.css, *.swf 로 끝난 파일인 경우(대소문자를 구별 하지 않음) do_not_log 환경변수에 지정합니다. not_log는 do_not_log의 반대입니다.
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%m-%d 86400" combined env=!not_log
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log.%m-%d 86400" combined env=!not_log

위 설정은 /usr/local/apache/bin/rotatelogs라는 유틸리티를 실행시켜서 access_log 파일
과 error_log 파일을 24시간(86400초)만에 한번씩 로테이트시키라는 의미입니다.

④ apache 재 시작
아파치를 재 시작하여 변경된 설정을 적용시켜줍니다.

[root@nextline ~]# /usr/local/apache/bin/apachectl restart

⑤ rotate_http 스크립트 생성
cron에 의해 주기적으로 실행시켜주기 위한 스크립트를 생성합니다.
[root@nextline ~]# vi /root/bin/rotate_http


⑥ 스크립트 추가
#!/bin/sh
DIR=/usr/local/apache/logs
COUNT=`ls -1 $DIR/access_log.*|wc -l|awk '{print $1}'`
[ $COUNT -ge 4 ] && ls -tr $DIR/access_log.*|head -1|xargs rm -f

⑦ crontab 등록
vi 에디터를 이용하여 /etc/crontab을 엽니다.
[root@nextline ~]# vi /etc/crontab
아래와 같이 crontab에 추가합니다.

# 웹로그 관리 스크립트
00 5 * * * root /root/bin/rotate_http


⑧ logrotated 설정확인
로그파일(access_log, error_log) 로테이트가 정상적으로 이루어지는지 확인합니다.
[root@nextline ~]# ls -ll /usr/local/apache/logs/

댓글목록

등록된 댓글이 없습니다.