액세스 로그
서버 액세스 로그는 서버에서 처리 한 모든 요청을 기록합니다. 액세스 로그의 위치와 내용은CustomLog
지시문에 의해 제어됩니다. LogFormat
지시문을 사용하여 로그의 내용 선택을 단순화 할 수 있습니다. 이 섹션에서는 액세스 로그에 정보를 기록하도록 서버를 구성하는 방법에 대해 설명합니다.
물론 액세스 로그에 정보를 저장하는 것은 로그 관리의 시작일뿐입니다., 다음 단계는이 정보를 분석하여 유용한 통계를 생성하는 것입니다. 일반적으로 로그 분석은이 문서의 범위를 벗어나며 실제로 웹 서버 자체의 작업의 일부가 아닙니다. 이 주제에 대한 자세한 내용과 로그 분석을 수행하는 응용 프로그램의 경우 열기 디렉토리를 확인하십시오.
다양한 버전의 아파치가 사용된 다른 모듈과 지시어 control access logging,including mod_log_referer,mod_log_agent,andTransferLog
지시어., 이제CustomLog
지시문은 모든 이전 지시문의 기능을 대체합니다.
액세스 로그의 형식은 고도로 구성 가능합니다. 형식은 c 스타일 printf(1)형식 문자열처럼 보이는 형식 문자열을 사용하여 지정됩니다. 몇 가지 예가 다음 섹션에 나와 있습니다. 형식 문자열의 가능한 내용의 전체 목록은mod_log_config
형식 문자열을 참조하십시오.
일반적인 로그의 형식
전형적인 구성을 위해 접근 로그는 다음과 같이 보일 수 있습니다.,
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/access_log common
이것은 별명common
를 정의하고 특정 로그 형식 문자열과 연관시킵니다. 형식 문자열은 백분율 지시문으로 구성되며 각 지시문은 서버에 특정 정보 조각을 기록하도록 지시합니다. 리터럴 문자는 형식 문자열에 배치 될 수도 있으며 로그 출력에 직접 복사됩니다. 따옴표 문자("
)해야 합 escaped by placing a backslash before it 되는 것을 방지하기 위해 해석의 끝으로 형식 문자열입니다., 형식 문자열에는 new-line 의 경우”\n
“및 tab 의 경우”\t
“특수 제어 문자가 포함될 수도 있습니다.
CustomLog
지시문은 정의 된 닉네임을 사용하여 새 로그 파일을 설정합니다. 액세스 로그의 파일 이름은 슬래시로 시작하지 않는 한ServerRoot
에 상대적입니다.
위의 구성은 CLF(Common Log Format)로 알려진 형식으로 로그 항목을 작성합니다. 이 표준 형식은 많은 다른 웹 서버에서 생성 할 수 있으며 많은 로그 분석 프로그램에서 읽을 수 있습니다., The log file entries produced in CLF will look something like this:
127.0.0.1 - frank "GET /apache_pb.gif HTTP/1.0" 200 2326
의 각 부분이 로그 항목은 아래에 설명되어 있습니다.
127.0.0.1
(%h
)서버에 요청을 한 클라이언트(원격 호스트)의 IP 주소입니다.HostnameLookups
가On
로 설정된 경우 서버는 호스트 이름을 결정하고 ip 주소 대신 로그하려고합니다. 그러나이 구성은 서버 속도를 크게 저하시킬 수 있으므로 권장하지 않습니다., 대신logresolve
와 같은 로그 포스트 프로세서를 사용하여 호스트 이름을 결정하는 것이 가장 좋습니다. 여기에보고 된 IP 주소는 반드시 사용자가 앉아있는 기계의 주소가 아닙니다. 프록시 서버가 사용자와 서버 사이에 존재하는 경우,이 주소는 발신 시스템이 아닌 프록시의 주소가됩니다.-
(%l
)에서”빼기기호”는 출력을 나타내는 요청된 정보를 사용할 수 없습니다., 이 경우에는 사용할 수 없는 정보는 RFC1413 신원의 클라이언트에 의해 결정된identd
클라이언트에서는 기계입니다. 이 정보는 매우 신뢰할 수 없고 거의 사용되지 않을 제외하고 긴밀히 관리되는 내부 네트워크입니다. Apache httpd 는IdentityCheck
가On
로 설정되지 않으면이 정보를 결정하려고 시도조차하지 않습니다.frank
(%u
)이것은 HTTP 인증에 의해 결정된대로 문서를 요청하는 사람의 userid 입니다., 일반적으로REMOTE_USER
환경 변수의 CGI 스크립트에 동일한 값이 제공됩니다. 만약 이 상태 코드 요청에 대한(아래 참조)가 401 이 값을 신뢰할 수 없기 때문에 사용자가 아직 인증됩니다. 문서가 암호로 보호되지 않으면이 부분은 이전과 마찬가지로”-
“가됩니다.(
%t
)요청을 받은 시간입니다., 이 형식은 다음과 같습니다.
이것이 가능한 시간이 표시됩니 다른 형식을 지정하여%{format}t
에서의 로그 형식문자열,여기서format
는 중에서strftime(3)
에서 C 표준 라이브러리에서,또는 하나의 지원하는 특별 토큰이 있습니다. 자세한 내용은mod_log_config
형식 문자열을 참조하십시오.
"GET /apache_pb.gif HTTP/1.0"
(\"%r\"
)요청이 라인에서 클라이언트를 쌍따옴표로 묶여있다. 요청 라인에는 많은 유용한 정보가 포함되어 있습니다., 먼저 클라이언트가 사용하는 방법은GET
입니다. 둘째,클라이언트는 요청된 자원
/apache_pb.gif
,그리고 셋째,클라이언트에 사용되는 프로토콜HTTP/1.0
. 요청 라인의 하나 이상의 부분을 독립적으로 로깅하는 것도 가능합니다. 예를 들어,형식 문자열”%m %U%q %H
“는 메서드,경로,쿼리 문자열 및 프로토콜을 기록하여”%r
“와 정확히 동일한 출력을 생성합니다.200
(%>s
)이 상태 코드 서버로 보내는 클라이언트입니다., 이 정보는 매우 중요하기 때문에,그것을 알지 요청에 대한 결과 성공적인 응답(코드의 시작 부분에서 2),로 리다이렉션(코드의 시작 부분에서 3),오류에 의해 발생하는 클라이언트(코드의 시작 부분에서 4),또는 오류를 서버에서(코드의 시작 부분에서 5). 가능한 상태 코드의 전체 목록은 HTTP 사양(RFC2616 섹션 10)에서 찾을 수 있습니다.2326
(%b
)마지막 부분을 나타내는 개체의 크기가 클라이언트에게 보내는 포함하지 않고 그대로 응답 헤더로 보낸다., 클라이언트에 반환된 콘텐츠가 없는 경우 이 값은”-
“가 됩니다. “0
“내용이 없으면 대신%B
를 사용하십시오.
Combined 로그 형식
일반적으로 사용되는 또 다른 형식 문자열이라는 결합된 로그 형식입니다. 그것은 다음과 같이 사용될 수있다.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combinedCustomLog log/access_log combined
이 형식은 정확히 동일하고는 Common 로그 형식은 두 항목을 더 추가한 것을 제외하고는. 각 추가 필드는 percent-directive%{header}i
를 사용하며,여기서 헤더는 HTTP 요청 헤더가 될 수 있습니다., 접근 로그에서 이 형식은 다음과 같습니다.
추가 필드는 다음과 같습니다.
"http://www.example.com/start.html"
(\"%{Referer}i\"
)The”Referer”(sic)HTTP 요청 헤더. 이것은 클라이언트에서 참조 된보고 사이트를 제공합니다. (이것은/apache_pb.gif
에 링크되거나 포함 된 페이지 여야합니다.)"Mozilla/4.08 (Win98; I ;Nav)"
(\"%{User-agent}i\"
)사용자 에이전트 HTTP 요청 헤더. 이것은 클라이언트 브라우저가 자체에 대해보고하는 식별 정보입니다.,
Multiple Access Logs
여러 접근 로그를 만들 수 있습니다 간단히 지정하여 여러CustomLog
지시어에 설정파일이다. 예를 들어 다음 지시문은 세 개의 액세스 로그를 만듭니다. 첫 번째는 기본 CLF 정보를 포함하고 두 번째 및 세 번째는 리퍼러 및 브라우저 정보를 포함합니다. 마지막 두CustomLog
라인을 표시하는 방법의 효과를 모방ReferLog
및AgentLog
지시어.,
이 예제는 또한LogFormat
지시문으로 닉네임을 정의 할 필요가 없음을 보여줍니다. 대신CustomLog
지시문에서 직접 로그 형식을 지정할 수 있습니다.
조건부 로그는
때가 있는 것이 편리하는 특정 제외에서 항목을 접근 로그의 특성에 따른 클라이언트 요청을 합니다. 이것은 환경 변수의 도움으로 쉽게 수행됩니다. 먼저 요청이 특정 조건을 충족함을 나타내도록 환경 변수를 설정해야합니다., 이것은 일반적으로SetEnvIf
로 수행됩니다. 다음env=
절의CustomLog
지시어가 사용되는 포함하거나 제외 요청하는 환경변수를 설정합니다. 몇 가지 예:
또 다른 예로 영어 사용자에서 하나의 로그 파일로 요청을 로깅하고 영어가 아닌 사람을 다른 로그 파일로 로깅하는 것을 고려하십시오.
SetEnvIf Accept-Language "en" englishCustomLog logs/english_log common env=englishCustomLog logs/non_english_log common env=!english
캐싱 시나리오에서 캐시의 효율성에 대해 알고 싶습니다., 매우 간단한 방법이 될 것이다:
SetEnv CACHE_MISS 1LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cacheCustomLog logs/access_log common-cache
mod_cache
실행되기 전에는mod_env
고,성공하는 경우에는 콘텐츠를 제공합니다 없습니다. 이 경우 캐시 히트는-
를 기록하고 캐시 미스는1
를 기록합니다.,
외에도env=
구문,LogFormat
로그할 수 있도록 지원합니다.값을 조건으로 HTTP 응답 코드:
LogFormat "%400,501{User-agent}i" browserlogLogFormat "%!200,304,302{Referer}i" refererlog
첫 번째 예에서User-agent
것이 기록될 경우에는 HTTP status code400 또는 501. 다른 경우에는 리터럴”-“가 대신 기록됩니다. 마찬가지로 두 번째 예에서는 HTTP 상태 코드가 200,204 또는 302 가 아닌 경우Referer
가 기록됩니다. (참고:”!”상태 코드 전에.,조건부 로깅이 매우 강력하고 유연하다는 것을 보여 주었지만 로그의 내용을 제어하는 유일한 방법은 아닙니다. 로그 파일은 서버 활동의 전체 레코드가 포함되어 있을 때 더 유용합니다. 고려하지 않으려는 요청을 제거하기 위해 로그 파일을 단순히 사후 처리하는 것이 더 쉬운 경우가 종종 있습니다.피>