반응형

HTTP API의 오류 로깅

기술 자료 ID : 820729
마지막 검토 : 2005년 9월 16일 금요일
수정 : 5.0

요약

이 문서에서는 HTTP(하이퍼텍스트 전송 프로토콜) API의 오류 로깅 기능을 설명합니다.

HTTP 기반 응용 프로그램에서 발생하는 오류 중 일부는 처리를 위해 응용 프로그램으로 다시 전달되는 대신 HTTP API에서 자동으로 처리됩니다. 이 동작은 이러한 오류가 너무 많이 발생하여 이렇게 하지 않으면 이벤트 로그나 응용 프로그램 처리기에서 다룰 수 있는 범위를 초과하기 때문에 발생합니다.

아래의 항목은 HTTP API 오류 로깅의 다양한 측면에 대해 설명합니다.
HTTP API 오류 로깅 구성
레지스트리 설정은 HTTP API 로그 오류, 허용되는 최대 로그 파일 크기 및 로그 파일 위치를 제어합니다.
HTTP API 오류 로그 형식
HTTP API는 W3C(World Wide Web Consortium) 로그 파일 규칙을 준수하는 로그 파일을 만듭니다. 따라서 표준 도구를 사용하여 이 로그 파일을 구문 분석할 수 있습니다. 그러나, W3C 로그 파일과 달리 HTTP API 로그 파일에는 열 이름이 없습니다.
HTTP API가 기록하는 오류 유형
HTTP API는 다양한 일반 오류를 기록합니다.

위로 가기

추가 정보

HTTP API 오류 로깅 구성

HTTP \Parameters 키의 세 가지 레지스트리 값이 HTTP API 오류 로깅을 제어합니다. 이들 키는 다음 레지스트리 키에 있습니다.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
참고 이후 버전의 Microsoft Windows 운영 체제에서는 구성 값의 위치와 형식이 바뀔 수 있습니다.

레지스트리 값을 변경하고, 이들이 포함되어 있는 로그 파일과 폴더를 보거나 수정하려면 Administrator/Local System 자격 증명이 있어야 합니다.

레지스트리 값의 구성 정보는 HTTP API 드라이버가 시작될 때 읽혀집니다. 따라서 설정을 변경한 경우에 새 값을 읽으려면 드라이버를 중지했다가 다시 시작해야 합니다. 이렇게 하려면 다음 콘솔 명령을 입력하십시오.
net stop http
net start http
로그 파일의 이름을 지정하는 데 다음과 같은 명명 규칙이 사용됩니다.
httperr + sequence number + .log
예: httperr4.log
로그 파일은 ErrorLogFileTruncateSize 레지스트리 값에서 지정하는 최대 크기에 도달하면 새로 작성됩니다. 최대 크기는 1MB 이상이어야 합니다. 

오류 로깅의 구성이 올바르지 않거나, HTTP API가 로그 파일에 기록하는 동안 오류가 발생하면 HTTP API는 이벤트 로깅을 사용하여 오류 로깅이 발생하지 않음을 관리자에게 알립니다.

아래의 표는 레지스트리 구성 값을 설명합니다. 

레지스트리 값 설명
EnableErrorLogging TRUE로 설정하면 오류 로깅을 사용 가능하게 설정하고 FALSE로 설정하면 오류 로깅을 해제할 수 있는DWORD. TRUE가 기본값입니다.
ErrorLogFileTruncateSize 오류 로그 파일의 최대 크기를 바이트 단위로 지정하는 DWORD. 기본값은 1MB(0x100000)입니다. 

참고 기본값보다 작은 값은 지정할 수 없습니다.
ErrorLoggingDir HTTP API가 해당 로깅 파일을 저장하는 폴더를 지정하는 문자열. 

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

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

참고 ErrorLoggingDir 문자열 값은 정규화된 경로여야 합니다. 그러나, %SystemRoot%를 포함할 수도 있습니다.

위로 가기

HTTP API 오류 로그 형식

일반적으로 HTTP API 오류 로그 파일은 열 머리글이 없다는 점을 제외하고 W3C 오류 로그와 같은 형식을 갖고 있습니다. HTTP API 오류 로그 파일은 각 행에 하나씩 오류를 기록합니다. 필드가 특정 순서로 나타납니다. 단일 공백 문자(0x0020)가 각 필드를 이전 필드와 분리합니다. 각 필드에서 공백 문자, 탭 및 인쇄할 수 없는 제어 문자 대신 더하기 기호(0x002B)가 표시됩니다.

아래의 표는 오류 로그 레코드에서 필드와 이들 필드의 순서를 나타냅니다.

필드 설명
날짜 날짜 필드는 W3C 형식을 따릅니다. 이 필드는 UTC(Coordinated Universal Time)를 기준으로 합니다. 날짜 필드는 항상 YYYY-MM-DD 형식으로 된 10개의 문자입니다. 예를 들어, 2003년 5월 1일은 2003-05-01로 표시됩니다.
시간 시간 필드는 W3C 형식을 따릅니다. 이 필드는 UTC를 기준으로 합니다. 시간 필드는 항상 MM:HH:SS의 형식으로 된 8개의 문자입니다. 예를 들어, 오후 5시 30분(UTC)은 17:30:00으로 표시됩니다.
클라이언트 IP 주소 영향을 받는 클라이언트의 IP 주소입니다. 이 필드의 값은 IPv4 주소나 IPv6 주소 중 하나가 될 수 있습니다. 클라이언트 IP 주소가 IPv6 주소인 경우 ScopeId 필드도 주소에 포함됩니다.
클라이언트 포트 영향을 받는 클라이언트의 포트 번호입니다.
서버 IP 주소 영향을 받는 서버의 IP 주소입니다. 이 필드의 값은 IPv4 주소나 IPv6 주소 중 하나가 될 수 있습니다. 서버 IP 주소가 IPv6 주소인 경우 ScopeId 필드도 주소에 포함됩니다.
서버 포트 영향을 받는 서버의 포트 번호입니다.
프로토콜 버전 사용 중인 프로토콜의 버전입니다.

프로토콜 버전을 확인할 수 있도록 구문 분석되지 않은 연결에는 하이픈(0x002D)이 빈 필드에 대한 자리 표시자로 사용됩니다.

구문 분석된 주 버전 번호나 부 버전 번호가 10 이상인 경우에는 버전이 HTTP/?.?로 기록됩니다.
동사 마지막으로 구문 분석된 요청이 전달하는 동사 상태입니다. 알 수 없는 동사가 포함되지만, 255바이트를 초과하는 동사는 이 길이로 잘립니다. 동사를 사용할 수 없는 경우에는 하이픈(0x002D)이 빈 필드에 대한 자리 표시자로 사용됩니다.
CookedURL + 쿼리 URL과 이 URL과 연관된 쿼리는 물음표(0x3F)로 분리된 하나의 필드로 기록됩니다. 이 필드는 4096바이트의 길이 제한에서 잘립니다.

이 URL이 구문 분석("cooked")된 경우 로컬 코드 페이지 변환에서 기록되어 유니코드 필드로 처리됩니다.

이 URL이 로깅 시 구문 분석("cooked")되지 않은 경우 유니코드 변환 없이 정확하게 복사됩니다.

HTTP API가 이 URL을 구문 분석하지 못하면 하이픈(0x002D)이 빈 필드에 대한 자리 표시자로 사용됩니다.
프로토콜 상태 프로토콜 상태는 999를 초과할 수 없습니다.

요청에 대한 응답의 프로토콜 상태가 사용 가능한 경우 이 필드에 기록됩니다.

프로토콜 상태가 사용 불가능한 경우에는 하이픈(0x002D)이 빈 필드에 대한 자리 표시자로 사용됩니다.
사이트 ID 이 버전의 HTTP API에서는 사용되지 않습니다. 이 필드에는 자리 표시자 하이픈(0x002D)이 항상 나타납니다.
원인 문구 이 필드에는 기록 중인 오류의 유형을 나타내는 문자열이 나와 있습니다. 이 필드는 빈 상태로 있을 수 없습니다.
대기열 이름 이것은 요청 대기열 이름입니다.

아래의 예제 행은 HTTP API 오류 로그에서 가져온 것입니다.
2002-07-05 18:45:09 172.31.77.6 2094 172.31.77.6 80 HTTP/1.1 GET /qos/1kbfile.txt 503 ? ConnLimit 2002-07-05 19:51:59 127.0.0.1 2780 127.0.0.1 80 HTTP/1.1 GET /ThisIsMyUrl.htm 400 ? Hostname 2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - Version_N/S 2002-07-05 20:06:01 172.31.77.6 64388 127.0.0.1 80 - - - - - Timer_MinBytesPerSecond

위로 가기

HTTP API가 기록하는 오류 유형

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

아래의 목록은 HTTP API가 기록하는 오류 유형을 나타냅니다.
클라이언트에 대한 응답 HTTP API는 클라이언트에 대한 오류 응답(예: 마지막으로 받은 요청에서 구문 분석 오류로 인해 발생한 400 오류)을 보냅니다. HTTP API는 오류 응답을 보낸 후 연결을 종료합니다.
연결 시간 초과 HTTP API가 연결 시간을 초과합니다. 연결 시간이 초과될 때까지도 요청이 계속 보류 중이면 이 요청은 오류 로그에서 연결에 대한 자세한 정보를 제공하는 데 사용됩니다.
고아 요청 대기열에 사용자 모드 프로세스로 라우팅되는 요청이 아직 남아 있을 때 프로세스가 예기치 않게 종료됩니다. HTTP API는 오류 로그에 고아 요청을 기록합니다.
특정 오류 형식은 항상 각 오류 행의 마지막 필드로 나타나는 원인 문구 문자열에서 지정됩니다. 아래의 표는 HTTP API 원인 문구를 나타냅니다.

원인 문구

 

설명

AppOffline "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램 오류로 인해 응용 프로그램이 오프라인 상태가 되었기 때문에 서비스를 사용할 수 없습니다.
AppPoolTimer "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램 풀 프로세스가 사용 중이어서 요청을 처리할 수 없기 때문에 서비스를 사용할 수 없습니다.
AppShutdown "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램이 관리자 정책에 대한 응답으로 자동으로 종료되기 때문에 서비스를 사용할 수 없습니다.
BadRequest 요청을 처리하는 동안 구문 분석 오류가 발생했습니다.
Connection_Abandoned_By_AppPool 핸들을 닫아서 보류 중인 요청의 연결을 끊거나 예기치 않게 종료된 응용 프로그램 풀의 작업자 프로세스
Connection_Dropped 예약됨. 현재 사용되고 있지 않습니다.
ConnLimit "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 사이트 수준 연결 한계에 도달했거나 초과했기 때문에 서비스를 사용할 수 없습니다.
Connections_Refused 커널 NonPagedPool 메모리가 20MB 아래로 떨어지고 http.sys가 새 연결 수신을 중단했습니다.
Disabled "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 관리자가 응용 프로그램을 오프라인 상태로 만들었기 때문에서 서비스를 사용할 수 없습니다.
EntityTooLarge 엔터티가 허용된 최대 크기를 초과했습니다.
FieldLength 필드 길이 한계를 초과했습니다.
Forbidden 구문 분석 동안 금지된 요소나 시퀀스가 발생했습니다.
Header 머리글에서 구문 분석 오류가 발생했습니다.
Hostname 호스트 이름을 처리하는 동안 구문 분석 오류가 발생했습니다.
Internal 내부 서버 오류가 발생했습니다(HTTP 오류 500).
Invalid_CR/LF 잘못된 캐리지 리턴이나 줄 바꿈이 발생했습니다.
LengthRequired 필수 길이 값이 없습니다.
N/A "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 메모리 할당 실패 같은 내부 오류가 발생했기 때문에 서비스를 사용할 수 없습니다.
N/I 알 수 없는 전송 인코딩으로 인해 "구현되지 않음" 오류가 발생했거나(HTTP 오류 501), "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503).
Number 숫자를 처리하는 동안 구문 분석 오류가 발생했습니다.
Precondition 필수 전제 조건이 없습니다.
QueueFull "서비스 사용할 수 없음" 오류가 발생했습니다(HTTP 오류 503). 응용 프로그램 요청 대기열이 꽉 찼기 때문에 서비스를 사용할 수 없습니다.
RequestLength 요청 길이 한계를 초과했습니다.
Timer_AppPool 서버 응용 프로그램이 대기열에서 가져와 요청을 처리할 때까지 요청이 응용 프로그램 풀 대기열에서 너무 오랫 동안 대기했기 때문에 연결이 만료되었습니다. 이 제한 시간은ConnectionTimeout입니다. 기본적으로 이 값은 2분으로 설정됩니다.
Timer_ConnectionIdle 연결이 만료되어 계속 유휴 상태로 있습니다. 기본 ConnectionTimeout 시간은 2분입니다.
Timer_EntityBody 요청 엔터티 본문이 도착하기 전에 연결이 만료되었습니다. 요청에 엔터티 본문이 있는 경우 HTTP API는 Timer_EntityBody 타이머를 켭니다. 처음에는 이 타이머의 제한이 ConnectionTimeout값(보통 2분)으로 설정됩니다. 이 요청에서 다른 데이터 표시가 수신될 때마다 HTTP API는 타이머를 재설정하여 연결에 추가적인 2분(또는 ConnectionTimeout에 지정된 시간)을 더 제공합니다.
Timer_HeaderWait 요청에 대한 머리글 구문 분석을 수행하는 데 기본 제한인 2분보다 많이 소요되었기 때문에 연결이 만료되었습니다.
Timer_MinBytesPerSecond 클라이언트가 적절한 속도로 응답을 받지 못했기 때문에 연결이 만료되었습니다. 응답 전송 속도가 기본값인 240바이트/초보다 느렸습니다.
Timer_Response 예약됨. 현재 사용되고 있지 않습니다.
URL URL을 처리하는 동안 구문 분석 오류가 발생했습니다.
URL_Length URL이 허용되는 최대 크기를 초과했습니다.
Verb 동사를 처리하는 동안 구문 분석 오류가 발생했습니다.
Version_N/S 지원되지 않는 버전 오류가 발생했습니다(HTTP 오류 505).

 

 

출처 : MS ( http://support.microsoft.com/kb/820729/ko#appliesto )

반응형

'연구개발 > Etc..' 카테고리의 다른 글

윈도우 보안취약점 보완 강화  (0) 2011.05.04
페이스북 소셜 앱 개발 가이드 2011  (0) 2011.03.28
자동 링크걸기 함수  (0) 2010.03.16
사이트 주소 추출  (0) 2010.03.16
LINQ정리분  (0) 2009.09.06

+ Recent posts