基本概念
トランザクション
Section titled “トランザクション”jvmguardでは、トランザクションとは、タイミングを計測したいメソッド呼び出しのことです。jvmguardは呼び出しのタイミングを記録し、それを識別するトランザクション名を構築します。
トランザクションの命名は、jvmguard UIに表示される内容に大きな影響を与えます。
- トランザクションが何によって起動されたかを理解できるようになります。
- 同じトランザクション名を持つすべての呼び出しをグループ化するため、計測の粒度が決まります。
- 不要なオペレーションを除外するフィルターの基準としても機能します。
jvmguardはどのメソッド呼び出しがユーザーにとって重要かを知ることができないため、トランザクションの設定は、アプリケーションを監視対象としてセットアップする上で重要な部分です。トランザクションは、jvmguard UIで直接、またはコード内のアノテーションで、対象のメソッドを選択して定義します。
例えば、サービスメソッドの呼び出しを計測したい場合があります。デフォルトでは、トランザクション名はクラス名とメソッド名ですが、メソッドパラメータの値やインスタンスに対するgetter呼び出しの結果などの命名要素から構成できます。これにより、分析にとって重要なデータで呼び出しをグループ化できます。
インターセプトされた呼び出しの一部が不要な場合は、それらに関連付けられる名前に基づいてトランザクションを破棄できます。生成されるトランザクション名の種類が多すぎる場合、jvmguardは個別の名前の数に上限を設け、この状態を修正する方法を説明した受信トレイメッセージを送信します。
記録されたトランザクションから、jvmguardはコールツリーとホットスポットを構築し、実際にどこで時間が使われているかを表示します。
トランザクションにはポリシーが関連付けられています。ポリシーは次を決定します。
- トランザクションの許容されるタイミング
- エラーの検出方法と処理方法
ポリシーで違反された条件ごとに、jvmguard UIでトランザクションの詳細を個別に確認できます。例えば、低速なトランザクションやエラーになったトランザクションを、同じ名前の他の通常のトランザクションと累積せずに、個別に調査できます。
jvmguardはメソッドをインスツルメントすることで、監視対象アプリケーションから情報を取得します。オーバーヘッドを低く保つため、トランザクション定義に含まれるメソッドのみがインスツルメントされます。ポリシー違反にさらに深い分析が必要な場合は、トリガーを設定して、違反したVMのプロファイリングキャプチャを取得できます。
jvmguardのもう1つの基本的なデータソースは、ヒープサイズやスレッド数などのスカラー値の定期的なサンプリングです。各テレメトリは、時間経過に沿ったグラフとしてプロットできます。jvmguardでは、テレメトリは多くの場合スパークラインとして表示され、軸は定義されず、末尾に現在値が付きます。
jvmguardには、JVMのよく知られたサブシステムからデータを収集する標準テレメトリが多数用意されています。さらに、MBeanによって公開される整数値もjvmguardで監視できます。プログラムレベルでは、@Telemetryアノテーションを使用して、数値を返すstaticメソッドにカスタムテレメトリを定義できます。
テレメトリごとに異なる期待値を持つことがあります。例えば、ヒープ使用量はベースラインを中心に変動することが多く、継続的な増加はアプリケーションのバグの兆候です。
あるいは、ライブスレッドの数は、マシンの容量から導かれる上限を下回っている必要があります。
異常な状態を検出するには、オプションの下限とオプションの上限を持つしきい値を定義します。しきい値違反はVMごと、またはVMグループごとにカウントされます。アクションは関連付けられていません。単一のしきい値違反にはアクションを実行せず、そのような状態が連鎖した場合にのみ対応したいことがあります。
トランザクションとテレメトリの両方が異常な状態につながる可能性があります。トランザクションポリシーは低速なトランザクションを識別でき、テレメトリのしきい値が違反されることもあります。
これらの状態に対応するには、トリガーを使用します。トリガーはVMごとのレベルでは動作せず、VMグループに再帰的に含まれるすべてのVMを処理します。グループ階層内の各VMグループには、それぞれ個別のトリガーがあります。
例えば、すべてのVMを対象に、接続中のVM数が20を下回ったときに発火するトリガーを定義できます。同じVM階層に、データベースVMのみを含むグループがあるとします。そのグループには、接続中のデータベースVM数が3を下回ったときに発火する個別のトリガーが必要になるかもしれません。
トリガーが発火すると、アクションのリストを実行します。アクションは、JFR記録、ヒープダンプ、スレッドダンプなどのプロファイリングキャプチャを取得することも、メール、Webhook、受信トレイメッセージ、イベントログへのエントリによる通知を送信することもできます。