Windows のイベント トレースへの追跡イベント
このトピックの内容は、Windows Workflow Foundation 4 に該当します。
このサンプルでは、ワークフロー サービスで Windows Workflow Foundation (WF) 追跡を有効にし、Event Tracing for Windows (ETW) で追跡イベントを出力する方法を示します。ワークフロー追跡レコードを ETW に出力するために、このサンプルでは ETW 追跡参加要素 (EtwTrackingParticipant) を使用します。
このサンプルのワークフローでは、要求を受け取り、入力データの逆数を入力変数に割り当てて、クライアントに逆数を返します。入力データが 0 の場合、処理されない 0 による除算の例外が発生し、ワークフローが中止されます。追跡を有効にすると、エラー追跡レコードが ETW に出力され、後でエラーをトラブルシューティングする際に役立ちます。ETW 追跡参加要素は、追跡レコードをサブスクライブするように追跡プロファイルで構成されています。追跡プロファイルは、Web.config ファイルで定義され、構成パラメーターとして ETW 追跡参加要素に渡されます。ETW 追跡参加要素は、ワークフロー サービスの Web.config ファイルで構成され、サービス動作としてサービスに適用されます。このサンプルでは、イベント ログの追跡イベントをイベント ビューアーを使用して確認します。
ワークフロー追跡の詳細
Windows Workflow Foundation には、ワークフロー インスタンスの実行を追跡できる追跡インフラストラクチャが用意されています。追跡ランタイムは、ワークフロー ライフサイクルに関連するイベント、ワークフロー アクティビティのイベント、およびカスタム イベントを出力するワークフロー インスタンスを作成します。次の表で、追跡インフラストラクチャの主要コンポーネントの詳細を説明します。
コンポーネント | 説明 |
---|---|
追跡ランタイム |
追跡レコードを出力するためのインフラストラクチャを提供します。 |
追跡参加要素 |
追跡レコードにアクセスします。.NET Framework 4 には、追跡レコードを Event Tracing for Windows (ETW) イベントとして書き込む追跡参加要素が用意されています。 |
追跡プロファイル |
ワークフロー インスタンスから出力された追跡レコードのサブセットを追跡参加要素からサブスクライブするためのフィルター機構。 |
次の表で、ワークフロー ランタイムが出力する追跡レコードの詳細を説明します。
追跡レコード | 説明 |
---|---|
ワークフロー インスタンスの追跡レコード |
ワークフロー インスタンスのライフサイクルを表します。たとえば、ワークフローの開始時または完了時にインスタンス レコードが出力されます。 |
アクティビティ状態の追跡レコード |
アクティビティの実行状況を詳しく記録します。これらのレコードは、アクティビティをスケジュールしたとき、アクティビティが完了したとき、エラーがスローされたときなど、ワークフロー アクティビティの状態を示します。 |
ブックマーク再開レコード |
ワークフロー インスタンス内のブックマークが再開されたときに出力されます。 |
カスタム追跡レコード |
ワークフロー作成者はカスタム追跡レコードを作成し、カスタム アクティビティ内で出力できます。 |
このレコードは、アクティビティが別のアクティビティをスケジュールするときに出力されます。 |
|
このレコードは、アクティビティからエラーが伝達されたときに出力されます。 |
|
このレコードは、アクティビティが別のアクティビティによって取り消されたときに出力されます。 |
追跡参加要素は、追跡プロファイルを使用して、出力された追跡レコードのサブセットをサブスクライブします。追跡プロファイルには、特定の追跡レコード タイプをサブスクライブするための追跡クエリが含まれています。追跡プロファイルは、コードで指定したり、構成で指定したりすることができます。
このサンプルを使用するには
Visual Studio 2010 を使用して、EtwTrackingParticipantSample.sln ソリューション ファイルを開きます。
ソリューションをビルドするには、F6 キーを押します。
ソリューションを実行するには、F5 キーを押します。
既定では、サービスはポート 53797 (https://localhost:53797/SampleWorkflowService.xamlx) をリッスンします。
Windows エクスプローラーを使用して、WCF テスト クライアントを開きます。
WCF テスト クライアント (WcfTestClient.exe) は <Visual Studio 2010 のインストール フォルダー>\Common7\IDE\ フォルダーにあります。
Visual Studio 2010 の既定のインストール フォルダーは C:\Program Files\Microsoft Visual Studio 10.0 です。
WCF テスト クライアントで、[ファイル] メニューの [サービスの追加] をクリックします。
入力ボックスにエンドポイントのアドレスを追加します。既定値は https://localhost:53797/SampleWorkflowService.xamlx です。
イベント ビューアー アプリケーションを開きます。
サービスを呼び出す前に、[スタート] ボタン、[ファイル名を指定して実行] の順にクリックし、「eventvwr.exe」と入力してイベント ビューアーを起動します。ワークフロー サービスから生成された追跡イベントをイベント ログでリッスンしていることを確認します。
イベント ビューアーのツリー ビューで、[イベント ビューアー]、[アプリケーションとサービス ログ] の順に選択して [Microsoft] に移動します。[Microsoft] を右クリックし、[表示]、[分析およびデバッグ ログの表示] の順にクリックして、分析ログとデバッグ ログを有効にします。
[分析およびデバッグ ログの表示] オプションがオンになっていることを確認します。
イベント ビューアーのツリー ビューで、[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。[分析] を右クリックし、[ログを有効にする] を選択して [分析] ログを有効にします。
WCF テスト クライアントで、
GetData
をダブルクリックしてサービスをテストします。GetData
メソッドが開きます。この要求はパラメーターを 1 つ受け取ります。値が 0 (既定値) になっていることを確認します。[起動] をクリックします。
ワークフローから出力されたイベントを確認します。
イベント ビューアーに戻り、[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。[分析] を右クリックし、[更新] を選択します。
イベント ビューアーにワークフロー イベントが表示されます。ワークフロー実行イベントが表示され、その中にワークフローのエラーに対応する未処理の例外が含まれていることに注意してください。また、アクティビティがエラーをスローしたことを示す警告イベントもワークフロー アクティビティから出力されます。
エラーがスローされないように入力データを 0 以外にして、手順 9. と 10. を繰り返します。
追跡プロファイルを使用すると、実行時にワークフロー インスタンスの状態が変化したときに生成されるイベントをサブスクライブできます。監視の要件に応じて、ワークフローの主な状態変化の少数のセットをサブスクライブする、大まかなプロファイルを作成できます。それとは反対に、後で実行を十分に再構築できるほど出力が豊富な、詳細なプロファイルを作成することもできます。このサンプルでは、イベントの少数のセットを出力する HealthMonitoring Tracking Profile
を使用して、ワークフロー ランタイムから ETW に出力されるイベントを示します。Web.config には、それよりも多くのワークフロー追跡イベントを出力する Troubleshooting Tracking Profile
という名前の別のプロファイルも用意されています。.NET Framework 4 をインストールすると、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] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。[分析] を右クリックし、[ログの無効化] を選択します。
[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。[分析] を右クリックし、[ログのクリア] を選択します。
[クリア] オプションを選択してイベントをクリアします。
既知の問題
注 : |
---|
イベント ビューアーの既知の問題により、ETW イベントをデコードできない場合があります。その場合、次のようなエラー メッセージが表示されます。 ソース "Microsoft-Windows-Application Server-Applications" からのイベント ID <id> の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが壊れています。ローカル コンピューターにコンポーネントをインストールするか、コンポーネントを修復してください。 このエラーが発生した場合は、操作ウィンドウで [最新の情報に更新] をクリックしてください。これにより、イベントが正常にデコードされます。 |
注 : |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<InstallDrive>:\WF_WCF_Samples
このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。
<InstallDrive>:\WF_WCF_Samples\WF\Basic\Tracking\EtwTracking
|