다음을 통해 공유


시나리오 1: ETW 추적 및 Netsh 명령을 사용하는 HTTP 시간 제한 예제

ETW 추적을 통해 HTTP Server API 구성 요소를 통한 데이터 흐름을 검사하여 문제를 진단할 수 있습니다. 예를 들어 웹 애플리케이션 사용자는 브라우저에서 웹 페이지가 표시할 수 없는 오류 메시지를 볼 수 있습니다. 웹 애플리케이션을 호스팅하는 서버에서 IT 전문가는 아래 그림 1과 같이 HTTP 오류 로그 내에서 연결 시간 제한 항목도 확인합니다. HTTP 오류 로그는 다음 디렉터리에서 찾을 수 있습니다. %windir%\System32\LogFiles\HTTPERR\.

시간 제한에 대한 H T T P 오류 로그를 표시하는 netsh H T T P 명령 창을 보여 주는 스크린샷

그림 1: 시간 제한에 대한 HTTP 오류 로그

ETW 추적 보고서 생성

HTTP Server API 구성 요소에 대한 ETW 추적 보고서를 생성하려면 명령 프롬프트에서 아래 단계를 실행합니다. 이 예제에서는 추적이 웹 애플리케이션을 호스팅하므로 서버에서 실행됩니다.

아래 단계에서는 httptrace.etl이라는 추적을 생성한 다음 추적을 httptrace.csv이라는 CSV 파일로 변환합니다. 아래와 같이 HTTP Server API에 대한 ETW 공급자를 Microsoft-Windows-HttpService라고 합니다. 0xFFF 명령줄 옵션은 이 공급자에 대한 모든 ETW 이벤트를 캡처해야 임을 나타냅니다.

ETW 추적 보고서 생성

  1. HTTP Server API 구성 요소에 대한 ETW 추적 시작: logman.exe microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets -p httptrace를 시작합니다.
  2. 추적에서 캡처할 수 있도록 문제를 재현합니다. 이 예제에서는 클라이언트 컴퓨터에서 웹 애플리케이션에 액세스하여 "페이지가 클라이언트에 표시되는" 페이지를 표시할 수 없습니다.
  3. 이제 문제가 재현되었으므로 추적을 중지합니다. logman.exe httptrace –ets 중지합니다.
  4. 보고서를 CSV 형식으로 변환합니다. tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
  5. 추적 보고서를 봅니다. CSV 추적에서 발췌한 내용은 아래 표 1에 나와 있습니다.

추적 및 진단 보기

추적에 대한 결과 CSV 파일은 Excel 또는 CSV 형식을 지원하는 모든 도구에서 볼 수 있습니다. 아래 표 1에서는 샘플 추적 파일에서 발췌한 내용(httptrace.csv)을 보여 줍니다. 추적 보고서에서 "수준" 열에는 ETW의 경고에 해당하는 값이 "3"인 항목이 표시됩니다. HTTP Server API 구성 요소는 System ETW 공급자 이벤트 키워드 수준 설정정의된 ETW 수준을 따릅니다. ETW 수준은 다음과 같습니다.

수준 의미
1 비판적인
2 오류
3 경고
4 Infomational
5 자세한

 

이 경고와 함께 이벤트 유형(형식 열)은 "ConnTimedOut"을 보고합니다. ConnTimeOut 이벤트에 대한 후속 열에서 만료된 특정 타이머는 "Timer_ConnectionIdle"로 보고됩니다. "Timer_ConnectionIdle" 항목이 있는 열은 간결하고 연속되지 않은 열을 발췌하지 않도록 테이블에 포함되지 않습니다.

이벤트 이름 이벤트 ID 버전 채널 수준
EventTrace 머리글 0 2 0 0
Microsoft-Windows-HttpService ChgUrlGrpProp 28 0 16 4
Microsoft-Windows-HttpService AddUrl 31 0 16 4
Microsoft-Windows-HttpService ChgReqQueueProp 30 0 16 4
Microsoft-Windows-HttpService ChgUrlGrpProp 28 0 16 4
Microsoft-Windows-HttpService ChgSrvSesProp 29 0 16 4
Microsoft-Windows-HttpService ChgSrvSesProp 29 0 16 4
Microsoft-Windows-HttpService ConnConnect 21 0 16 4
Microsoft-Windows-HttpService ConnIdAssgn 22 0 16 4
Microsoft-Windows-HttpService RecvReq 1 0 16 4
Microsoft-Windows-HttpService 구문 분석 2 0 16 4
Microsoft-Windows-HttpService LogFileWrite 51 0 16 4
Microsoft-Windows-HttpService ConnCleanup 24 0 16 4
Microsoft-Windows-HttpService ConnTimedOut 53 0 16 3

 

표 1: 타이머 문제에 대한 샘플 추적 보고서에서 발췌한 내용

이 예제에서 헤더 타이머(Timer_ConnectionIdle)의 만료(ConnTimeOut 이벤트)는 최종 사용자가 웹 클라이언트에서 "페이지를 표시할 수 없음" 메시지를 표시하는 이유입니다. 시간 제한의 잠재적인 이유는 느린 연결로 인해 웹 클라이언트가 느리게 전송되기 때문일 수 있습니다. 이 문제를 해결하기 위해 Netsh 명령을 통해 시간 제한 값을 조정할 수 있습니다.

Netsh를 통해 시간 제한 조정 및 솔루션 확인

아래에 나열된 HTTP용 Netsh 명령을 사용하면 IT 전문가가 HTTP Server API 구성 요소에서 설정 값을 보고 구성할 수 있습니다. Netsh HTTP 명령을 통한 변경 내용은 해당 컴퓨터의 HTTP 서버 API 구성 요소에서 호스트하는 모든 서버 애플리케이션에 영향을 줍니다. 이러한 변경 내용은 구성 요소를 다시 시작하고 컴퓨터를 다시 부팅할 때 지속됩니다. Netsh HTTP 명령은 Windows Vista 및 Windows Server 2008에서 사용할 수 있으며 Windows Vista 및 Windows Server 2008에서 실행할 때 Windows Server 2003 리소스 키트의 HttpCfg.exe 도구를 대체합니다. 이 시나리오에서는 시간 제한 값을 조정한 다음 솔루션을 확인합니다. 타이머는 HTTP Server API 구성 요소에 존재하여 가용성을 보장하고 잘못 구성되었거나 악의적인 사용자에 의한 초과합을 방지합니다. 기본값에서 타이머를 조정하는 것은 잠재적인 DoS 공격에 대해 신중하게 평가되어야 합니다.

이 예제에서는 웹 클라이언트가 느린 네트워크 연결 뒤에 있으므로 Timer_ConnectionIdle ETW 이벤트가 발생합니다. 시간 제한의 원인과 서버 부하에 미치는 영향과의 분산을 고려한 후에는 시간 제한 값을 240초 값으로 늘리기로 결정합니다. 다음 절차를 사용하여 타이머를 보고 구성할 수 있습니다.

Netsh 사용하여 유휴 연결 타이머(Timer_ConnectionIdle) 구성

  1. 서버에서 관리자 권한 명령 창을 열고 아래 단계를 실행하여 시간 제한 값을 보고 구성합니다. Netsh HTTP 명령의 스크린샷은 아래 그림 2에 나와 있습니다.
  2. 현재 시간 제한 값 표시: Netsh http show timeout
  3. Timer_ConnectionIdle 시간 제한 값을 구성합니다. 이 예제에서는 값이 240초로 변경됩니다. Netsh http add timeout timeouttype=idleconnectiontimeout value=240

netsh http 명령 창

그림 2: Netsh HTTP 명령 창

시간 제한 값을 구성한 후 ETW 진단 단계를 다시 실행합니다. 오류 조건이 수정되면 ETW 추적은 연결 유휴 타이머에 대한 ETW 수준이 "3"인 시간 제한을 더 이상 표시하지 않아야 합니다.