第3章 機能拡張

Cryostat 2.0 には、Cryostat 1 のオファリングでビルドされる機能拡張が含まれています。

Cryostat Web コンソールの GUI

Cryostat Web コンソールの右上隅にある Help アイコンを使用して Cryostat 情報ページにアクセスできます。このコンソールページで、Cryostat のバージョンを表示できます。

また、アーカイブされたレコードの生成された名にターゲットエイリアスが含まれるようになりました。ターゲットエイリアスは、レコードの生成された名前にエイリアスをリンクすることにより、レコードの取得が改善されます。

Cryostat Operator トポロジービュー

Cryostat Operator は適切な app.openshift.io/connects-to アノテーションを Cryostat デプロイメントに適用できるようになりました。この設定は、OpenShift Container Platform Web コンソールの topology ビューで Cryostat Operator デプロイメントと一緒に Cryostat デプロイメントをリンクします。

Cryostat Operator コントローラーマネージャー

cert-manager をインストールしていないために Cryostat Operator が Cryostat のデプロイに失敗した場合は、Cryostat カスタムリソースの削除時に Cryostat Operator はハングしなくなりました。

Cryostat 1 では、Cryostat Operator クラスターは Cryostat クラスターの重複する ConsoleLink namespace が作成される可能性があります。この問題を回避するために、Cryostat Operator は GenerateName オブジェクトを、ConsoleLink リソース定義の Name オブジェクトで定義される SH256 ハッシュ値に置き換えます。

カスタムイベントテンプレート

カスタムイベントテンプレートを使用して、すべての Cryostat JFR 録画を設定できます。カスタムイベントテンプレートは、以下の方法で使用できます。

  • Cryostat Operator に、保存された ConfigMap オブジェクトのテンプレートファイルを指定して Cryostat カスタムイベントテンプレートを事前設定するよう指示します。
  • Cryostat Web アプリケーションを使用してカスタムイベントテンプレートをアップロードします。

サポートされる形式による SSL/TLS 証明書のエンコード

ターゲット JVM アプリケーションの Cryostat Web インターフェースに SSL/TLS 証明書を追加できます。

有効な SSL/TLS 証明書は、DER でエンコードされた base-64 または binary 形式です。どちらの形式も、以下の拡張機能をサポートします。

  • .der
  • .cer
  • .pem

実行時に生成された証明書を指定して、ターゲット JVM アプリケーションが JMX 接続に SSL/TLS を使用できるようになりました。Cryostat は、SSL/TLS 証明書を使用するターゲット JVM への JMX 接続を開くことを試みます。成功した JMX 接続では、Cryostat は実行時に指定したターゲット JVM 証明書に認証チェックをすべて渡す必要があります。

POST ハンドラーを使用して、証明書を許可、検証、および記述できます。

Fabric8 Kubernetes および OpenShift クライアント

Cryostat 2.0 は、Fabric8 Kubernetes および OpenShift クライアントのバージョン 4.12.0 をサポートします。このバージョンでは、Cryostat とのアプリケーションの互換性が強化され、ダウンストリームのビルドエラーを削減します。

Grafana コンテナーのバージョン

Cryostat 2.0 は、Grafana コンテナーのバージョン 6.4.4 をバージョン 7.3.6 に置き換えます。

Grafana エラーメッセージ

502 エラーメッセージは失敗した JMX 接続に関連し、512 エラーメッセージは JFR コンテナーに送信された無効な応答に関連します。

ヘルスチェックリソースの定義

Cryostat Operator は、api/v1/clienturl リソース定義を health リソース定義に置き換えます。Cryostat Operator は、コンテナー化された JVM ヘルスチェックの実行時に health エンドポイントを使用するようになりました。

initialization-resource アノテーション

Cryostat Operator に、CSV ファイルの設定に initialization-resource アノテーションが含まれるようになりました。このアノテーションは、Cryostat クラスターの Cryostat カスタムリソースを作成するためにグラフィカルヒントを提供して OpenShift Container Platform Web コンソールで実行している Cryostat Operator インスタンスを強化します。

OLM バンドル記述子

Cryostat 2.0 の場合、OLM バンドルでは、JFR 録画期間をチェックするために、eventOptions 記述子に整数値を設定する必要がなくなりました。代わりに、OLM バンドルは EventOptions 文字列で定義される期間形式の値を使用するようになりました。

サポートされる期間単位には、sm、および h が含まれます。たとえば、2h15m は、2 時間 15 分の JFR 録画の長さを示します。

SCC (Security Context Constraints)

Cryostat Operator はデフォルトで restricted SCC 設定を使用するようになりました。Cryostat クラスターに含まれる Pod は、restricted SCC 設定に一覧表示されている許可された fsGroup の値を使用できるようになりました。つまり、Cryostat Pod が永続ストレージ(PV)にマウントされると、そのディレクトリーへの読み取り/書き込みアクセスができるようになりました。

Pod の読み取り/書き込みアクセスレベルは、Pod の fsGroup GID の値により異なります。この値は、Cryostat Operator が組み込みの制限付きSecurityContextConstraintに準拠するように設定します。SecurityContext 要素には、Pod レベルのセキュリティー属性が含まれます。

Cryostat 2.0 より前は、Cryostat Operator が default 設定に設定されていたため、Cryostat クラスターで実行する Pod の fsGroup アクセスの問題が生じました。

Cryostat クラスターで許可される fsGroup 値の範囲についての詳細は、OpenShift ドキュメントの Web サイトのAbout pre-allocated security context constraints valuesを参照してください。

ServiceRef 定義

ServiceRef 定義には、HTTP API ハンドラーを使用した GET 通信から返されたすべての ServiceRef オブジェクトに含まれる以下の新しいプロパティーが含まれています。

  • Java アプリケーション名、ラベル、ポート番号などのアノテーション。
  • エイリアスや connectURL などのユーザー固有の ServiceRef 値。

以下の 2 つのハンドラーを使用して ServiceRef 定義を作成または削除できます。

  • POST: 同じサービス URL を持つ既存のターゲットが存在しない場合に、新規の ServiceRef を作成します。
  • DELETE: targetID パスパラメーターで指定された値と一致する場合に、CustomTargetPlatformClient から ServiceRef 定義を削除します。

サブプロセス管理

Cryostat が自動分析レポートを生成する前に、Cryostat は子サブプロセスを作成します。子サブプロセスは、レポートの生成によって消費される大きなメモリー負荷を累積して親プロセスを保護します。

たとえば、Linux オペレーティングシステムでは、OOM (Out-of-memory) Killer が、システムから利用できない追加のメモリーを要求し、プロセスを停止するプロセスを検出します。子サブプロセスが存在する場合、OOM Killer はこのサブプロセスを停止しますが、実行中の親プロセスには干渉しません。

Cryostat 環境変数 (CRYOSTAT_REPORT_GENERATION_MAX_HEAP) を使用して、子サブプロセスの最小または最大 JVM ヒープサイズを設定できます。最小の値が低い場合は、レポートを生成する前に子サブプロセスを停止する可能性がありますが、maxumim の値が高くなると、親プロセスで追加のメモリー制約が発生する可能性があります。

サブプロセスレポートの生成

Cryostat 2.0 は、ActiveRecordingReportCache または ArchivedRecordingReportCache のいずれかを使用して Java アプリケーションのサブプロセスレポートを生成する拡張機能を提供します。これらのクラスは以下のように簡素化されます。

  • ActiveRecordingReportCache には、ディスクの録画へのパスが自動的に含まれるようになりました。
  • ArchivedRecordingReportCache は、親プロセスの接続マネージャーを使用してレコードをローカルディスクファイルにコピーするユーティリティーメソッドを呼び出します。クラスはローカルパスの場所をサブプロセスに渡します。

サブプロセスでは、以下のタスクを完了する必要がなくなりました。

  • JMX 接続を確立します。
  • SSL/TLS 証明書を処理します。
  • JMX 認証の認証情報を処理します。

これらのタスクを削除すると、以下の方法でサブプロセスのワークロードが改善されます。

  • より迅速なエンドツーエンドレポートの生成。
  • コードベースの保守が容易になるように、コードの複雑さの軽減。
  • SSL/TLS 認証および JMX 認証メカニズムの適切な処理。

truststore 環境変数

Cryostat 2.0 は TRUSTSTORE 環境変数名を SSL_TRUSTSTORE_DIR に置き換えます。

TargetConnectionManager ハンドラー

TargetConnectionManager は、ターゲット要求と Cryostat 間の接続に JMX 接続にタイムアウトしたキャッシュ値を使用することで、同時接続をサポートするようになりました。デフォルトでは、時間のキャッシュは 90 秒です。

Vertx サーバーの応答管理

Vertx サーバーは TimeoutHandler 実装を使用して、Cryostat リクエストハンドラーによって送信される遅延応答メッセージを自動的に終了できるようになりました。これにより、クライアントが Cryostat 要求ハンドラーからの応答を無期限に待機する必要がなくなります。

TimeoutHandler 実装は、Cryostat 要求ハンドラーから遅延応答を検出すると、500 エラーメッセージを出力します。

WebSocket

WebSocket には以下の更新が含まれます。

  • WebSocket 接続が双方向のインタラクティブチャネルから、一方向のプッシュ通知チャネル(NC)にアップグレードしました。
  • WebSocket は一方向プッシュ通知にこのチャネルを使用するため、WebSocket 通知チャネルが api/v1/command から api/v1/notfications に変更になりました。
  • WebSocket は、JFR データの分析に録画およびイベントテンプレートを使用すると、通知チャネルでイベントを送信できます。

WebSocket クライアントが一方向プッシュ NC に接続すると、クライアントは同じチャネルで他の接続クライアントが実行したアクションに関する情報を自動的に受信します。