エンドツーエンドのトレースの相関のためのアクティビティ トレースと伝達
ここでは、アクティビティ トレースと伝達を使用してデバッグを支援する方法について説明します。
アクティビティ トレースの概要
Windows Communication Foundation (WCF) には、デバッガを使用せずにアプリケーションのトラブルシューティングを行うためのインストルメンテーション機能が用意されています。WCF の診断には、イベント、トレース、アクティビティ トレース (トレースに含まれます)、およびメッセージ ログの 4 つのコンポーネントがあります。
診断機能 | 対象ユーザー | 目的 |
---|---|---|
イベント |
IT 専門家 |
システムで発生した重大なエラーを表示します。 |
トレース |
IT 専門家と開発者 |
問題の診断や適切な動作の検証を行うために、さまざまな詳細出力レベルでシステムの肯定的イベントと否定的イベントの両方を表示します。 |
メッセージ ログ |
IT 専門家と開発者 |
問題の診断や適切な動作の検証を行うために、ネットワーク上を通過する実際のメッセージや、ユーザー コードにディスパッチされた実際のメッセージのログを表示します。 |
アクティビティ トレース (トレース機能のサブセット) |
IT 専門家と開発者 |
エラーの根本原因を突き止めるために、トレースの相関を活用します。 |
ここでは、アクティビティ トレースについて重点的に説明します。アクティビティ トレースを使用すると、ユーザーはエラーの根本原因の診断に役立つトレースの相関を利用できます。WCF には、アクティビティ、伝達、および転送の 3 つの相関機構が用意されています。
アクティビティ
アクティビティは、ユーザーがエラーの範囲を絞り込む上で役立つ処理単位です。同じアクティビティで発生したエラーは直接関連します。たとえば、メッセージを復号化できなかったために、ある操作が失敗したとします。この操作とメッセージ復号化失敗のトレースは同じアクティビティ内に表示され、復号化エラーと要求エラーの間の直接相関関係が示されます。WCF には、アプリケーションを処理するための定義済みアクティビティが用意されています。また、ユーザー トレースをグループ化するために、アクティビティをプログラムによって定義することもできます。
実行時にアクティビティ トレースを出力するには、次の構成コードに示すように、System.ServiceModel または他のカスタム トレース ソースの ActivityTracing 設定を使用します。
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
使用する構成要素と属性の詳細については、「トレースの構成」を参照してください。
アクティビティ トレースは、WCF のトレース ソースやユーザー定義のトレース ソースなど、すべてのトレース ソースで有効にすることができます。
アクティビティは、WCF の処理が開始される前に、(System.Diagnostics を使用して) ユーザー コード内で定義できます。このようなアクティビティは、アンビエント アクティビティと呼ばれます。
アクティビティとそのユーティリティは、Service Trace Viewer Toolで表示できます。このツールはトレースを取得し、アクティビティに基づいてトレースを並べ替えます。ActivityTracing が有効になっている場合、トレース転送も確認できます。トレース転送は、さまざまなアクティビティが相互にどのように関連しているかを示します。これにより、特定のアクティビティによって別のアクティビティが開始されたことを確認できます。たとえば、Secure Conversation トークンを取得するために、あるメッセージ要求によってセキュリティ ハンドシェイクが開始されたことを確認できます。詳細およびサービス トレース ビューア ツールのグラフィック表示については、「Service Trace Viewer Tool」および「サービス トレース ビューアを使用した相関トレースの表示とトラブルシューティング」を参照してください。
伝達
伝達により、ユーザーは、アプリケーション エンドポイント全体にわたって同じ処理単位 (要求など) のエラー トレースを直接関連付けることができます。さまざまなエンドポイントで出力された同じ処理単位 (要求など) のエラーは、アプリケーション ドメインをまたぐ場合でも同じアクティビティ内にグループ化されます。これは、メッセージ ヘッダー内のアクティビティ ID を伝達することによって実現されます。したがって、サーバーで内部エラーが発生したためにクライアントがタイムアウトした場合、直接的な相関関係を示すために、両方のエラーが同じアクティビティ内に表示されます。
これを行うには、前述の例に示すように ActivityTracing 設定を使用します。さらに、System.ServiceModel トレース ソースの propagateActivity 属性を設定します。
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity=”true” >
アクティビティの伝達は構成可能な機能です。この機能を構成すると、WCF は TLS のアクティビティ ID が含まれたヘッダーを送信メッセージに追加します。サーバー側の以降のトレースでこの ID を含めることにより、クライアントとサーバーのアクティビティを相互に関連付けることができます。
転送
アクティビティ間の転送は、エンドポイント内の関連アクティビティで発生したイベント間の因果関係を表します。2 つのアクティビティ間のフローを制御するときに、転送によってこれらのアクティビティが関連付けられます (アクティビティの境界を越えたメソッド呼び出しなど)。WCF では、サービスでバイトを受信すると、"リッスン" アクティビティが "バイトを受信" アクティビティに転送され、このアクティビティでメッセージ オブジェクトが作成されます。
転送トレースを出力するには、前述の例に示すように、トレース ソースで ActivityTracing 設定を使用します。
エンド ツー エンドのトレースのシナリオの一覧、および各シナリオの個々のアクティビティとトレース デザインについては、「エンドツーエンドのトレースのシナリオ」を参照してください。
E2E トレース モデル
このセクションでは、アクティビティとその境界の定義、伝達を使用したエンドポイント間でのアクティビティの関連付け、転送を使用したエンドポイント内でのアクティビティの関連付け、およびアクティビティ プロファイリングについて説明します。また、アクティビティ トレースの全種類の概要、および各種トレースを組み合わせて有効なトレース シーケンスを形成する方法についても説明します。
アクティビティ
定義とスコープ
アクティビティには、ローカル識別子とグローバル識別子があります。アクティビティはデザイン時に定義され、作業の論理単位を示します。同じアクティビティ識別子を使用して出力されたトレースは直接関連し、同じアクティビティに含まれます。アクティビティはエンドポイントの境界を越えることができるため (要求など)、アクティビティには 2 つのスコープが定義されています。
- グローバル スコープ (アプリケーションごと)。このスコープでは、アクティビティは 128 ビットの、グローバルに一意なアクティビティ識別子 (gAId) によって識別されます。gAId は、エンドポイント全体にわたって伝達されます。
- ローカル スコープ (トレース ソースとプロセスごと)。このスコープでは、アクティビティは、gAId、アクティビティ トレースを出力するトレース ソース名、およびプロセス ID によって識別されます。この 3 つの組み合わせによって、ローカル アクティビティ ID (lAId) が構成されます。lAId は、アクティビティの (ローカル) 境界の定義に使用されます。
アクティビティは、lAId={ProcessId, TraceSourceName, gAId} によってトレース ソースに対してローカルに識別され、gAId によってアプリケーション内でグローバルに識別されます。
スキーマ
トレースはスキーマを使用して出力できます。Microsoft プラットフォーム間では、"e2e" ("エンド ツー エンド" の略) スキーマと呼ばれる共通スキーマが使用されます。このスキーマには、トレース ソースとプロセス内で一意の 128 ビット識別子 (アクティビティ識別子)、トレース ソース名、およびプロセス ID が含まれます。アクティビティ識別子 (AID) により、出力されたトレースを相互に関連付けることができます。これは、同じ AID を使用して出力されたトレースは同じアクティビティに含まれるため、直接関連するからです。マネージ コードでは、XmlWriterTraceListener が e2e スキーマでトレースを出力します。
開発者は、スレッド ローカル ストレージ (TLS) の GUID を使用して ActivityId プロパティを設定することにより、トレースで出力する AID を設定できます。次に例を示します。
// set the current Activity ID to a new GUID.
CorrelationManager.ActivityId = Guid.NewGuid();
次の例に示すように、トレース ソースを使用してトレースを出力すると、TLS での gAId の設定が明確に示されます。
TraceSource traceSource = new TraceSource("myTraceSource");
traceSource.TraceEvent(TraceEventType.Warning, eventId, "Information");
出力されるトレースには、TLS の現在の gAId、トレース ソースのコンストラクタにパラメータとして渡されるトレース ソース名、および現在のプロセスの ID が含まれます。
サービス トレース ビューアでのアクティビティの関連付け
次のように、サービス トレース ビューア ツールには、アクティビティの 2 つのビューが用意されています。
- リスト ビュー : gAId を使用して、トレース ソースとプロセス全体にわたり、トレースを直接関連付けます。トレース ソースは異なっても (クライアントとサービスなど)、gAId が同じであるトレースは、同じアクティビティ内にグループ化されます。したがって、サービスで発生したエラーによってクライアントでエラーが発生した場合、ツールの同じアクティビティ ビューに両方のエラーが表示されることになります。
- グラフ ビュー : アクティビティは、プロセスごとにグループ化されます。このビューでは、gAId が同じで lAId が異なるクライアントとサービス (クライアントとサービスが 2 つの異なるプロセスに存在するため) のトレースは、それぞれ別のアクティビティに含まれます。別々のプロセスに含まれる同じ gAId を持つアクティビティを相互に関連付けるために、ツールでは関連アクティビティ間のメッセージ フローが示されます。
アクティビティの有効期間
- Start: アクティビティの開始を示します。"Start" トレースは、新しい処理マイルストーンの開始を記録します。同じトレース ソース名 (System.ServiceModel など) を使用し、同じプロセス内で実行されるエンドポイント間でアクティビティ ID が伝達される場合を除き、このトレースには、特定のプロセスの特定のトレース ソースの新しい AID が常に含まれます。新しいアクティビティの開始の例として、新しい処理スレッドの作成や、新しいパブリック メソッドの入力などがあります。
- Stop: アクティビティの終了を示します。"Stop" トレースは、既存の処理マイルストーンの終了を記録します。同じトレース ソース名 (System.ServiceModel など) を使用し、同じプロセス内で実行されるエンドポイント間でアクティビティ ID が伝達される場合を除き、このトレースには、特定のプロセスの特定のトレース ソースの新しい AID が常に含まれます。アクティビティの停止の例として、処理スレッドの終了や、"Start" トレースによって開始が示されたメソッドの終了などがあります。
- Suspend: アクティビティの処理の中断を示します。"Suspend" トレースには、後で処理を再開することが予想される既存の AID が含まれます。中断イベントと再開イベントの間に、現在のトレース ソースからこの AID を使用してトレースが出力されることはありません。中断の例として、外部ライブラリ関数の呼び出し時、または I/O 完了ポートなどのリソースで待機する際のアクティビティの一時停止などがあります。
- Resume: アクティビティの処理の再開を示します。"Resume" トレースには、現在のトレース ソースから最後に出力されたトレースが "Suspend" トレースであった既存の AID が含まれます。再開の例として、外部ライブラリ関数の呼び出しからの復帰や、I/O 完了ポートなどのリソースによって処理の再開が通知された場合などがあります。
- Transfer: アクティビティの中には、他のアクティビティによって発生するものや、他のアクティビティに関連するものがあるため、"Transfer" トレースを使用してアクティビティを他のアクティビティに関連付けることができます。転送により、アクティビティ間の直接の関係が記録されます。
アクティビティ トレースを使用するためのガイドライン
ActivityTracing トレース (Start、Stop、Suspend、Resume、および Transfer) を使用する際のガイドラインを以下に示します。
- トレースは、ツリーではなく循環有向グラフです。前述の例に示すように、あるアクティビティを発生させたアクティビティに制御を戻すことができます。
- アクティビティは処理の境界を示します。処理の境界は、システム管理者にとって重要であり、サポートを容易にする上でも役立ちます。
- WCF の各メソッド (クライアントとサーバーの両方) は、新しいアクティビティを開始し、(処理の終了後に) その新しいアクティビティを終了した後、アンビエント アクティビティに戻ることによって境界が設定されます。
- 接続のリッスンやメッセージの待機など、長時間にわたって実行される (継続中の) アクティビティは、対応する開始マーカーと終了マーカーによって表されます。
- メッセージの受信または処理によって起動されるアクティビティは、トレースの境界によって表されます。
- アクティビティは、オブジェクトではなく、アクティビティを表します。アクティビティは、"~のときに. . (有効なトレース出力が発生したときに) これが発生していた" と解釈する必要があります。
Start と Stop を使用したアクティビティ境界のマーク付け
最も厳密な意味では、アクティビティの形跡は、出力されたトレースで lAId が初めて使用されたときに始まり、出力されたトレースで lAId が最後に使用されたときに終わります。
アクティビティの期間は、出力されたトレースで lAId が初めて使用されたときに始まり、出力されたトレースで lAId が最後に使用されたときに終わります。System.Diagnostics には、トレースの種類の定義済みセットが用意されています。アクティビティ境界を明示的にマークするには、Start トレースと Stop トレースを使用します。
Start - アクティビティの開始
"Start" トレースは、新しい処理マイルストーンの開始を記録します。同じトレース ソース名 (System.ServiceModel など) を使用し、同じプロセス内で実行されるエンドポイント間でアクティビティ ID が伝達される場合を除き、このトレースには、特定のプロセスの特定のトレース ソースを表す新しい lAId が常に含まれます。それ以外の場合は、同じエンドポイント間で同じ gAId が何度も伝達されます ("WCF セキュリティの設定" アクティビティなど)。要求が同期かつ順次である場合にのみ、後者を実行することをお勧めします。このような場合には、各エンドポイントについて同じ gAId を持つ Start トレース (および Stop トレース) が表示されます。伝達の詳細については、「伝達」セクションを参照してください。WCF は、Start トレースを通じてアクティビティの名前を設定します。
新しいアクティビティの開始の例として、新しい処理スレッドの作成や、新しいパブリック メソッドの入力などがあります。
Stop - アクティビティの終了
"Stop" トレースは、既存の処理マイルストーンの終了を記録します。同じトレース ソース名 (System.ServiceModel など) を使用し、同じプロセス内で実行されるエンドポイント間でアクティビティ ID が伝達される場合を除き、このトレースには、特定のプロセスの特定のトレース ソースを表す、再び出現することのない lAId が常に含まれます。それ以外の場合は、同じエンドポイント間で同じ gAId が何度も伝達されます ("WCF セキュリティの設定" アクティビティ)。要求が同期かつ順次である場合にのみ、後者を実行することをお勧めします。このような場合には、各エンドポイントについて同じ gAId を持つ Start トレース (および Stop トレース) が表示されます。伝達の詳細については、「伝達」のセクションを参照してください。
- アクティビティの停止の例として、処理スレッドの終了や、"Start" トレースによって開始が示されたメソッドの終了などがあります。
関連付けのために gAId がエンドポイント間で伝達された場合、その gAId を持つ、各トレース ソースの Start トレースと Stop トレースが存在することになります。
Start トレースと Stop トレースの使用
Start トレースと Stop トレースは、関連付けにとっては重要ではありません。ただし、これらのトレースは、パフォーマンスの向上、プロファイリング、およびアクティビティ スコープの検証に役立ちます。
同じアクティビティの直接関連するイベントを検出するときや、転送トレースを追跡する場合に関連アクティビティのイベントを検出するときに、ツールはこれらのトレースを使用して、トレース ログのナビゲーションを最適化することができます。たとえば、ツールが Start/Stop トレースを確認したときに、特定のアクティビティのログの解析を中止できます。
ツールは、アクティビティ識別子として lAId を使用しますが、gAId を使用すると、読み込まれたファイル全体にわたり関連アクティビティを特定できます。
Start/Stop トレースは、プロファイリングに使用することもできます。開始マーカーと終了マーカーの間で使用されるリソースは、論理アクティビティを含むアクティビティの包括的時間を表します。Suspend トレースから Resume トレースまでの時間間隔を減算することで、アクティビティの実際の時間がわかります。
Stop トレースは、実装済みのアクティビティのスコープを検証する際に特に役立ちます。特定のアクティビティ内ではなく Stop トレースの後に出現する処理トレースがある場合、これはコードの欠陥を示している可能性があります。
Start トレースと Stop トレースは、トレース ソースの ActivityTracing 属性が設定されている場合に出力されます。
伝達を使用したエンドポイント間でのアクティビティの関連付け
アクティビティにより、トレース ソースに対してローカルである同じ処理単位に関連するトレースを直接関連付けることができます。WCF では、エンドポイント全体にわたる処理の同じ論理単位 (要求など) に含まれるトレースを関連付けるために、gAId が伝達されます。関連付けを行うときに、個々のエンドポイント内の同じ gAId を持つアクティビティのトレースを同じアクティビティにマージできます。
次のすべての条件に該当する場合に、アクティビティ M の gAId がアクティビティ N に伝達されます。
- M に起因して N が作成された。
- M の gAId を N が認識している。
- N の gAId と M の gAId が同じである。
次の XML スキーマに示すように、gAId は ActivityId メッセージ ヘッダーによって伝達されます。
<xsd:element name=”ActivityId” type=”integer” minOccurs=”0”>
<xsd:attribute name=”CorrelationId” type=”integer” minOccurs=”0”/>
</xsd:element>
メッセージ ヘッダーの例を次に示します。
<MessageLogTraceRecord>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.ServiceModel.Samples/ICalculator/Subtract
</a:Action>
<a:MessageID>urn:uuid:f0091eae-d339-4c7e-9408-ece34602f1ce
</a:MessageID>
<ActivityId CorrelationId="f94c6af1-7d5d-4295-b693-4670a8a0ce34"
xmlns="https://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">
17f59a29-b435-4a15-bf7b-642ffc40eac8
</ActivityId>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous
</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.tcp://localhost/servicemodelsamples/service</a:To>
</s:Header>
<s:Body>
<Subtract xmlns="http://Microsoft.ServiceModel.Samples">
<n1>145</n1>
<n2>76.54</n2>
</Subtract>
</s:Body>
</s:Envelope>
</MessageLogTraceRecord>
伝達とアクティビティ境界
System.ServiceModel では、ユーザーが両方の側の構成で propagateActivity を true に設定した場合に、アクティビティ ID がエンドポイント間で伝達されます。
エンドポイント間でアクティビティ ID が伝達されると、メッセージの受信側は、その (伝達された) アクティビティ ID を使用して Start トレースと Stop トレースを出力します。したがって、各トレース ソースごとに、該当の gAId を持つ Start/Stop トレースが存在することになります。複数のエンドポイントが同じプロセス内に存在し、同じトレース ソース名を使用している場合、同じ lAId (同じ gAId、同じトレース ソース、同じプロセス) を持つ複数の Start と Stop が作成されます。
同期
メッセージ ヘッダーで ActivityId の Correlation 属性を設定することにより、コンピュータ間でのエンドポイント トレースの同期を有効にできます。
異なるコンピュータ上で実行されるエンドポイント間でイベントを同期するには、メッセージ内で伝達される ActivityId ヘッダーに CorrelationId を追加します。ツールはこの ID を使用することにより、クロックにずれのあるコンピュータ間でもイベントを同期できます。具体的に言うと、サービス トレース ビューア ツールは、エンドポイント間のメッセージ フローを示す際に、この ID を使用します。
転送を使用したエンドポイント内でのアクティビティの関連付け
アクティビティ M とアクティビティ N の間に制御のフローが存在する場合、転送トレースは M から N に出力されます。たとえば、メソッド呼び出しがアクティビティの境界を越えるため、N が M に代わって何らかの処理を実行するとします。
N は既に存在する場合もあれば、作成されている場合もあります。N が、M に代わって何らかの処理を実行する新しいアクティビティである場合、N は M によって発生します。
M から N への転送の後に、N から M に転送することはできません。これは、M は N で処理を発生させることはできますが、N がその処理をいつ完了するかまでは追跡しないからです。実際、N がタスクを完了する前に M は終了できます。このような状況は、リスナのアクティビティ (N) を発生させた後に終了する "ServiceHost を開く" アクティビティ (M) で発生します。
N から M への転送は、N が M に関連する処理を完了したことを意味します。
N は、M に関連しない他の処理を引き続き実行できます。たとえば、既存の認証システム アクティビティ (N) は、さまざまなログイン アクティビティからのログイン要求 (M) を受信し続けることができます。
アクティビティ間の転送は、関連アクティビティのイベント間の因果関係を示します。アクティビティと転送により、ユーザーはエラーの根本原因をほぼ突き止めることができます。たとえば、コンポーネント M と N のアクティビティ M と N の間で、M から N および N から M への転送を行い、M への転送の直後に N でクラッシュが発生した場合、N から M にデータを返したことが原因でクラッシュが発生した可能性があるという結論を下すことができます。
アクティビティ M と N の間に、入れ子のリレーションシップが必ずしも存在するわけではありません。入れ子のリレーションシップが存在しない状況が発生する原因として、2 つのケースが考えられます。1 つは、アクティビティ M が アクティビティ N を開始したが、N で実行された実際の処理を M が監視していない場合です。もう 1 つは、N が既に存在する場合です。
転送の 2 つの例を次に示します。
- サービス ホストの作成時に、コンストラクタは呼び出し元のコードから制御を取得します。つまり、呼び出し元のコードがコンストラクタに転送されます。コンストラクタが実行を完了すると、呼び出し元のコードに制御を戻します。つまり、コンストラクタは呼び出し元のコードに転送されます。これは、入れ子になったリレーションシップの例です。
- リスナはトランスポート データの処理を開始するときに、新しいスレッドを作成し、"バイトを受信" アクティビティに処理の適切なコンテキストを渡します。つまり、制御とデータを渡すということです。このスレッドが要求処理を完了しても、"バイトを受信" アクティビティからリスナには何も渡されません。この場合、新しいスレッドのアクティビティへの転送はありますが、このアクティビティからの転送はありません。2 つのアクティビティは関連していますが、入れ子にはなっていません。
アクティビティ転送シーケンス
適切なアクティビティ転送シーケンスには、以下の手順が含まれます。
- 新しい gAId を選択して、新しいアクティビティを開始します。
- 現在のアクティビティ ID から、選択した新しい gAId に転送トレースを出力します。
- TLS に新しい ID を設定します。
- Start トレースを出力して、新しいアクティビティの開始を示します。
- 以下の手順を実行して、元のアクティビティに戻ります。
- 元の gAId に転送トレースを出力します。
- Stop トレースを出力して、新しいアクティビティの終了を示します。
- TLS を以前の gAId に設定します。
これを実行する方法を次のコード例に示します。この例は、新しいアクティビティへの転送時にブロック呼び出しが行われることを想定しています。また、Suspend トレースと Resume トレースが含まれています。
// 0. Create a trace source
TraceSource ts = new TraceSource(“myTS”);
// 1. remember existing (“ambient”) activity for clean up
Guid oldGuid = Trace.CorrelationManager.ActivityId;
// this will be our new activity
Guid newGuid = Guid.NewGuid();
// 2. call transfer, indicating that we are switching to the new AID
ts.TraceTransfer(667, "Transferring.", newGuid);
// 3. Suspend the current activity.
ts.TraceEvent(TraceEventType.Suspend, 667, "Suspend: Activity " + i-1);
// 4. set the new AID in TLS
Trace.CorrelationManager.ActivityId = newGuid;
// 5. Emit the start trace
ts.TraceEvent(TraceEventType.Start, 667, "Boundary: Activity " + i);
// trace something
ts.TraceEvent(TraceEventType.Information, 667, "Hello from activity " + i);
// Perform Work
// some work.
// Return
ts.TraceEvent(TraceEventType.Information, 667, "Work complete on activity " + i);
// 6. Emit the transfer returning to the original activity
ts.TraceTransfer(667, "Transferring Back.", oldGuid);
// 7. Emit the End trace
ts.TraceEvent(TraceEventType.Stop, 667, "Boundary: Activity " + i);
// 8. Change the tls variable to the original AID
Trace.CorrelationManager.ActivityId = oldGuid;
// 9. Resume the old activity
ts.TraceEvent(TraceEventType.Resume, 667, "Resume: Activity " + i-1);
トレースの種類の概要
さまざまなトレース レベル (Critical、Error、Warning、Information、Verbose)、およびトレース境界とアクティビティ転送イベントの出力を切り替える ActivityTracing フラグの詳細については、「SourceLevels 列挙体」を参照してください。
System.Diagnostics から出力できるトレースの種類については、「TraceEventType 列挙体」を参照してください。最も重要な種類を次の表に示します。
トレースの種類 | 説明 |
---|---|
Critical |
致命的なエラーまたはアプリケーションのクラッシュ。 |
Error |
回復可能なエラー。 |
Warning |
情報メッセージ。 |
Information |
重大ではない問題。 |
Verbose |
トレースのデバッグ。 |
Start |
処理の論理単位の開始。 |
Suspend |
処理の論理単位の中断。 |
Resume |
処理の論理単位の再開。 |
Stop |
処理の論理単位の停止。 |
Transfer |
相関 ID の変更。 |
アクティビティは、上記のトレースの種類の組み合わせとして定義されます。
ローカル (トレース ソース) スコープでの典型的なアクティビティを定義する正規表現は次のとおりです。
R = Start ( (Critical | Error | Warning | Information | Verbose | Transfer)* (Transfer Suspend Transfer Resume)* )* Stop
これは、アクティビティが次の条件を満たす必要があることを意味します。
- アクティビティは、Start トレースによって開始し、Stop トレースによって停止する必要があります。
- Suspend トレースまたは Resume トレースの直前に Transfer トレースが必要です。
- Suspend トレースと Resume トレースが存在する場合、これらのトレースの間にトレースが存在することはできません。
- 上記の条件を満たしている限り、Critical/Error/Warning/Information/Verbose/Transfer の各トレースはいくつでも含めることができます。
グローバル スコープでの典型的なアクティビティを定義する正規表現は次のとおりです。
R+
R はローカル スコープのアクティビティを表す正規表現です。これは、次のように変化します。
[R+ = Start ( (Critical | Error | Warning | Information | Verbose | Transfer)* (Transfer Suspend Transfer Resume)* )* Stop]+
関連項目
概念
トレースの構成
サービス トレース ビューアを使用した相関トレースの表示とトラブルシューティング
エンドツーエンドのトレースのシナリオ