コンテンツにスキップ

OTelトランザクション

アプリケーションがすでにOpenTelemetryまたはMicrometerのトレーシングアノテーションを使用している場合、 jvmguardは追加の設定なしでそれらをトランザクションに変換できます。“OTel”トランザクションタイプは次を マッピングします:

  • メソッドの io.opentelemetry.instrumentation.annotations.WithSpan
  • メソッドおよびクラスの io.micrometer.observation.annotation.Observed

これらのアノテーションは、OpenTelemetryまたはMicrometerを使用するアプリケーションでは、トレーシング バックエンドが接続されていなくてもすでに存在していることがよくあります。@WithSpanはOpenTelemetry エージェントまたはSpringスターターがある場合にのみ有効になり、@ObservedはクラスパスにMicrometer AOP がある場合にのみ有効になるためです。jvmguardはアノテーションを名前だけで一致判定するため、 アノテーションが機能している必要はなく、使用されていない場合のオーバーヘッドもありません。

トランザクション記録設定の“OTel”タブには、事前設定されたOTelトランザクション定義があります。他の トランザクション定義と同様に、編集、並べ替え、破棄、削除が可能です。削除しても再作成されません。

デフォルトでは、トランザクションはアノテーションのスパン名属性(@WithSpanではvalue、@Observedでは contextualName)で命名されます。属性が空の場合、トランザクション名はClassName.methodNameになります。 これはOpenTelemetry自体のデフォルトのスパン名でもあります。“命名”タブで、他のトランザクション定義と 同様に命名を変更できます。

スパン名によるフィルタリング

Section titled “スパン名によるフィルタリング”

OTelトランザクション定義の“フィルター”タブには、クラスフィルターに加えて“スパン名”フィールドがあります。 スパン名が設定されたワイルドカードまたは正規式に一致するアノテーションのみがトランザクションを生成します。 スパン名属性のないアノテーションはスパン名フィルターに一致しません。

他のトランザクションタイプとの重複

Section titled “他のトランザクションタイプとの重複”

メソッドはサポートされるアノテーションを複数持つことができます。重複するトランザクションを避けるため、 次のルールが適用されます:

  • メソッドに@MethodTransactionアノテーションがある場合、宣言型トランザクションのみが作成されます。
  • メソッドに@WithSpanと@Observedの両方がある場合(メソッド自体、または外側のクラスのクラスレベルの@Observedを介して)、@WithSpanのトランザクションのみが作成されます。
  • メソッドに直接付けられたアノテーションは、外側のクラスのクラスレベルの@Observedより優先されます。

OTelログレコードとしてのキャプチャイベント

Section titled “OTelログレコードとしてのキャプチャイベント”

キャプチャ(ヒープダンプ、スレッドダンプ、JFRスナップショット、JProfiler記録)が取得されると、エージェントは監視対象アプリケーションのOpenTelemetry SDKのログブリッジを通じてOTelログレコードを発行するため、キャプチャは既存のOTelパイプラインでトレースと並んで表示されます。これはトリガーアクションで 発火したキャプチャにも、UIやREST APIで手動で取得したキャプチャにも適用されます。

エージェントはOpenTelemetry APIをリフレクションで呼び出すため、特別なセットアップは不要です。アプリケーションのクラスパスにOpenTelemetry APIが ない場合、何も発行されず、エージェントログに1行だけ書き込まれます。

ログレコードの重大度は、トリガーを発火させたポリシーイベントから導出されます:エラーイベントはERROR、非常に低速および期限超過イベントはWARN、 それ以外(手動キャプチャを含む)はINFOです。ログレコードには次の属性が含まれます:

  • jvmguard.capture.type: heap_dump、thread_dump、jfr_snapshotまたはjprofiler_recording
  • jvmguard.capture.origin: triggerまたはmanual
  • jvmguard.vm.name: 監視対象VMの名前
  • jvmguard.trigger: キャプチャを発火させたトリガーの説明
  • jvmguard.transaction.name: トリガーの発火に最後に寄与したポリシーイベントを持つトランザクション
  • jvmguard.policy.event: そのトランザクションのポリシーイベントタイプ(SLOWやVERY_SLOWなど)

最後の2つの属性はポリシートリガーで発火したキャプチャにのみ存在します。トリガーは発火するまでに複数のトランザクションからイベントを蓄積する可能性が あるため、これらは最も多く寄与したトランザクションではなく、最も最近イベントを追加したトランザクションを示します。

発行をオフにするには、トリガー記録設定の「キャプチャイベントをOTelログレコードとして発行」チェックボックスをオフにします。 このチェックボックスはルートグループにのみ表示され、フリート全体に適用されます。トリガーはグループ階層で追加的に 適用されるため、グループごとのスイッチでは発行を確実に範囲指定できません。