다음을 통해 공유


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

추적 및 진단 보기

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

Level 의미
1 위험
2 오류
3 경고
4 Infomational
5 자세히

 

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

이벤트 이름 형식 이벤트 ID 버전 채널 Level
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"인 시간 제한을 더 이상 표시하지 않아야 합니다.