Computer/LINUX

로그 제어하기

알찬돌삐 2012. 8. 10. 16:20
LogFormatCustomLog 지시어의 형식 아규먼트는 문자열이다. 이 문자열에 따라 요청을 로그파일에 기록한다. 문자열에는 로그파일에 그대로 복사되는 문자와 행바꿈과 탭을 나타내는 C의 "\n"과 "\t" 제어문자를 사용할 수 있다. 로그파일에 따옴표나 백슬래쉬를 쓰려면 앞에 반드시 백슬래쉬를 적어줘야 한다.
요청의 특징은 형식 문자열에 "%" 지시어를 사용하여 기록한다. 이 지시어는 로그파일에서 다음과 같이 변경된다.
형식 문자열 설명
%% 퍼센트 기호 (아파치 2.0.44 이후)
%...a 원격 IP-주소
%...A (서버) IP-주소
%...B HTTP 헤더를 제외한 전송 바이트수.
%...b HTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이 전송한 내용이 없는 경우 0 대신 '-'가 나온다.
%...{Foobar}C 서버가 수신한 요청에서 Foobar 쿠키의 내용.
%...D 요청을 처리하는데 걸린 시간 (마이크로초 단위).
%...{FOOBAR}e 환경변수 FOOBAR의 내용
%...f 파일명
%...h 원격 호스트
%...H 요청 프로토콜
%...{Foobar}i 서버가 수신한 요청에서 Foobar: 헤더의 내용.
%...l (있다면 identd가 제공한) 원격 로그인명. IdentityCheckOn이 아니면 빼기기호를 기록한다.
%...m 요청 메써드
%...{Foobar}n 다른 모듈이 기록한 Foobar 노트(note) 내용.
%...{Foobar}o 응답의 Foobar: 헤더 내용.
%...p 요청을 서비스하는 서버의 정규 포트
%...P 요청을 서비스하는 자식의 프로세스 ID.
%...{format}P 요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드 ID. format에는 pidtid가 가능하다. (아파치 2.0.46 이후)
%...q 질의문자열 (질의문자열이 있다면 앞에 ?를 붙이고, 없다면 빈 문자열)
%...r 요청의 첫번째 줄
%...s 상태(status). 내부 리다이렉션된 요청의 경우 *원래* 요청의 상태이다. 최종 요청의 상태는 %...>s.
%...t common log format 시간 형식(표준 영어 형식)의 시간
%...{format}t strftime(3) 형식 format의 시간. (지역시간일 수 있음)
%...T 요청을 처리하는데 걸린 시간 (초 단위).
%...u 원격 사용자 (auth가 제공하며, 상태(%s)가 401인 경우 이상한 값을 나올 수 있음)
%...U 질의문자열을 제외한 요청 URL 경로.
%...v 요청을 서비스한 서버의 정규 ServerName.
%...V UseCanonicalName 설정에 따른 서버명.
%...X 응답을 마쳤을때 연결 상태.
X = 응답을 마치기 전에 연결이 끊어졌다.
+ = 응답을 보낸후에도 연결이 살아있다(keep alive).
- = 응답을 보낸후 연결이 끊어졌다.
(아파치 1.3 후반 버전에서 이 지시어는 %...c였지만, 전통적인 ssl %...{var}c 문법과 겹쳐서 변경했다.)
%...I 요청과 헤더를 포함한 수신 바이트수로 0일 수 없다. 이를 사용하려면 mod_logio가 필요하다.
%...O 헤더를 포함한 송신 바이트수로 0일 수 없다. 이를 사용하려면 mod_logio가 필요하다.
"..."에는 (예를 들어, "%h %u %r %s %b") 아무것도 없거나, 항목을 포함할 조건이 나온다 (조건을 만족하지 않으면 자리에 "-"를 기록한다). 조건은 앞에 "!"를 붙이거나 안붙인 HTTP 상태코드 목록으로 작성한다. 예를 들어, "%400,501{User-agent}i"는 400 (Bad Request) 오류와 501 (Not Implemented) 오류일때만 User-agent:를 로그에 남기고, "%!200,304,302{Referer}i"는 정상적인 상태가 아닌 모든 요청에 대해 Referer:를 로그에 남긴다.
수정자 "<"와 ">"는 내부 리다이렉션된 요청에서 각각 처음 요청을 말할지 마지막 요청을 말할지 선택한다. 기본적으로 %s, %U, %T, %D, %r은 처음 요청을 보고, 나머지 % 지시어는 마지막 요청을 본다. 그래서 %>s는 요청의 마지막 상태(status)를 기록하고, %<u는 인증으로 보호하지 않는 자원으로 내부 라다이렉션된 경우에도 처음에 인증한 사용자를 기록한다.
2.0.46 이전의 httpd 2.0 버전은 %...r, %...i, %...o의 결과 문자열을 그대로 두었다. 이유는 Common Log Format의 요구사항을 따르기위해서였다. 즉, 클라이언트가 제어문자를 로그에 집어넣을 수 있기때문에 로그파일을 그대로 다룰 때는 조심해야 한다.
보안상 이유로 2.0.46부터 출력할 수 없는 문자나 다른 특수문자를 \xhh로 표현한다. 여기서 hh는 해당 바이트의 16진수 표현을 나타낸다. 이 규칙의 예외는 백슬래쉬를 앞에 붙이는 "\, 그리고 C언어 형식의 공백문자들(\n, \t 등)이다.
일반적으로 많이 사용하는 로그 형식은 다음과 같다.
Common Log Format (CLF)
"%h %l %u %t \"%r\" %>s %b"
가상호스트 정보를 포함한 Common Log Format
"%v %h %l %u %t \"%r\" %>s %b"
NCSA extended/combined 로그 형식
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
Referer 로그 형식
"%{Referer}i -> %U"
Agent (브라우저) 로그 형식
"%{User-agent}i"
요청을 서비스하는 서버의 정규 ServerNameListen은 각각 %v%p를 사용한다. 로그분석 프로그램이 실제로 요청을 서비스하는 호스트를 알기위해 가상호스트 찾기 알고리즘을 가질 필요없도록 이들 값은 UseCanonicalName 설정과 무관하다.

 

 

 

 

그림 파일 로그 남기지 않게 하기

SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog /usr/local/apache/logs/access_log common env=!IMAGE

이렇게 하면 끝난다.
 

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > LINUX' 카테고리의 다른 글

아파치 로그  (0) 2012.08.10
아파치 2 최적화  (0) 2012.08.10
Openssl 설치법  (0) 2012.08.10
mod_expire  (0) 2012.08.10
mod_cband (apache 2.x) 다른거  (0) 2012.08.10