다음을 통해 공유


서비스 추적 뷰어를 사용하여 상관 관계 추적 보기 및 문제 해결

이 항목에서는 추적 데이터의 형식, 데이터를 보는 방법 및 서비스 추적 뷰어를 사용하여 애플리케이션 문제를 해결하는 방법을 설명합니다.

서비스 추적 뷰어 도구 사용

WCF(Windows Communication Foundation) 서비스 추적 뷰어 도구를 사용하면 WCF 수신기에서 생성된 진단 추적의 상관 관계를 지정하여 오류의 근본 원인을 찾을 수 있습니다. 이 도구를 사용하면 WCF 서비스에서 문제를 진단, 복구 및 확인할 수 있도록 추적을 쉽게 보고, 그룹화하고, 필터링할 수 있습니다. 이 도구를 사용하는 방법에 대한 자세한 내용은 서비스 추적 뷰어 도구(SvcTraceViewer.exe)를 참조하세요.

이 항목에는 서비스 추적 뷰어 도구(SvcTraceViewer.exe)를 사용하여 볼 때 추적 및 메시지 로깅 샘플을 실행하여 생성된 추적의 스크린샷이 포함되어 있습니다. 이 항목에서는 추적 콘텐츠, 활동 및 상관 관계를 이해하는 방법과 문제 해결 시 많은 수의 추적을 분석하는 방법을 보여 줍니다.

추적 콘텐츠 보기

추적 이벤트에는 다음과 같은 가장 중요한 정보가 포함됩니다.

  • 설정 시 활동 이름입니다.

  • 배출 시간.

  • 추적 수준입니다.

  • 원본 이름 추적.

  • 프로세스 이름

  • 스레드 ID입니다.

  • 추적과 관련된 자세한 정보를 제공하는 Microsoft 기술 참조를 가리키는 URL인 고유한 추적 식별자입니다.

이러한 모든 내용은 서비스 추적 뷰어의 오른쪽 위 패널 또는 추적을 선택할 때 오른쪽 아래 패널의 서식이 지정된 보기의 기본 정보 섹션에서 볼 수 있습니다.

비고

클라이언트와 서비스가 동일한 컴퓨터에 있는 경우 두 애플리케이션에 대한 추적이 모두 표시됩니다. 프로세스 이름 열을 사용하여 필터링할 수 있습니다.

또한 서식이 지정된 보기는 추적에 대한 설명과 사용 가능한 경우 추가 세부 정보를 제공합니다. 후자는 예외 유형 및 메시지, 호출 스택, 메시지 작업, 시작/시작 필드 및 기타 예외 정보를 포함할 수 있습니다.

XML 보기에서 유용한 xml 태그에는 다음이 포함됩니다.

  • <SubType> (추적 수준).

  • <TimeCreated>;

  • <Source> (추적 원본 이름).

  • <Correlation> (추적을 내보낼 때 설정된 활동 ID).

  • <Execution> (프로세스 및 스레드 ID).

  • <Computer>;

  • <ExtendedData>, <Action>, <MessageID>, 및 메시지를 보낼 때 메시지 헤더에 설정된 <ActivityId>을 포함하는 집합입니다.

"채널을 통해 메시지 보내기" 추적을 검사하면 다음 콘텐츠가 표시 될 수 있습니다.

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
   <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
      <EventID>262163</EventID>
      <Type>3</Type>
      <SubType Name="Information">0</SubType>
      <Level>8</Level>
      <TimeCreated SystemTime="2006-08-04T18:45:30.8491051Z" />
      <Source Name="System.ServiceModel" />
       <Correlation ActivityID="{bbbb1111-cc22-3333-44dd-555555eeeeee}"/>
       <Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
       <Channel />
       <Computer>TEST1</Computer>
   </System>
   <ApplicationData>
       <TraceData>
          <DataItem>
             <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
                 <TraceIdentifier>http://msdn.microsoft.com/library/System.ServiceModel.Channels.MessageSent.aspx</TraceIdentifier>
                 <Description>Sent a message over a channel.</Description>
                 <AppDomain>client.exe</AppDomain>
                 <Source>System.ServiceModel.Channels.ClientFramingDuplexSessionChannel/35191196</Source>
                <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTransmitTraceRecord">

                  <MessageProperties>
                     <AllowOutputBatching>False</AllowOutputBatching>
                  </MessageProperties>
                  <MessageHeaders>
                     <Action d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://Microsoft.ServiceModel.Samples/ICalculator/Multiply</Action>
                     <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:7c6670d8-4c9c-496e-b6a0-2ceb6db35338</MessageID>
                     <ActivityId CorrelationId="aaaa0000-bb11-2222-33cc-444444dddddd" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">bbbb1111-cc22-3333-44dd-555555eeeeee</ActivityId>
                     <ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
                        <Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
                    </ReplyTo>
                    <To d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">net.tcp://localhost/servicemodelsamples/service</To>
                  </MessageHeaders>
                  <RemoteAddress>net.tcp://localhost/servicemodelsamples/service</RemoteAddress>
                </ExtendedData>
            </TraceRecord>
          </DataItem>
       </TraceData>
   </ApplicationData>
</E2ETraceEvent>

ServiceModel E2E - 추적

추적 소스가 Off가 아닌 다른 것으로 설정되었을 때, WCF는 WCF 처리를 위한 활동 및 전송을 생성합니다.

활동은 해당 처리 단위와 관련된 모든 추적을 그룹화한 처리의 논리적 단위입니다. 예를 들어 각 요청에 대해 하나의 활동을 정의할 수 있습니다. 전송은 엔드포인트 내의 활동 간에 인과 관계를 만듭니다. 활동 ID를 전파하면 엔드포인트 간에 활동을 연결할 수 있습니다. 이 작업은 모든 엔드포인트에서 구성을 설정 propagateActivity=true 하여 수행할 수 있습니다. 활동, 전송 및 전파를 사용하면 오류 상관 관계를 수행할 수 있습니다. 이러한 방식으로 오류의 근본 원인을 더 빠르게 찾을 수 있습니다.

클라이언트에서 각 개체 모델 호출(예: Open ChannelFactory, 추가, 나누기 등)에 대해 하나의 WCF 작업이 만들어집니다. 각 작업 호출은 "프로세스 작업" 작업에서 처리됩니다.

추적 및 메시지 로깅 샘플에서 추출된 다음 스크린샷의 왼쪽 패널에는 생성 시간별로 정렬된 클라이언트 프로세스에서 만든 활동 목록이 표시됩니다. 다음은 활동 시간순 목록입니다.

  • 채널 팩터리(ClientBase)를 생성했습니다.

  • 채널 팩터리를 열었습니다.

  • 추가 작업을 처리했습니다.

  • 보안 세션을 설정하고(첫 번째 요청에서 발생) RST, RSTR, SCT(프로세스 메시지 1, 2, 3)의 세 가지 보안 인프라 응답 메시지를 처리했습니다.

  • 빼기, 곱하기 및 나누기 요청을 처리했습니다.

  • 채널 팩터리를 닫고 보안 세션을 닫고 보안 메시지 응답 취소를 처리했습니다.

wsHttpBinding으로 인해 보안 인프라 메시지가 표시됩니다.

비고

WCF에서는 전송을 통해 요청 메시지를 포함하는 해당 프로세스 작업 작업과 상호 연결하기 전에 처음에 별도의 작업(프로세스 메시지)에서 처리되는 응답 메시지를 보여 줍니다. 이는 인프라 메시지 및 비동기 요청에 대해 발생하며, 메시지를 검사하고, activityId 헤더를 읽고, 해당 ID를 사용하여 기존 프로세스 작업 작업을 식별하여 상관 관계를 지정해야 하기 때문입니다. 동기 요청의 경우 응답을 차단하므로 응답과 관련된 프로세스 작업을 알고 있습니다.

다음 이미지는 생성 시간(왼쪽 패널)과 중첩된 작업 및 추적(오른쪽 위 패널)에 의해 나열된 WCF 클라이언트 활동을 보여 줍니다.

생성 시간별로 나열된 WCF 클라이언트 활동을 보여 주는 스크린샷

왼쪽 패널에서 활동을 선택하면 오른쪽 위 패널에서 중첩된 활동 및 추적을 볼 수 있습니다. 따라서 선택한 부모 활동에 따라 왼쪽에 있는 활동 목록의 계층적 보기가 줄어듭니다. 선택한 프로세스 작업 추가가 첫 번째 요청이므로 이 작업에는 보안 세션 설정 작업(이전, 다시 전송) 및 추가 작업의 실제 처리에 대한 추적이 포함됩니다.

왼쪽 패널에서 프로세스 작업 추가 작업을 두 번 클릭하면 추가와 관련된 클라이언트 WCF 작업의 그래픽 표현을 볼 수 있습니다. 왼쪽의 첫 번째 작업은 기본 작업인 루트 작업(0000)입니다. WCF는 주변 활동 영역에서 벗어난 상태로 전송됩니다. 정의되지 않은 경우 WCF는 0000에서 전송됩니다. 여기서 두 번째 작업인 프로세스 작업 추가는 0에서 전송됩니다. 그런 다음 보안 세션 설정이 표시됩니다.

다음 이미지는 WCF 클라이언트 활동, 특히 앰비언트 작업(여기 0), 프로세스 작업 및 보안 세션 설정에 대한 그래프 보기를 보여 줍니다.

앰비언트 작업 및 프로세스 작업을 보여 주는 추적 뷰어의 그래프입니다.

오른쪽 위 패널에서 프로세스 작업 추가 작업과 관련된 모든 추적을 볼 수 있습니다. 특히 요청 메시지("채널을 통해 메시지 보내기")를 보내고 동일한 활동에서 응답("채널을 통해 메시지 수신")을 받았습니다. 다음 그래프에 표시됩니다. 명확하게 하기 위해 보안 세션 설정 작업은 그래프에서 축소됩니다.

다음 이미지는 프로세스 작업 작업에 대한 추적 목록을 보여 줍니다. 요청을 보내고 동일한 활동에서 응답을 받습니다.

프로세스 작업 작업에 대한 추적 목록을 보여 주는 추적 뷰어의 스크린샷

여기서는 명확성을 위해서만 클라이언트 추적을 로드하지만, 서비스 추적(수신된 요청 메시지 및 응답 메시지 전송)도 도구 propagateActivity 에 로드되고 이 항목으로 설정된 true. 경우 동일한 작업에 표시됩니다. 이는 이후 그림에 나와 있습니다.

서비스에서 활동 모델은 다음과 같이 WCF 개념에 매핑됩니다.

  1. ServiceHost를 구성하고 엽니다(예를 들어 보안의 경우 여러 호스트 관련 활동을 만들 수 있음).

  2. ServiceHost의 각 수신기에 대한 수신 대기 활동(Open ServiceHost 내/외부 전송 포함)을 만듭니다.

  3. 수신기가 클라이언트에서 시작한 통신 요청을 감지하면 클라이언트에서 보낸 모든 바이트가 처리되는 "수신 바이트" 활동으로 전송됩니다. 이 활동에서는 클라이언트-서비스 상호 작용 중에 발생한 모든 연결 오류를 볼 수 있습니다.

  4. 메시지에 해당하는 수신된 각 바이트 집합에 대해 WCF 메시지 개체를 만드는 "메시지 처리" 작업에서 이러한 바이트를 처리합니다. 이 활동에서는 잘못된 봉투 또는 잘못된 형식의 메시지와 관련된 오류가 표시됩니다.

  5. 메시지가 형성되면 프로세스 작업 작업으로 전송됩니다. 클라이언트와 서비스 모두에서 propagateActivitytrue로 설정된 경우, 이 활동은 클라이언트에 정의된 것과 동일한 ID를 가지며 이전에 설명되었습니다. 이 단계에서는 요청과 관련된 WCF에서 내보낸 모든 추적이 응답 메시지 처리를 포함하여 동일한 활동에 있기 때문에 엔드포인트 간 직접 상관 관계를 활용하기 시작합니다.

  6. Out-of-process의 경우, 우리는 사용자 코드에서 발생하는 추적을 WCF에서 발생하는 추적과 분리하기 위해 '사용자 코드 실행' 액티비티를 생성합니다. 앞의 예제에서 "서비스가 응답 추가를 보냅니다" 추적은 클라이언트가 전파한 작업이 아닌 "사용자 코드 실행" 작업에서 내보내집니다(해당하는 경우).

다음 그림에서 왼쪽의 첫 번째 작업은 기본 작업인 루트 작업(0000)입니다. 다음 세 가지 작업은 ServiceHost를 여는 것입니다. 열 5의 활동은 수신기이며 나머지 작업(6~8)은 바이트 처리에서 사용자 코드 활성화에 이르는 메시지의 WCF 처리를 설명합니다.

다음 이미지는 WCF 서비스 활동의 그래프 보기를 보여 줍니다.

WCF 서비스 활동 목록을 보여 주는 추적 뷰어의 스크린샷

다음 스크린샷은 클라이언트와 서비스 모두에 대한 활동을 보여 줍니다. 프로세스 간 작업 추가 작업(주황색)을 강조 표시합니다. 화살표는 클라이언트와 서비스에서 보내고 받은 요청 및 응답 메시지를 연결합니다. 프로세스 작업의 추적은 그래프의 프로세스 간에 구분되지만 오른쪽 위 패널에 동일한 작업의 일부로 표시됩니다. 이 패널에서는 보낸 메시지에 대한 클라이언트 추적과 수신 및 처리된 메시지에 대한 서비스 추적을 볼 수 있습니다.

다음 이미지는 WCF 클라이언트 및 서비스 활동 모두에 대한 그래프 보기를 보여 줍니다.

WCF 클라이언트 및 서비스 활동을 모두 보여 주는 추적 뷰어의 그래프입니다.

다음 오류 시나리오에서는 서비스와 클라이언트의 오류 및 경고 추적이 관련되어 있습니다. 서비스에서 발생하는 예외는 먼저 사용자 코드에서 던져집니다. 이 예외는 '서비스는 사용자 코드에서 이 요청을 처리할 수 없습니다.'라는 경고 추적을 포함하고 있으며, 가장 오른쪽에 있는 녹색 활동으로 표시됩니다. 응답이 클라이언트로 전송되면 오류 메시지(왼쪽 분홍색 활동)를 나타내기 위해 경고 추적이 다시 내보내집니다. 그런 다음 클라이언트는 WCF 클라이언트(왼쪽 아래의 노란색 작업)를 닫고 서비스에 대한 연결을 중단합니다. 서비스는 오류를 발생시킵니다(오른쪽에 가장 오래된 분홍색 활동).

추적 뷰어 사용

서비스 및 클라이언트 간 오류 상관 관계

이러한 추적을 생성하는 데 사용되는 샘플은 wsHttpBinding을 사용하는 일련의 동기 요청입니다. 보안이 없거나 비동기 요청이 있는 시나리오의 경우 이 그래프의 편차가 있습니다. 여기서 프로세스 작업 작업은 비동기 호출을 구성하는 시작 및 종료 작업을 포함하고 콜백 작업으로의 전송을 표시합니다. 추가 시나리오에 대한 자세한 내용은 끝To-End 추적 시나리오를 참조하세요.

서비스 추적 뷰어를 사용하여 문제 해결

서비스 추적 뷰어 도구에서 추적 파일을 로드할 때 왼쪽 패널에서 빨간색 또는 노란색 작업을 선택하여 애플리케이션에서 문제의 원인을 추적할 수 있습니다. 000 활동에는 일반적으로 처리되지 않은 예외가 사용자에게 노출될 수 있습니다.

다음 이미지는 문제의 근본 원인을 찾기 위해 빨간색 또는 노란색 활동을 선택하는 방법을 보여 줍니다. 문제의 근본 원인을 찾기 위한 빨간색 또는 노란색 활동의 스크린샷

오른쪽 위 패널에서 왼쪽에서 선택한 활동에 대한 추적을 검사할 수 있습니다. 그런 다음 해당 패널에서 빨간색 또는 노란색 추적을 검사하고 상관 관계를 확인할 수 있습니다. 이전 그래프에서는 동일한 프로세스 작업 작업에서 클라이언트와 서비스에 대한 경고 추적을 모두 볼 수 있습니다.

이러한 추적이 오류의 근본 원인을 제공하지 않는 경우 왼쪽 패널에서 선택한 작업을 두 번 클릭하여 그래프를 활용할 수 있습니다(여기 프로세스 작업). 그런 다음 관련 활동이 있는 그래프가 표시됩니다. 그런 다음 관련 활동을 확장하여("+" 기호를 클릭하여) 관련 활동에서 첫 번째 내보낸 추적을 빨간색 또는 노란색으로 찾을 수 있습니다. 문제의 근본 원인을 추적할 때까지, 끝점에서 관련 활동이나 메시지 흐름으로 전환되기 전 관심 있는 빨간색 또는 노란색 추적 직전에 발생한 활동을 계속 분석합니다.

추적 뷰어 사용

문제의 근본 원인을 추적하기 위한 활동 확장

ServiceModel ActivityTracing 이 꺼져 있지만 ServiceModel 추적이 켜진 경우 0000 작업에서 내보낸 ServiceModel 추적을 볼 수 있습니다. 그러나 이러한 추적의 상관 관계를 이해하려면 더 많은 노력이 필요합니다.

메시지 로깅을 사용하는 경우 메시지 탭을 사용하여 오류의 영향을 받는 메시지를 확인할 수 있습니다. 메시지를 빨간색 또는 노란색으로 두 번 클릭하면 관련 활동의 그래프 보기를 볼 수 있습니다. 이러한 활동은 오류가 발생한 요청과 가장 밀접한 관련이 있습니다.

메시지 로깅을 사용하도록 설정된 추적 뷰어의 스크린샷

문제 해결을 시작하려면 빨간색 또는 노란색 메시지 추적을 선택하고 두 번 클릭하여 근본 원인을 추적할 수도 있습니다.

참고하십시오