OpenSource

[Apache] CustomLog 설정

아르비스 2017. 2. 2. 17:55

보통 Request / Response / Error 관련 로그설정을 할때 Log parameter


CustomLog "| /usr/local/sbin/cronolog ./ssl_request.log.%Y%m%d" \ 

         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b %T/%D"  


Common Log 형식은 다음과 같다.


  • (%t)
    • [10/Oct/2000:13:55:36 -0700]
    • day = 숫자 2개

      month = 숫자 3개

      year = 숫자 4개

      hour = 숫자 2개

      minute = 숫자 2개

      second = 숫자 2개

      zone = (`+' | `-') 숫자 4개


      로그 형식문자열에 %{format}t를 사용하여 다른 형식으로 시간을 출력할 수 있다


  • (%h) 
    • 127.0.0.1
    • 서버에 요청을 한 클라이언트(원격 호스트)의 IP 주소이다. HostnameLookups가 On이라면 호스트명을 찾아서 IP 주소 자리에 대신 쓴다. 그러나 이 설정은 서버를 매우 느리게 할 수 있으므로 추천하지 않는다. 호스트명을 알려면 대신 나중에 logresolve와 같은 로그를 처리하는 프로그램을 사용하는 것이 좋다. 여기에 나온 IP 주소는 사용자가 사용하는 컴퓨터 주소가 아닐 수 있다. 프록시 서버가 사용자와 서버사이에 존재한다면, 원래 컴퓨터 주소가 아니라 프록시의 주소가 기록될 것이다


  • (%{SSL_PROTOCOL}x 
    • TLSv1.2
    • SSL 설정에서 사용하는 Protocol version 


  • %{SSL_CIPHER}x 
    • ECDHE-RSA-AES128-GCM-SHA256
    •  SSL에서 사용하는 암호화 알고리즘


  • (\"%r\")
    • "GET /apache_pb.gif HTTP/1.1"
    • 클라이언트의 요청줄이 쌍따옴표로 묶여있다. 요청줄은 매우 유용한 정보를 담고 있다. 첫째, 클라이언트가 사용한 메써드는 GET이다. 둘째, 클라이언트는 자원 /apache_pb.gif를 요청한다. 세번째, 클라이언트는 HTTP/1.1 프로토콜을 사용한다. 요청줄의 여러 부분을 따로 로그할 수도 있다. 예를 들어, 형식문자열 "%m %U%q %H"은 "%r"과 똑같이 메써드, 경로, 질의문자열, 프로토콜을 로그한다


  • (%b) 
    • 2326
    • 마지막 항목은 응답 헤더를 제외하고 클라이언트에게 보내는 내용의 크기를 나타낸다. 클라이언트에게 보내는 내용이 없다면 이 값은 "-"이다. 내용이 없는 경우 "0"을 로그하려면 대신 %B를 사용한다 



  • (0/424895)
  • %T
    • 0
    •  %T: The time taken to serve the request, in seconds.

      요청을 처리하는데 걸린 시간 (초) 


  • %D 
    • 424895
    •  %D: The time taken to serve the request, in microseconds.

      요청을 처리하는데 걸린 시간(마이크로초)


세상을 넓고, 오픈소스에 알아야 할 내용도 많다.. ㅎㅎㅎ



로그포맷에서 사용하는 포맷은 다음과 같습니다 :

포맷


의미

%a

원격지 IP 주소

%A

로컬 IP 주소

%B

HTTP 헤더를 제외하고 전송된 바이트

%b

HTTP 헤더를 제외하고 전송된 바이트. CLF 포맷에서는 , 전송된 것이 없을 경우 0 으로 표시하기 보다는 - 로 표시한다.

%{FOOBAR}e

서버에 의해 지정된 환경변수

%f         

파일 이름

%h         

원격지 호스트

%H                    

요청한 프로토콜

%{Foobar}i

Foobar 의 내용: 클라이언트에서 서버로 요청된 헤더라인으로 예를 들자면, Referer 헤더일 경우 %{Referer}i 로 사용되어 진다. 

%l         

원격지 사용자이름 (이것이 사용되어 지기 위해서는 IdentityCheck 가 반드시 enable 되어져 있어야 한다)

%m                    

요청방식

%{Foobar}o

서버에서 응답되어 지는 HTTP 헤더. 예를들면 :

%{Content-Type}o, %{Last-Modified}o

%p         

요청을 처리하는 서버의 참조적인 포트

%P        

현 요청을 처리하고 있는 아파치 자식 프로세서의 프로세스 ID

%q                     

쿼리 문자열 (쿼리가 있을 경우 ? 뒤로 쿼리문이 포함되며 그렇지 않을 경우 공백으로 처리된다)

%r         

HTTP 메소드를 포함한 요청의 첫 라인

%s         

HTTP 상태코드. 만약 클라이언트의 요청이 내부적인 리다이렉트를 발생시켰을 경우 %s 는 초기 요청의 상태코드를 %>s 는 최종상태 코드를 포함하게 된다. 일반적으로, %s 의 사용 보다는 %>s 가 유용하다.

%t         

요청한 시간과 날짜 (standard english format)

%{format}t

strftime() function 을 이용한 포맷형식에 따른 시간

[Day/Month/Year:Hours:Minutes:Seconds Time Zone]

%T        

요청을 처리하는데 걸린 시간 (초)

%u         

인증이 요청된 원격 사용자 이름

%U        

요청된 URL

%v         

요청을 처리하는 서버의 참조적인 서버 이름

%V        

UseCanonicalName 설정에 따른 서버 이름