EtwTracking 샘플은 워크플로 서비스에서 WF(Windows Workflow Foundation) 추적을 사용하도록 설정하고 ETW(Windows용 이벤트 추적)에서 추적 이벤트를 내보내는 방법을 보여 줍니다. 워크플로 추적 레코드를 ETW로 내보내기 위해 샘플에서는 ETW 추적 참가자(EtwTrackingParticipant)를 사용합니다.
샘플의 워크플로는 요청을 수신하고 입력 데이터의 상호를 입력 변수에 할당한 다음 다시 클라이언트에 상호 반환합니다. 입력 데이터가 0일 때, 처리되지 않은 0으로 나누기 예외가 발생하여 워크플로가 중단됩니다. 추적을 사용하도록 설정하면 오류 추적 레코드가 ETW로 내보내지며 나중에 오류를 해결하는 데 도움이 될 수 있습니다. ETW 추적 참가자는 추적 레코드를 구독하도록 추적 프로필로 구성됩니다. 추적 프로필은 Web.config 파일에 정의되고 ETW 추적 참가자에게 구성 매개 변수로 제공됩니다. ETW 추적 참가자는 워크플로 서비스의 Web.config 파일에서 구성되며 서비스 동작으로 서비스에 적용됩니다. 이 샘플에서는 이벤트 뷰어를 사용하여 이벤트 로그에서 추적 이벤트를 봅니다.
워크플로 추적 세부 정보
Windows Workflow Foundation은 워크플로 인스턴스의 실행을 추적하는 추적 인프라를 제공합니다. 추적 런타임은 워크플로 수명 주기, 워크플로 활동의 이벤트 및 사용자 지정 이벤트와 관련된 이벤트를 내보내는 워크플로 인스턴스를 만듭니다. 다음 표에서는 추적 인프라의 기본 구성 요소에 대해 자세히 설명합니다.
구성 요소 | 설명 |
---|---|
런타임 추적 | 추적 레코드를 내보내는 인프라를 제공합니다. |
참가자 추적 | 추적 레코드에 액세스합니다. .NET Framework 4.6.1은 추적 레코드를 ETW(Windows용 이벤트 추적) 이벤트로 기록하는 추적 참가자와 함께 제공됩니다. |
추적 프로필 | 추적 참가자가 워크플로 인스턴스에서 내보낸 추적 레코드의 하위 집합을 구독할 수 있도록 하는 필터링 메커니즘입니다. |
다음 표에서는 워크플로 런타임에서 내보내는 추적 레코드에 대해 자세히 설명합니다.
추적 기록 | 설명 |
---|---|
워크플로 인스턴스 추적 레코드입니다. | 워크플로 인스턴스의 수명 주기를 설명합니다. 예를 들어 워크플로가 시작되거나 완료되면 인스턴스 레코드가 내보내집니다. |
활동 상태 추적 레코드입니다. | 활동 실행 세부 사항. 이러한 레코드는 활동이 예약되었을 때, 완료되었을 때, 또는 오류가 발생했을 때와 같은 워크플로 작업의 상태를 나타냅니다. |
책갈피 재개 기록입니다. | 워크플로 인스턴스 내의 책갈피가 다시 시작될 때마다 내보내집니다. |
사용자 지정 추적 레코드입니다. | 워크플로 작성자가 사용자 지정 추적 레코드를 만들고 사용자 지정 작업 내에서 내보낼 수 있습니다. |
ActivityScheduledRecord | 이 레코드는 활동이 다른 활동을 예약할 때 내보내집니다. |
FaultPropagationRecord | 이 레코드는 작업에서 오류가 전파될 때 내보내집니다. |
CancelRequestedRecord | 이 레코드는 다른 활동에 의해 활동이 취소될 때 내보내집니다. |
추적 참가자는 추적 프로필을 사용하여 내보낸 추적 레코드의 하위 집합을 구독합니다. 추적 프로필에는 특정 추적 레코드 형식에 대한 구독을 허용하는 추적 쿼리가 포함되어 있습니다. 추적 프로필은 코드 또는 구성에서 지정할 수 있습니다.
이 샘플을 사용하려면
Visual Studio를 사용하여 EtwTrackingParticipantSample.sln 솔루션 파일을 엽니다.
Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.
솔루션을 실행하려면 F5 키를 누릅니다.
기본적으로 서비스는 포트 53797(
http://localhost:53797/SampleWorkflowService.xamlx
)에서 수신 대기합니다.파일 탐색기를 사용하여 WCF 테스트 클라이언트를 엽니다.
WCF 테스트 클라이언트(WcfTestClient.exe)는 Visual Studio 설치 폴더<\Common7\IDE\ 폴더에 있습니다>.
기본 Visual Studio 설치 폴더는 C:\Program Files\Microsoft Visual Studio 10.0입니다.
WCF 테스트 클라이언트의 파일 메뉴에서 서비스 추가를 선택합니다.
입력 상자에 엔드포인트 주소를 추가합니다. 기본값은
http://localhost:53797/SampleWorkflowService.xamlx
입니다.이벤트 뷰어 애플리케이션을 엽니다.
서비스를 호출하기 전에 시작 메뉴에서 이벤트 뷰어를 시작하고 실행을 선택하고 입력합니다
eventvwr.exe
. 이벤트 로그가 워크플로 서비스에서 내보낸 추적 이벤트를 수신 대기하는지 확인합니다.이벤트 뷰어의 트리 보기에서 이벤트 뷰어, 애플리케이션 및 서비스 로그 및Microsoft로 이동합니다. Microsoft를 마우스 오른쪽 단추로 클릭하고 보기를 선택한 다음 분석 및 디버그 로그를 표시하여 분석 및 디버그 로그를 사용하도록 설정합니다.
분석 및 디버그 로그 표시 옵션이 선택되어 있는지 확인합니다.
이벤트 뷰어의 트리 보기에서 이벤트 뷰어, 애플리케이션 및 서비스 로그, Microsoft, Windows, Application Server-Applications로 이동합니다. 분석을 마우스 오른쪽 단추로 클릭하고 로그 사용을 선택하여 분석 로그를 사용하도록 설정합니다.
두 번 클릭하여 WCF 테스트 클라이언트를 사용하여 서비스를 테스트합니다
GetData
.그러면 메서드가
GetData
열립니다. 요청은 하나의 매개 변수를 수락하고 값이 기본값인 0인지 확인합니다.호출을 클릭하세요.
워크플로에서 내보낸 이벤트를 관찰합니다.
이벤트 뷰어로 다시 전환하고 이벤트 뷰어, 애플리케이션 및 서비스 로그, Microsoft, Windows, Application Server-Applications로 이동합니다. 분석을 마우스 오른쪽 단추로 클릭하고 새로 고침을 선택합니다.
워크플로 이벤트는 이벤트 뷰어에 표시됩니다. 워크플로 실행 이벤트가 표시되고 그 중 하나는 워크플로의 오류에 해당하는 처리되지 않은 예외입니다. 또한 워크플로 활동에서 경고 이벤트가 발생하며, 이는 활동이 오류를 일으키고 있음을 나타냅니다.
오류가 발생하지 않도록 0이 아닌 데이터를 입력하여 9단계와 10단계를 다시 수행합니다.
추적 프로필을 사용하면 워크플로 인스턴스의 상태가 변경될 때 런타임에서 내보낸 이벤트를 구독할 수 있습니다. 모니터링 요구 사항에 따라 대략적인 프로필을 만들 수 있으며, 이는 워크플로의 소수의 주요 상태 변경에 구독합니다. 반면에 출력이 풍부한 매우 정확한 프로필을 만들어 나중에 실행을 다시 구성할 수 있습니다. 샘플은 워크플로 런타임에서 ETW로 내보내는 이벤트를 HealthMonitoring Tracking Profile
를 사용하여 시연하며, 이는 작은 이벤트 집합을 내보냅니다. 더 많은 워크플로 추적 이벤트를 내보내는 다른 프로필도 이름이 지정된 Troubleshooting Tracking Profile
Web.config 제공됩니다. .NET Framework 4.6.1이 설치되면 빈 이름의 기본 프로필이 Machine.config 파일에 구성됩니다. 이 프로필은 프로필 이름이나 빈 프로필 이름이 지정되지 않은 경우 ETW 추적 동작 구성에서 사용됩니다.
상태 모니터링 추적 프로필은 워크플로 인스턴스 레코드 및 활동 오류 전파 레코드를 내보낸다. 이 프로필은 다음 추적 프로필을 Web.config 구성 파일에 추가하여 만듭니다.
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
구성을 다음으로 변경 EtwTrackingParticipant
하여 프로필을 변경할 수 있습니다.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
정리하려면(선택 사항)
이벤트 뷰어를 엽니다.
이벤트 뷰어, 애플리케이션 및 서비스 로그, Microsoft, Windows, Application Server-Applications로 이동합니다. 분석을 마우스 오른쪽 단추로 클릭하고 로그 사용 안 함을 선택합니다.
이벤트 뷰어, 애플리케이션 및 서비스 로그, Microsoft, Windows, Application Server-Applications로 이동합니다. 분석을 마우스 오른쪽 단추로 클릭하고 로그 지우기를 선택합니다.
[지우기] 옵션을 선택하여 이벤트를 지웁니다.
알려진 문제
비고
이벤트 뷰어에서 ETW 이벤트를 디코딩하지 못할 수 있는 알려진 문제가 있습니다. 다음과 같은 오류 메시지가 표시 될 수 있습니다.
원본 Microsoft-Windows-Application Server-Applications 이벤트 ID <> 에 대한 설명을 찾을 수 없습니다. 이 이벤트를 발생시킨 구성 요소가 로컬 컴퓨터에 설치되어 있지 않거나 설치가 손상되었습니다. 로컬 컴퓨터에 구성 요소를 설치하거나 복구할 수 있습니다.
이 오류가 발생하면 작업 창에서 새로 고침을 클릭합니다. 이제 이벤트가 제대로 디코딩됩니다.
참고하십시오
.NET