2017-07-18 7 views
1

AWS X-Rayの例外を記録する際に問題が発生しています。ここでAWS X-Ray .NETでレコード例外MVC

はのApplication_Errorにあるものである:

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 

     if (exception != null) 
     { 
      var InnerException = exception.InnerException; 

      Session["error"] = String.Format("{0} ::: {1}", exception.Message, exception.StackTrace); 
      try 
      { 
       AWSXRayRecorder.Instance.AddException(exception); 
      } 
      catch (Exception ee) 
      { 
       // ignore errors for XRay 
      } 
     } 
     Server.ClearError(); 

    } 

しかし、エラーが

まず時間がX線を取得しようとして「セグメントがCallContextに存在しない」旨のAddExceptionラインにスローされます行く。何かアドバイス?誰かが助けてくれるチュートリアルはありますか?

答えて

2

XRayのデフォルトの動作は、Segmentにアクセスしようとしていて、現在のコンテキストで現在セットアップされていない場合に例外をスローすることです。 default behavior mentioned in the environment variables documentationが表示されます。

このドキュメントで指摘しているように、EC2インスタンスのAWS_XRAY_CONTEXT_MISSING環境変数をLOG_ERRORに設定すると、この動作を調整できます。

また、ContextMissingStrategyプロパティを使用すると、コード内でこの動作を変更できます。 Documentation link

+0

ああ、[OK]を...私は)(Application_BeginRequestでセグメントを開始()とApplication_EndRequestでそれを終了しました。それは動作していませんでした。私は今、これを始末と終わりを、現在働いているAddException()の周りにラップしました。 – Auzzy

+0

.NET Webアーキテクチャーについてはまだまだわかりませんが、Webサーバーコードにプレフィルター(プロキシ)を使用してセグメントを作成し、同じWebサーバーコードにフィルタ(プロキシ)します。 –

2

AWS_XRAY_CONTEXT_MISSINGLOG_ERRORを設定すると、「セグメントが存在しません」例外をスローするためにAddExceptionが停止することがありますが、これは何もXRayサービスに記録されないことを意味します。

実際にこの問題を解決するには、ロジックの先頭にセグメントを作成する必要があります。 ASP.NET Web APIアプリケーションを作成するときに、インターセプタを追加して、着信要求ごとにセグメントを自動的に作成することができます。試すことができるサンプルアプリケーションがあります。

https://github.com/awslabs/aws-xray-dotnet-webapp