본문 바로가기
Apache

아파치 로그 포맷과 CustomLog 지시자, 로그변수

by 씨엔아이소프트 2017. 9. 27.
반응형

로그포맷과 CustomLog 지시자




Module mod_log_config 은 아파치 기본 모듈입니다.



로그 포맷 스트링


    %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 설정에 따른 서버네임





httpd.conf 파일의  기본적인 로그 설정 


    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


    CustomLog /usr/local/apache/logs/access_log common




로그 기록 지시자


    CookieLog

    CustomLog

    LogFormat

    TransferLog




LogFormat 지시자


Syntax: LogFormat format|nickname [nickname]

Default: LogFormat "%h %l %u %t \"%r\" %>s %b"

Context: server config, virtual host

Status: Base

Compatibility: Nickname only available in Apache 1.3 or later

Module: mod_log_config



CustomLog 지시자


Syntax: CustomLog file|pipe format|nickname [env=[!]environment-variable]

Context: server config, virtual host

Status: Base

Compatibility: Nickname only available in Apache 1.3 or later.

Conditional logging available in 1.3.5 or later.

Module: mod_log_config



TransferLog 지시자


Syntax: TransferLog file|pipe

Default: none

Context: server config, virtual host

Status: Base

Module: mod_log_config





아파치 환경변수 설정


아파치에서 환경변수를 설정하는 방법은 몇가지 있습니다.

예를 들어,


    - mod_env 모듈에 의한

       SetEnv

       지시자 이용


    - mod_setenvif 모듈에에 의한

       BrowserMatch

       BrowserMatchNoCase

       SetEnvIf

       SetEnvIfNoCase

       지시자 이용




지시자 간단한 사용법


BrowserMatch 지시자


Syntax: BrowserMatch regex envar[=value] [envar[=value]] ...

Default: none

Context: server config, virtual host, directory, .htaccess

Override: FileInfo

Status: Base

Module: mod_setenvif

Compatibility: Apache 1.2 and above (in Apache 1.2 this directive was found in the

now-obsolete mod_browser module); use in .htaccess files only supported with

1.3.13 and later



SetEnvIf 지시자


Syntax: SetEnvIf attribute regex envar[=value] [envar[=value]] ...

Default: none

Context: server config, virtual host, directory, .htaccess

Override: FileInfo

Status: Base

Module: mod_setenvif

Compatibility: Apache 1.3 and above; the Request_Protocol keyword and environment-variable

matching are only available with 1.3.7 and later; use in .htaccess files only supported

with 1.3.13 and later


   환경변수 지정 및 값 지정 방법


   1.varname, or

   2.!varname, or

   3.varname=value


   예 :


   BrowserMatch ^Mozilla forms jpeg=yes browser=netscape

   BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript

   BrowserMatch MSIE !javascript


   BrowserMatchNoCase Robot is_a_robot

   SetEnvIfNoCase User-Agent Robot is_a_robot


   BrowserMatchNoCase mac platform=macintosh

   BrowserMatchNoCase win platform=windows


   SetEnvIf Request_URI "\.gif$" object_is_image=gif

   SetEnvIf Request_URI "\.jpg$" object_is_image=jpg

   SetEnvIf Request_URI "\.xbm$" object_is_image=xbm

        :

   SetEnvIf Referer www\.mydomain\.com intra_site_referral

        :

   SetEnvIf object_is_image xbm XBIT_PROCESSING=1


   SetEnvIfNoCase Host Apache\.Org site=apache


   SetEnvIf 지자자에서 attribute 에 올 수 있는 것들 :


   Remote_Host - the hostname (if available) of the client making the request

   Remote_Addr - the IP address of the client making the request

   Remote_User - the authenticated username (if available)

   Request_Method - the name of the method being used (GET, POST, et cetera)

   Request_Protocol - the name and version of the protocol with which the request

                                    was made (e.g., "HTTP/0.9", "HTTP/1.1", etc.)

   Request_URI - the portion of the URL following the scheme and host portion

   그외

   Host, User-Agent, and Referer 가능


   see http://www.rfc-editor.org/rfc/rfc2616.txt


따라서,

BrowserMatch와 SetEnvIf User-Agent 는 서로 동일하다는 것을 알 수 있을 겁니다.


*중요)

CustomLog 지자자와 다르게 환경변수 인자에 여러 개를 설정할 수 있음.





특정 IP 주소만 환경변수로 설정하기


- 환경변수 이름 : do_not_log

- 목적 : 이 환경변수에 해당되는 특정 IP 주소는 access_log에 기록하지 않는다.


    SetEnvIf Remote_Addr "^127.0.0.1$" do_not_log

    SetEnvIf Remote_Addr "^211.35.159.12[89]$" do_not_log

    SetEnvIf Remote_Addr "^211.35.159.1[345][0-9]$" do_not_log


    위에서 설정한 특정 IP 주소는

    127.0.0.1 자기자신을 말하는 루프백 주소

    211.35.159.128, 211.35.159.129 두개의 IP 주소

    211.35.159.130 ~ 211.35.159.139 10개의 IP 주소

    211.35.159.140 ~ 211.35.159.149 10 개의 IP 주소

    211.35.159.150 ~ 211.35.159.159 10 개의 IP 주소


즉 원격의 IP 주소(Remote_Addr)가 위와 일치하면 do_not_log 환경변수에 지정하는 예임.


*참고)

^ 은 시작을 의미

$ 은 마지막을 의미

[0-9] 0~9까지의 숫자중 어느 하나





특정 타입의 파일만 환경변수로 설정하기


    SetEnvIfNoCase Request_URI "\.(gif|jpg|png|css|js|java)$" do_not_log


    요청 URI(Request_URI) 파일이

    *.gif

    *.jpg

    *.png

    *.css

    *.js

    *.java


    로 끝난 파일인 경우(대소문자를 구별하지 않음) do_not_log 환경변수에 지정함



특정 User-Agent 만 환경변수로 설정하기


- 환경변수 이름 : do_not_log 과 is_a_robot

- 목적 : 이 환경변수에 해당되는 특정 User-Agent는 access_log에 기록하지 않고,

             따로 로그(robot-log)에 기록하거나 기록하지 않기 위함.


    BrowserMatchNoCase "ru-robot" do_not_log is_a_robot

    BrowserMatchNoCase "Slurp/si" do_not_log is_a_robot

    BrowserMatchNoCase "Mercator" do_not_log is_a_robot

    BrowserMatchNoCase "Gulliver" do_not_log is_a_robot

    BrowserMatchNoCase "SyncIT/" do_not_log is_a_robot

    BrowserMatchNoCase "FAST-WebCrawler" do_not_log is_a_robot

    BrowserMatchNoCase "Lycos_Spider" do_not_log is_a_robot

    BrowserMatchNoCase "^ia_archive" do_not_log is_a_robot

    BrowserMatchNoCase "^tv" do_not_log is_a_robot

    BrowserMatchNoCase "Scooter" do_not_log is_a_robot

    BrowserMatchNoCase "ZyBorg/" do_not_log is_a_robot

    BrowserMatchNoCase "KIT-Fireball" do_not_log is_a_robot

    BrowserMatchNoCase "Googlebot/" do_not_log is_a_robot

    BrowserMatchNoCase "DIIbot/" do_not_log is_a_robot

    BrowserMatchNoCase "teoma_agent3" do_not_log is_a_robot

    BrowserMatchNoCase "empas_robot" do_not_log is_a_robot



각각의 정규표현식 조건에 맞는 User-Agent 인 경우, do_not_log 환경변수와

is_a_robot 이라는 두개의 환경변수에 설정한 예입니다.

is_a_robot 이라고 또 하나의 환경변수를 지정한 이유는 앞서 얘기했듯이

이 조건게 맞는 User-Agent가 접근할 경우 따로 로그에 기록하기 위함입니다.


이 BrowserMatchNoCase 지시자 대신에 SetEnvIfNoCase User-Agent 로 대신할 수 있는데

첫번째 부분을 다음과 같이 설정할 수 있습니다.(둘다 똑 같은 결과임)


    SetEnvIfNoCase User-Agent "ru-robot" do_not_log is_a_robot



참고사이트 

http://www.linuxchannel.net/docs/apache_log.txt


반응형

댓글