0

私のプロジェクトではApplicationInsightsHttpModuleが使用されます。は、クライアントUIアプリケーションによって設定されたMicrosoft.ApplicationInsights.RequestTelemetryのHTTP値をOperation.Idから初期化します。今私は私のAPIを私たちの活動を相関させるためにX-Operation-Id HTTPヘッダーを提供する第三者に消費させたいと思います。リクエストに存在する場合、そのヘッダーからOperation.Idを初期化するためにApplication Insightを作成するにはどうすればよいですか?Application Insights Operation HTTPヘッダーから取得

Thisによると、標準コンテキストはAIによって自動的に管理されるため、Operation.Idをカスタム値で正しく初期化する方法を示すコードサンプルが必要です。次のコードは、ヘッダ値は無視され、機能していません。

var operationInitializer = TelemetryConfiguration.Active.TelemetryInitializers.OfType<Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer>().FirstOrDefault(); 

if (operationInitializer != null) 
{ 
     operationInitializer.RootOperationIdHeaderName = "X-Operation-Id"; 
} 
+0

[App Insightsを使用して自動的に生成されたテレメトリに相関IDを追加する]の可能な複製(http://stackoverflow.com/questions/32171747/adding-correlation-id-to-automatically-generated-telemetry-with-app-insights ) –

答えて

0

現時点では、AI SDKにバージョン2.2がありました。最近、私は最新バージョン2.4にアップグレードしました。これは意図したとおりに動作しています。だから、あなたが渡した場合(利用可能であるか、どこHttpContextX-Operation-Id HTTPヘッダに「ハロー」と言う(あなたはまだApplication_Start()で質問にそのコードが必要)、その後Application_BeginRequest()でテレメトリを求める:

RequestTelemetry telemetry = HttpContext.Current.GetRequestTelemetry(); 

telemetry.Idます|HELLO.d0b9d5b7_のようなものが含まれています。 次のリクエストで 'HELLO'を渡すと、その16進数の接尾辞が増えます。したがって、Idは常に一意です。私はそれがオーバーライドできるかどうかわからない。

1

あなたがあなたの質問に含まれるコードは、一目見ただけで作業する必要があります:あなたは正しい初期化子を探して、正しいプロパティをオーバーライドしています。ただし、期待通りに動作しない理由は複数ありますが、実際にApplication Insightsコードに入る必要があるため、デバッグするのは難しいです(決定した場合は、the sources for every release are archived on GH)。

あなたのケースでは、このプロパティをオーバーライドする代わりに独自のテレメトリーイニシャライザを作成して登録して、ヘッダーからOperation.IDを設定するという別のアプローチをとることをお勧めします。このプロパティを設定すると、OperationCorrelationTelemetryInitializerは無視し、オーバーライドしません。これにより、ヘッダーが正しく読み取られることを確認し、Initializeメソッドでブレークポイントを簡単に設定してデバッグすることができます。

+0

私が心配しているのは、イニシャライザ内で*正しく*初期化し、 'HttpContext'にアクセスする方法がわかりません。それはちょうど 'HttpContext.Current'ですか?これはOWINベースのアプリでうまくいくのだろうか? – UserControl

関連する問題