Red Hat によって開発されたコンテナネイティブの JVM アプリケーションの Cryostat は、Java Flight Recorder (JFR) を使用して Java コンテナの監視およびプロファイリングのためのAPIを提供する。
この新しいリリースがもたらす主な機能は次のとおりだ: OpenShift での Cryostat のデプロイを簡素化する Cryostat Operator。ユーザがどの JVM を JDK Flight Recorder でイベントをアクティブにし記録するかを指定できる自動ルール定義。クライアントが1つのリクエストを実行できるようにするバッチ操作と、ユーザが手動でターゲットを定義できるようにしてターゲットとカスタムターゲットのセットから Cryostat へのデータの取得。
Java Mission Control (JMC) と Java Flight Recorder (JFR) は、かつては商用機能であり、Oracle Java ビルドにのみ含まれていたが、どちらも2018年にオープンソースとしてリリースされた。これにより、強力なプロファイリングおよび診断機能が利用可能になり、OpenJDK 11 以降すべてのバージョンに含まれるようになった。
しかし、JMC はデスクトップアプリケーションであり、コンテナ化にはあまり適していない。ユーザはローカルディスク上のフライトレコードを取得するか、リモート JVM への潜在的に安全でない JMX 接続を使用する必要がある。
同様に、JFR はローカルディスクにレコードを保存できるが、アプリケーションがコンテナで実行されている場合、ローカルストレージへのアクセスは簡単ではなかった。
Cryostat は、JFR データをエンドユーザのワークステーションでクラウドに接続する。実際、コンテナ化された JVM からフライトレコードを取得して保存するためのハブとして動作し、ユーザは HTTP/HTTPS を介してこれらのレコードにアクセスできる。
Cryostat はコンテナ化された JVM であり、他の OpenJDK アプリケーションと一緒に監視する「サイドカー」として機能する。ランタイムの検出は、Cryostat によって自動的に選択されるさまざまな方法で発生する可能性がある。docker-compose
で実行されるアプリケーションには Java Discovery Protocol が使用できるが、Kubernetes や Openshift で実行されるアプリケーションではエンドポイントが使用できる。その他の発見方法も利用可能だ。
Cyostat は、記録中に有効にするイベントの制御に JFR イベントテンプレートもサポートする。テンプレートを編集およびカスタマイズすることもできる。下の画像は、Cryostat のイベントタイプの例だ。
さらに、Cryostat は、カスタムレコーディング、スナップショット、アーカイブなどのレコーディングを管理するさまざまな方法を提供する。最初のオプションは、ユーザが名前、期間、サイズなどのレコーディングのパラメータを構成できる。2番目のオプションは、他のレコーディングによってキャプチャされたすべての情報の俯瞰だ。3番目のオプションは、スナップショットのデータをローカルディスクまたは永続ボリュームに保存するために、直ちに Cryostat に送信する。
Cryostat を使用してバックエンドで JMC を使う自動分析を行うこともできる。さらに高度なレポートを作成する場合に事前に構成されたダッシュボードを使用してデータを Grafana にエクスポートできる。
まとめると、Cryostat は JFR をコンテナ時代にもたらし、中央ハブから直接複数の JVM の分析とプロファイリングを可能にする。