概要

Error Tracking は、エラースパン上のスタックトレースを使用してエラーにフィンガープリントを付与し、問題にグループ化して発生場所を表示します。このページでは、Error Tracking がスタックトレースのためにどのスパン属性を読み取るか、またそれがサービスの言語やトレーサーのバージョンによってどのように異なるかを説明します。

スタックトレーススパン属性

エラースパンは、そのスタックトレースを error.stack スパン属性 で報告します。ほとんどのトレーサーでは、error.stack にエラーが処理されたとき (例: catch ブロックやミドルウェア) にキャプチャされたスタックトレースが含まれます。これは必ずしもエラーがスローされた場所ではありません。

v2.7.0 以降の dd-trace-go でインスツルメントされた Go サービスの場合、ハンドリングスタックは error.handling_stack 属性で個別に報告されます。この場合、error.stack には、利用可能な場合はエラーがスローされた時点でキャプチャされたスローイングスタックが含まれます。

Error Tracking で使用されるスタックトレース

Go サービスの場合

Go サービスの場合、Error Tracking にはどのスタックトレースを使用するかを決定するためのフォールバックメカニズムがあります。

  • Go トレーサー v2.7.0 以降:
    • スローイングスタックは error.stack で報告されます。このスタックは、利用可能な場合に使用されます。
    • ハンドリングスタックは error.handling_stack で報告されます。このスタックは、スローイングスタックが利用できない場合に使用されます。
  • Go トレーサー v2.7.0 より前:
    • スローイングスタックは error.details で報告されます。このスタックは、利用可能な場合に使用されます。
    • ハンドリングスタックは error.stack で報告されます。このスタックは、スローイングスタックが利用できない場合に使用されます。

その他のすべての言語

その他のすべての言語については、ハンドリングスタックがキャプチャされ、error.stack で報告されます。この属性は、Error Tracking が問題をグループ化し、疑わしいコミットなどの情報を導き出すために使用されます。

参考資料