HTTP Err Log

2013.03.10 21:53

안녕하세요. 김도명입니다.

이번 포스팅에서는 HTTP Err Log에 대해서 알아보도록 하겠습니다.

HTTP Err Log는 일반적으로 IIS에 문제가 발생하였을 때 확인하게 되는 IIS Log (W3C 로그, 하단 그림 참고)와는 별도로 생성되는 로그로써 오류 발생시 이벤트 로그나 응용프로그램으로 다시 전달되지 않고 HTTP API(HTTP.sys)를 통해 자동으로 처리되는 로그입니다.

HTTP API는 잘못 처리된 클라이언트에 대한 오류 응답, 연결 시간 초과, 고아 요청 및 삭제된 연결을 기록합니다.

<발췌 : http://support.microsoft.com/kb/820729>

 

HTTP Err Log는 기본적으로 %systemroot%\system32\LogFiles\HTTPERR 하위에 저장이 됩니다. 

 

HTTP 오류 로깅은 다음 레지스트리 값을 통해 제어할 수 있습니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

EnableErrorLogging
TRUE로 설정하면 오류 로깅을 사용 가능하게 설정하고 FALSE로 설정하면 오류 로깅을 해제할 수 있는 DWORD. TRUE가 기본값입니다.

ErrorLogFileTruncateSize
오류 로그 파일의 최대 크기를 바이트 단위로 지정하는 DWORD. 기본값은 1MB(0x100000)입니다.

ErrorLoggingDir
HTTP API가 해당 로깅 파일을 저장하는 폴더를 지정하는 문자열. HTTP API는 지정된 폴더에서 HTTPERR이라는 하위 폴더를 만들어서 여기에 로그 파일을 저장합니다. 이 하위 폴더와 로그 파일은 같은 권한 설정을 받습니다. Administrator 및 Local System 계정은 모든 권한을 갖습니다. 그 밖의 다른 사용자는 액세스할 수 없습니다.

다음은 레지스트리에서 폴더를 지정하지 않은 경우에 사용되는 기본 폴더입니다.
%SystemRoot%\System32\LogFiles

참고 : ErrorLoggingDir 문자열 값은 정규화된 경로여야 합니다. 그러나, %SystemRoot%를 포함할 수도 있습니다. 네트워크 드라이브 또는 네트워크 공유를 사용할 수 없습니다.

<발췌 : http://support.microsoft.com/kb/820729>

 

 

다음은 HTTP Err Log의 예시입니다. 오류를 기록하게 되는 HTTP API의 이름과 버전, 오류가 기록된 날짜, 필드명이 표시되고, 오류 별로 로그가 기록되게 됩니다. 

아래 기록된 로그는 모두 Timer_ConnectionIdle 즉, 커넥션 타임아웃으로 인해 발생한 오류입니다.

 

 

필드명은 date, time, c-ip, c-port, s-ip, s-port, cs-version, cs-method, cs-uri, sc-status, s-siteid, s-reason, s-queuename로 구분되며, 필드명의 프리픽스는 아래와 같은 의미를 가지고 있습니다.

s : Server actions
c : Client actions
cs : Client-to-server actions
sc : Server-to-client actions

예를 들면, cs-version의 경우에는 클라이언트에서 서버로 요청을 보내는 프로토콜의 버전을 의미합니다.

각각의 필드값은 공백 문자로 구분되고, 해당하는 필드 값을 사용할 수 없거나 분석이 불가능한 경우에는 하이픈('-')으로 채워지게 됩니다.

 

 

다음은 오류 로그를 필드별로 나눈 예시입니다.

2013-03-10 13:09:38 ::1%0 44550 ::1%0 80 HTTP/1.1 GET /test 404 - NotFound -

c-ip = ::1%0

c-port = 44550

s-ip = ::1%0

s-port= 80

cs-version = HTTP/1.1

cs-method = GET

cs-uri = /test

sc-status = 404

s-siteid = - (N/A)

s-reason = NotFound

s-queuename = - (N/A)

 

 

로그에 기록되는 필드 값 중 sc-status와 s-reason이 중요한데요. 어떤 오류 상태를 반환했고 그 이유가 무엇 때문인지를 알려주기 때문입니다.

다음 표를 이용하면 s-reason 필드에 표시되는 값을 통해 어떤 원인으로 오류가 발생했는지 확인할 수 있습니다.

Kinds of errors that the HTTP API logs

The HTTP API logs error responses to clients, connection time-outs, orphaned requests, and dropped connections that are handled incorrectly.

The following list identifies the kinds of errors that the HTTP API logs:

  • Responses to clients The HTTP API sends an error response to a client, for example, a 400 error that is caused by a parse error in the last received request. After the HTTP API sends the error response, it closes the connection.
  • Connection time-outs The HTTP API times out a connection. If a request is pending when the connection times out, the request is used to provide more information about the connection in the error log.
  • Orphaned requests A user-mode process stops unexpectedly while there are still queued requests that are routed to that process. The HTTP API logs the orphaned requests in the error log.

Reason Phrase

Description Description
AppOffline A service unavailable error occurred (an HTTP error 503). The service is not available because application errors caused the application to be taken offline. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램 오류로 인해 응용 프로그램이 오프라인 상태가 되었기 때문에 서비스를 사용할 수 없습니다.
AppPoolTimer A service unavailable error occurred (an HTTP error 503). The service is not available because the application pool process is too busy to handle the request. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램 풀 프로세스가 사용 중이어서 요청을 처리할 수 없기 때문에 서비스를 사용할 수 없습니다.
AppShutdown A service unavailable error occurred (an HTTP error 503). The service is not available because the application shut down automatically in response to administrator policy. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램이 관리자 정책에 대한 응답으로 자동으로 종료되기 때문에 서비스를 사용할 수 없습니다.
BadRequest A parse error occurred while processing a request. 요청을 처리하는 동안 구문 분석 오류가 발생했습니다.
Client_Reset The connection between the client and the server was closed before the request could be assigned to a worker process. The most common cause of this behavior is that the client prematurely closes its connection to the server. 요청이 작업자 프로세서에 할당되기 전에 클라이언트와 서버 간 연결이 닫혔습니다. 이 동작의 가장 일반적인 원인은 클라이언트가 서버와의 연결을 미리 닫는 것입니다.
Connection_Abandoned_By_AppPool A worker process from the application pool has quit unexpectedly or orphaned a pending request by closing its handle. 응용 프로그램 풀의 작업자 프로세스가 핸들을 닫아서 보류 중인 요청의 연결을 끊거나 예기치 않게 종료되었습니다.
Connection_Abandoned_By_ReqQueue A worker process from the application pool has quit unexpectedly or orphaned a pending request by closing its handle. Specific to Windows Vista and later versions and to Windows Server 2008 and later versions. 응용 프로그램 풀의 작업자 프로세스가 핸들을 닫아서 보류 중인 요청의 연결을 끊거나 예기치 않게 종료되었습니다. Windows Vista 및 Windows Server 2008에만 해당됩니다.
Connection_Dropped The connection between the client and the server was closed before the server could send its final response packet. The most common cause of this behavior is that the client prematurely closes its connection to the server. 서버가 최종 응답 패킷을 전송하기 전에 클라이언트와 서버 간 연결이 닫혔습니다. 이 동작의 가장 일반적인 원인은 클라이언트가 서버와의 연결을 미리 닫는 것입니다.
Connection_Dropped_List_Full The list of dropped connections between clients and the server is full. Specific to Windows Vista and later versions and to Windows Server 2008 and later versions. 클라이언트와 서버 간의 삭제된 연결 목록이 꽉 찼습니다. Windows Vista 및 Windows Server 2008에만 해당됩니다.
ConnLimit A service unavailable error occurred (an HTTP error 503). The service is not available because the site level connection limit has been reached or exceeded. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 사이트 수준 연결 한계에 도달했거나 초과했기 때문에 서비스를 사용할 수 없습니다.
Connections_Refused The kernel NonPagedPool memory has dropped below 20MB and http.sys has stopped receiving new connections 커널 NonPagedPool 메모리가 20MB 아래로 떨어지고 http.sys가 새 연결 수신을 중단했습니다.
Disabled A service unavailable error occurred (an HTTP error 503). The service is not available because an administrator has taken the application offline. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 관리자가 응용 프로그램을 오프라인 상태로 만들었기 때문에서 서비스를 사용할 수 없습니다.
EntityTooLarge An entity exceeded the maximum size that is permitted. 엔터티가 허용된 최대 크기를 초과했습니다.
FieldLength A field length limit was exceeded. 필드 길이 한계를 초과했습니다.
Forbidden A forbidden element or sequence was encountered while parsing. 구문 분석 동안 금지된 요소나 시퀀스가 발생했습니다.
Header A parse error occurred in a header. 머리글에서 구문 분석 오류가 발생했습니다.
Hostname A parse error occurred while processing a Hostname. 호스트 이름을 처리하는 동안 구문 분석 오류가 발생했습니다.
Internal An internal server error occurred (an HTTP error 500). 내부 서버 오류가 발생했습니다(HTTP 오류 500).
Invalid_CR/LF An illegal carriage return or line feed occurred. 잘못된 캐리지 리턴이나 줄 바꿈이 발생했습니다.
LengthRequired A required length value was missing. 필수 길이 값이 없습니다.
N/A A service unavailable error occurred (an HTTP error 503). The service is not available because an internal error (such as a memory allocation failure or URL Reservation List conflict) occurred. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 메모리 할당 실패 같은 내부 오류가 발생했기 때문에 서비스를 사용할 수 없습니다.
N/I A not-implemented error occurred (an HTTP error 501), or a service unavailable error occurred (an HTTP error 503) because of an unknown transfer encoding. 알 수 없는 전송 인코딩으로 인해 "구현되지 않음" 오류가 발생했거나(HTTP 오류 501), "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503).
Number A parse error occurred while processing a number. 숫자를 처리하는 동안 구문 분석 오류가 발생했습니다.
Precondition A required precondition was missing. 필수 전제 조건이 없습니다.
QueueFull A service unavailable error occurred (an HTTP error 503). The service is not available because the application request queue is full. "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램 요청 대기열이 꽉 찼기 때문에 서비스를 사용할 수 없습니다.
RequestLength A request length limit was exceeded. 요청 길이 한계를 초과했습니다.
Timer_AppPool The connection expired because a request waited too long in an application pool queue for a server application to de-queue and process it. This time-out duration is ConnectionTimeout. By default, this value is set to two minutes. 서버 응용 프로그램이 대기열에서 가져와 요청을 처리할 때까지 요청이 응용 프로그램 풀 대기열에서 너무 오랫동안 대기했기 때문에 연결이 만료되었습니다. 이 제한 시간은 ConnectionTimeout입니다. 기본적으로 이 값은 2분으로 설정됩니다.
Timer_ConnectionIdle The connection expired and remains idle. The default ConnectionTimeout duration is two minutes. 연결이 만료되어 계속 유휴 상태로 있습니다. 기본 ConnectionTimeout 시간은 2분입니다.
Timer_EntityBody The connection expired before the request entity body arrived. When a request clearly has an entity body, the HTTP API turns on the Timer_EntityBody timer. At first, the limit of this timer is set to the ConnectionTimeout value (typically, two minutes). Every time that another data indication is received on this request, the HTTP API resets the timer to give the connection two more minutes (or whatever is specified in ConnectionTimeout). 요청 엔터티 본문이 도착하기 전에 연결이 만료되었습니다. 요청에 엔터티 본문이 있는 경우 HTTP API는 Timer_EntityBody 타이머를 켭니다. 처음에는 이 타이머의 제한이 ConnectionTimeout 값(보통 2분)으로 설정됩니다. 이 요청에서 다른 데이터 표시가 수신될 때마다 HTTP API는 타이머를 재설정하여 연결에 추가적인 2분(또는 ConnectionTimeout에 지정된 시간)을 더 제공합니다.
Timer_HeaderWait The connection expired because the header parsing for a request took more time than the default limit of two minutes. 요청에 대한 머리글 구문 분석을 수행하는 데 기본 제한인 2분보다 많이 소요되었기 때문에 연결이 만료되었습니다.
Timer_MinBytesPerSecond The connection expired because the client was not receiving a response at a reasonable speed. The response send rate was slower than the default of 240 bytes/sec. This can be controlled with the MinFileBytesPerSec metabase property. 클라이언트가 적절한 속도로 응답을 받지 못했기 때문에 연결이 만료되었습니다. 응답 전송 속도가 기본값인 초당 240바이트보다 느려졌습니다. 이 속도는 MinFileBytesPerSec 메타베이스 속성으로 제어할 수 있습니다.
Timer_ReqQueue The connection expired because a request waited too long in an application pool queue for a server application to de-queue. This time-out duration is ConnectionTimeout. By default, this value is set to two minutes. Specific to Windows Vista and later versions and to Windows Server 2008 and later versions. 서버 응용 프로그램이 대기열에서 요청을 가져올 때까지 요청이 응용 프로그램 풀 대기열에서 너무 오랫동안 대기했기 때문에 연결이 만료되었습니다. 이 제한 시간은 ConnectionTimeout입니다. 기본적으로 이 값은 2분으로 설정됩니다. Windows Vista 및 Windows Server 2008에만 해당됩니다.
Timer_Response Reserved. Currently not used. 예약됨. 현재 사용되고 있지 않습니다.
Timer_SslRenegotiation  The connection expired because SSL renegotiation between the client and server took longer than the default time-out of two minutes.  클라이언트와 서버 간 SSL 재협상이 기본 제한 시간인 2분보다 오래 걸렸으므로 연결이 만료되었습니다. 
URL A parse error occurred while processing a URL. URL을 처리하는 동안 구문 분석 오류가 발생했습니다.
URL_Length A URL exceeded the maximum permitted size. URL이 허용되는 최대 크기를 초과했습니다.
Verb A parse error occurred while processing a verb. 동사를 처리하는 동안 구문 분석 오류가 발생했습니다.
Version_N/S A version-not-supported error occurred (an HTTP error 505).  지원되지 않는 버전 오류가 발생했습니다(HTTP 오류 505). 

<발췌 : http://support.microsoft.com/kb/820729>

 

감사합니다.

저작자 표시 비영리 변경 금지
신고
Posted by kdmsong

BLOG main image
http://SharePointSchool.net by kdmsong

분류 전체보기 (262)
SharePoint 2013 (1)
SharePoint 2010 (224)
MOSS 2007 (3)
SharePoint 세미나 (9)
Windows Azure (7)
IIS 6.0 ~ 8.0 (8)
개발자 기본 소양 (10)
Etc. (0)
Total : 402,835
Today : 58 Yesterday : 98
Statistics Graph

free counters