外部 Infinispan メトリクス

外部 Infinispan のパフォーマンスのメトリクス監視について学びます

前提条件

有効化された Infinispan サーバーメトリクス

Infinispan はエンドポイント /metrics でメトリクスを公開します。デフォルトでは、これらは有効になっています。属性 name-as-tags を有効にすることを推奨します。これにより、メトリクス名がキャッシュ名に依存しなくなります。

Infinispan サーバーでメトリクスを構成するには、以下の XML に示すように有効にするだけです。

infinispan.xml
<infinispan>
    <cache-container statistics="true">
        <metrics gauges="true" histograms="false" name-as-tags="true" />
    </cache-container>
</infinispan>

Kubernetes の Infinispan Operator を使用すると、カスタム構成を持つ ConfigMap を使用してメトリクスを有効にできます。以下に例を示します。

ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-config
data:
  infinispan-config.yaml: >
    infinispan:
      cacheContainer:
        metrics:
          gauges: true
          namesAsTags: true
          histograms: false
infinispan.yaml CR
apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  name: infinispan
  annotations:
    infinispan.org/monitoring: 'true' (1)
spec:
  configMapName: "cluster-config" (2)
1 デプロイメントの監視を有効にします
2 カスタム構成を持つ ConfigMap 名を設定します。

追加情報は、Infinispan ドキュメント および Infinispan operator ドキュメントにあります。

クラスタリングとネットワーク

このセクションでは、Infinispan ノード間の通信を監視し、ネットワークの問題を特定するのに役立つメトリクスについて説明します。

グローバルタグ

cluster=<name>

クラスタ名。複数のクラスタからのメトリクスが収集されている場合、このタグはそれらがどのクラスタに属しているかを識別するのに役立ちます。

node=<node>

メトリクスをレポートしているノードの名前。

vendor_jgroups_ で始まるすべてのメトリクス名は、トラブルシューティングとデバッグのみを目的として提供されています。メトリクス名は、予告なしに Keycloak の今後のリリースで変更される可能性があります。したがって、ダッシュボードや監視およびアラートでの使用は推奨されません。

応答時間

以下のメトリクスは、リモートリクエストの応答時間を公開します。応答時間は 2 つのノード間で測定され、処理時間を含みます。すべてのリクエストはこれらのメトリクスによって測定され、応答時間はクラスタのライフサイクルを通じて安定している必要があります。

正常なクラスタでは、応答時間は安定したままです。応答時間の増加は、クラスタの劣化または負荷の高いノードを示している可能性があります。

タグ

node=<node>

送信側ノードを識別します。

target_node=<node>

受信側ノードを識別します。

メトリクス 説明

vendor_jgroups_stats_sync_requests_seconds_count

受信側ノードへの同期リクエストの数。

vendor_jgroups_stats_sync_requests_seconds_sum

受信側ノードへの同期リクエストの合計時間

ヒストグラムが有効になっている場合、パーセンタイルバケットが利用可能です。これらはヒートマップを作成するのに役立ちますが、パーセンタイルバケットを収集および公開すると、デプロイメントのパフォーマンスに悪影響を与える可能性があります。

帯域幅

Infinispan によって受信および送信されたすべてのバイトは、これらのメトリクスによって収集されます。また、ハートビートなどのすべての内部メッセージもカウントされます。これらにより、各ノードで現在使用されている帯域幅を計算できます。

メトリクス名は、使用中の JGroups トランスポートプロトコルによって異なります。
メトリクス プロトコル 説明

vendor_jgroups_tcp_get_num_bytes_received

TCP

ノードによって受信されたバイトの合計数。

vendor_jgroups_udp_get_num_bytes_received

UDP

vendor_jgroups_tunnel_get_num_bytes_received

TUNNEL

vendor_jgroups_tcp_get_num_bytes_sent

TCP

ノードによって送信されたバイトの合計数。

vendor_jgroups_tunnel_get_num_bytes_sent

UDP

vendor_jgroups_tunnel_get_num_bytes_sent

TUNNEL

スレッドプール

スレッドプールのサイズを監視することは、ノードが高負荷状態にあることを示す良い指標です。受信したすべてのリクエストは処理のためにスレッドプールに追加され、いっぱいになるとリクエストは破棄されます。再送信メカニズムは、リソース使用量の増加を伴う信頼性の高い通信を保証します。

正常なクラスタでは、スレッドプールが最大サイズ(デフォルトでは 200 スレッド)に近づくことはありません。
スレッドプールのメトリクスは、仮想スレッドでは利用できません。仮想スレッドは、OpenJDK 21 で実行している場合はデフォルトで有効になっています。
メトリクス名は、使用中の JGroups トランスポートプロトコルによって異なります。デフォルトのトランスポートプロトコルは TCP です。
メトリクス プロトコル 説明

vendor_jgroups_tcp_get_thread_pool_size

TCP

スレッドプール内の現在のスレッド数。

vendor_jgroups_udp_get_thread_pool_size

UDP

vendor_jgroups_tunnel_get_thread_pool_size

TUNNEL

vendor_jgroups_tcp_get_largest_size

TCP

プール内で同時に存在したスレッドの最大数。

vendor_jgroups_udp_get_largest_size

UDP

vendor_jgroups_tunnel_get_largest_size

TUNNEL

フロー制御

フロー制御は、メッセージ送信者のレートを、時間経過とともに最も遅い受信者のレートに調整します。これはクレジットベースのシステムを通じて実装されており、各送信者は送信時にクレジットを減らします。送信者はクレジットが 0 未満になるとブロックされ、受信者から補充メッセージを受信したときにのみメッセージの送信を再開します。

以下のメトリクスは、ブロックされたメッセージの数と平均ブロック時間を示しています。値がゼロ以外の場合、受信者が過負荷状態であり、クラスタのパフォーマンスを低下させている可能性があります。

各ノードには、ユニキャストメッセージ用の UFC とマルチキャストメッセージ用の MFC の 2 つの独立したフロー制御プロトコルがあります。

正常なクラスタは、すべてのメトリクスに対してゼロの値を示します。
メトリクス 説明

vendor_jgroups_ufc_get_number_of_blockings

フロー制御がユニキャストメッセージの送信者をブロックした回数。

vendor_jgroups_ufc_get_average_time_blocked

ユニキャストメッセージを送信しようとしたときにフロー制御でブロックされた平均時間(ミリ秒)。

vendor_jgroups_mfc_get_number_of_blockings

フロー制御がマルチキャストメッセージの送信者をブロックした回数。

vendor_jgroups_mfc_get_average_time_blocked

マルチキャストメッセージを送信しようとしたときにフロー制御でブロックされた平均時間(ミリ秒)。

再送信

JGroups はメッセージの信頼性の高い配信を提供します。メッセージがネットワーク上でドロップされた場合、または受信者がメッセージを処理できない場合、再送信が必要です。再送信はリソース使用量を増やし、通常はシステムが過負荷状態になっていることを示す兆候です。

Random Early Drop (RED) は送信者キューを監視します。キューがほぼいっぱいになると、メッセージはドロップされ、再送信が発生する必要があります。これにより、スレッドが満杯の送信者キューによってブロックされるのを防ぎます。

正常なクラスタは、すべてのメトリクスに対してゼロの値を示します。
メトリクス 説明

vendor_jgroups_unicast3_get_num_xmits

再送信されたメッセージの数。

vendor_jgroups_red_get_dropped_messages

送信者によってドロップされたメッセージの合計数。

vendor_jgroups_red_get_drop_rate

送信者によってドロップされたすべてのメッセージの割合。

ネットワークパーティション

クラスタサイズ

クラスタサイズメトリクスは、クラスタ内に存在するノードの数をレポートします。異なる場合、ノードが参加、シャットダウン、または最悪の場合、ネットワークパーティションが発生していることを示している可能性があります。

正常なクラスタは、すべてのノードで同じ値を示します。
メトリクス 説明

vendor_cluster_size

クラスタ内のノード数。

クロスサイトステータス

クロスサイトステータスは、別のサイトへの接続ステータスをレポートします。オンラインの場合は 1、オフラインの場合は 0 の値を返します。値 2 は、ステータスが不明なノードで使用されます。すべてのノードがリモートサイトへの接続を確立するわけではなく、この情報を含んでいません。

正常なクラスタは、ゼロより大きい値を表示します。
メトリクス 説明

vendor_jgroups_site_view_status

単一サイトのステータス(オンラインの場合は 1)。

タグ

site=<name>

宛先サイトの名前。

ネットワークパーティションイベント

クラスタ内のネットワークパーティションは、さまざまな理由で発生する可能性があります。このメトリクスはネットワーク分割を予測するのに役立ちませんが、発生したこと、およびクラスタがマージされたことを示します。

正常なクラスタは、このメトリクスに対してゼロの値を示します。
メトリクス 説明

vendor_jgroups_merge3_get_num_merge_events

ネットワーク分割が検出および修復された回数。

Infinispan キャッシュ

このセクションのメトリクスは、Infinispan キャッシュのヘルスとクラスタレプリケーションを監視するのに役立ちます。

グローバルタグ

cache=<name>

キャッシュ名。

サイズ

これらの 2 つのメトリクスを使用して、キャッシュ内のエントリ数を監視します。キャッシュがクラスタ化されている場合、各エントリにはオーナーノードと、異なるノードのゼロ以上のバックアップコピーがあります。

ユニークエントリサイズメトリクスを合計して、クラスタの合計エントリ数を取得します。
メトリクス 説明

vendor_statistics_approximate_entries

ノードによって格納されているエントリの概算数(バックアップコピーを含む)。

vendor_statistics_approximate_entries_unique

ノードによって格納されているエントリの概算数(バックアップコピーを除く)。

データアクセス

以下のメトリクスは、キャッシュアクセス(読み取り、書き込み、およびそれらの期間など)を監視します。

ストア

ストア操作は、キャッシュに格納されている値を書き込むまたは更新する書き込み操作です。

メトリクス 説明

vendor_statistics_store_times_seconds_count

ストアリクエストの合計数。

vendor_statistics_store_times_seconds_sum

すべてのストアリクエストの合計時間。

ヒストグラムが有効になっている場合、パーセンタイルバケットが利用可能です。これらはヒートマップを作成するのに役立ちますが、パーセンタイルバケットを収集および公開すると、デプロイメントのパフォーマンスに悪影響を与える可能性があります。

読み取り

読み取り操作は、キャッシュから値を読み取ります。値が見つかった場合はヒット、見つからなかった場合はミスという 2 つのグループに分かれます。

メトリクス 説明

vendor_statistics_hit_times_seconds_count

読み取りヒットリクエストの合計数。

vendor_statistics_hit_times_seconds_sum

すべての読み取りヒットリクエストの合計時間。

vendor_statistics_miss_times_seconds_count

読み取りミスリクエストの合計数。

vendor_statistics_miss_times_seconds_sum

すべての読み取りミスリクエストの合計時間。

ヒストグラムが有効になっている場合、パーセンタイルバケットが利用可能です。これらはヒートマップを作成するのに役立ちますが、パーセンタイルバケットを収集および公開すると、デプロイメントのパフォーマンスに悪影響を与える可能性があります。

削除

削除操作は、キャッシュから値を削除します。値が存在する場合はヒット、値が存在しない場合はミスという 2 つのグループに分かれます。

メトリクス 説明

vendor_statistics_remove_hit_times_seconds_count

削除ヒットリクエストの合計数。

vendor_statistics_remove_hit_times_seconds_sum

すべての削除ヒットリクエストの合計時間。

vendor_statistics_remove_miss_times_seconds_count

削除ミスリクエストの合計数。

vendor_statistics_remove_miss_times_seconds_sum

すべての削除ミスリクエストの合計時間。

ヒストグラムが有効になっている場合、パーセンタイルバケットが利用可能です。これらはヒートマップを作成するのに役立ちますが、パーセンタイルバケットを収集および公開すると、デプロイメントのパフォーマンスに悪影響を与える可能性があります。

ロッキング

書き込みおよび削除操作は、値がローカルクラスタおよびリモートサイトにレプリケートされるまでロックを保持します。

正常なクラスタでは、保持されているロックの数は一定のままですが、デッドロックにより一時的なスパイクが発生する可能性があります。
メトリクス 説明

vendor_lock_manager_number_of_locks_held

このノードによって現在保持されているロックの数。

トランザクション

トランザクショナルキャッシュは、トランザクションを完了するために、One-Phase-Commit および Two-Phase-Commit プロトコルの両方を使用します。これらのメトリクスは、操作時間を追跡します。

PESSMISTIC ロックモードは One-Phase-Commit を使用し、コミットリクエストを作成しません。
正常なクラスタでは、ロールバックの数はゼロのままにする必要があります。デッドロックはまれであるはずですが、ロールバックの数を増やします。
メトリクス 説明

vendor_transactions_prepare_times_seconds_count

準備リクエストの合計数。

vendor_transactions_prepare_times_seconds_sum

すべての準備リクエストの合計時間。

vendor_transactions_rollback_times_seconds_count

ロールバックリクエストの合計数。

vendor_transactions_rollback_times_seconds_sum

すべてのロールバックリクエストの合計時間。

vendor_transactions_commit_times_seconds_count

コミットリクエストの合計数。

vendor_transactions_commit_times_seconds_sum

すべてのコミットリクエストの合計時間。

ヒストグラムが有効になっている場合、パーセンタイルバケットが利用可能です。これらはヒートマップを作成するのに役立ちますが、パーセンタイルバケットを収集および公開すると、デプロイメントのパフォーマンスに悪影響を与える可能性があります。

状態転送

状態転送は、ノードがクラスタに参加または離脱するときに発生します。データの格納のバランスを取り、必要な数のコピーを保証するために必要です。

この操作はリソース使用量を増やし、全体的なパフォーマンスに悪影響を与えます。

メトリクス 説明

vendor_state_transfer_manager_inflight_transactional_segment_count

ローカルノードが他のノードからリクエストしたインフライトトランザクションセグメントの数。

vendor_state_transfer_manager_inflight_segment_transfer_count

ローカルノードが他のノードからリクエストしたインフライトセグメントの数。

クラスタデータレプリケーション

クラスタデータレプリケーションは、主な障害の原因となる可能性があります。これらのメトリクスは、応答時間、つまり更新をレプリケートするのにかかる時間だけでなく、障害もレポートします。

正常なクラスタでは、平均レプリケーション時間は安定しているか、わずかな変動があります。障害の数が増加するはずはありません。
メトリクス 説明

vendor_rpc_manager_replication_count

成功したレプリケーションの合計数。

vendor_rpc_manager_replication_failures

失敗したレプリケーションの合計数。

vendor_rpc_manager_average_replication_time

クラスタ内のデータのレプリケーションに費やされた平均時間(ミリ秒)。

成功率

式を使用して、レプリケーションの成功率を計算できます

(vendor_rpc_manager_replication_count)
/
(vendor_rpc_manager_replication_count
 + vendor_rpc_manager_replication_failures)

クロスサイトデータレプリケーション

クラスタデータレプリケーションと同様に、このセクションのメトリクスは、データを他のサイトにレプリケートするのにかかる時間を測定します。

正常なクラスタでは、平均クロスサイトレプリケーション時間は安定しているか、わずかな変動があります。

タグ

site=<name>

受信サイトを示します。

メトリクス 説明

vendor_rpc_manager_cross_site_replication_times_seconds_count

クロスサイトリクエストの合計数。

vendor_rpc_manager_cross_site_replication_times_seconds_sum

すべてのクロスサイトリクエストの合計時間。

vendor_rpc_manager_replication_times_to_site_seconds_count

クロスサイトリクエストの合計数。このメトリクスは、サイトごとのカウンターでより詳細です。

vendor_rpc_manager_replication_times_to_site_seconds_sum

すべてのクロスサイトリクエストの合計時間。このメトリクスは、サイトごとの時間でより詳細です。

vendor_rpc_manager_number_xsite_requests_received_from_site

このノードで処理されたクロスサイトリクエストの合計数。このメトリクスは、サイトごとのカウンターでより詳細です。

vendor_x_site_admin_status

サイトステータス。値 1 はオンラインであることを示します。この値は、Infinispan CLI コマンド bring-online および take-offline に反応します。

ヒストグラムが有効になっている場合、パーセンタイルバケットが利用可能です。これらはヒートマップを作成するのに役立ちますが、パーセンタイルバケットを収集および公開すると、デプロイメントのパフォーマンスに悪影響を与える可能性があります。
このページの内容