Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。
この記事は、Red Hat Developerのブログ記事、Announcing Cryostat 2.0: JDK Flight Recorder for containers | Red Hat Developer の翻訳記事です。
Cryostat は、JDK Flight Recorder (JFR) を使用してコンテナのプロファイリングと監視を行うための安全な API を提供する、コンテナネイティブな JVM アプリケーションです。JDK Flight Recorderは、バイナリのフライトレコーディングに保存されたJFRイベントを使用して、アプリケーションからプロファイリングと診断データを収集します。Cryostatは、要求に応じて、コンテナ化されたJava仮想マシン(JVM)からフライトレコーディングを取得、保存、分析し、アプリケーションの全体的な健全性を評価できます。ユーザは、レコーディングファイルをダウンロードし、JDK Mission Control(JMC)またはGrafanaにアップロードして、さらに分析できます。
この記事では、Cryostatの紹介と、使用例、使い始めるためのヒント、追加のリリースノートなど、2.0リリースの新機能を共有します。Cryostat の基本的な情報についてはContainerJFR入門: コンテナのためのJDK Flight Recorder - 赤帽エンジニアブログをごらん下さい。
シリーズを読む
Cryostat 2.0の使い方ハンズオンガイドのシリーズ記事をすべて読みましょう:
- Part 1: Cryostat 2.0を発表:コンテナ用JDK Flight Recorder - 赤帽エンジニアブログ
- Part 2: Cryostatを使用するためのJavaアプリケーションの設定 - 赤帽エンジニアブログ
- Part 3: CryostatによるカスタムターゲットのJavaモニタリング - 赤帽エンジニアブログ
- Part 4: Automating JDK Flight Recorder in containers - 赤帽エンジニアブログ
- Part 5: Creating Custom JFR event templates with Cryostat 2.0
注:Cryostat 2.0 の Red Hat ビルドは、現在、テクノロジープレビューで広く利用可能です。Red Hat ビルドには、OpenShift 上での Cryostat のデプロイを簡素化および自動化するための Cryostat Operator が含まれています。
CryostatとJDKフライトレコーダーの連携
Cryostatは、(1) JMX接続を受け入れることができ、(2)JDK Flight Recorderを含むJVMで動作します。これには、OpenJDKと、Red Hat OpenJDKやAdoptium OpenJDKなど、OpenJDKのほとんどのダウンストリームビルドまたはディストリビューションが含まれます。
デスクトップ専用アプリケーションのJDK Mission Controlでは、ユーザがローカルディスクにあるフライトレコーディングを取得しなければなりません。ベアメタル型のJDK Flight Recorderがコンテナ内のローカルファイルシステムに記録を書き込むと、コンテナが再起動したときにそれらの記録が失われます。複雑で安全でない可能性の高い回避策としては、Java Management Extensions(JMX)を介して、デスクトップワークステーションとクラウド上のコンテナ化されたJVMの間に直接接続を確立することが挙げられます。
Cryostatは、コンテナ化されたJVMからフライトレコーディングを安全に取得・保存するため、ユーザーはHTTP/HTTPSでこれらのレコーディングにアクセスできます。Cryostatは、プロファイリングと継続的な監視の両方で低オーバーヘッドなので、ユーザは本番環境でアプリケーションのパフォーマンスを監視できます。ユーザーは、複数のJVMでビルトインまたはカスタムのイベントテンプレートを使って一度にレコーディングを開始できます。
Cryostat 2.0の使用例
Cryostat 2.0の使用例としては、自動化されたルール、JDK Flight Recorderデータの一括取得、カスタムターゲット定義、非RMI JMXコネクタのサポートなどがあります。これらの各使用例については、今後の記事で詳しく説明します。
2.0リリースの主な内容
Cryostat 2.0では、以下の主要な新機能が追加されました。
- Cryostat Operator: Cryostatは現在、OpenShift Operatorとして提供されており、技術プレビューでも、OpenShift 4.6以降でOperatorHubから利用可能です。Cryostat Operatorは、CryostatのOpenShift名前空間への設定と展開を容易にし、Cryostat APIへのOpenShiftカスタムリソースインターフェースを提供し、他のOpenShift Operatorとサービスとの統合をより柔軟に構築できるようにします。
- 自動化されたルール:Cryostatの一般的な使用例は、ターゲットアプリケーションのJVMのすべてまたはいくつかの部分集合に、継続的な監視、または他のJFRイベントテンプレートを有効にすることです。自動化されたルール定義は、ユーザーがどのような種類のJDKフライトレコーディングイベントが記録されるべきか、そしてどのくらいの頻度でJFRデータが各ターゲットからCryostatアーカイブにコピーされるべきかとともに、その上でトリガーされるべきかを指定できます。これは、ポート番号、OpenShiftアノテーション、OpenShiftラベル、またはJVMエイリアスのような基準を使用しています。
- バッチ操作。Cryostatのもう一つの一般的な使用例は、何らかの外部イベントが発生したときに、ターゲットJVMのセットからすべてのJFRデータを取得することです。Cryostat 1.0では、クライアントは外部イベントを観察し、N個のターゲットアプリケーションのそれぞれからJFRデータを取得するために、CryostatにN個のHTTPリクエストを発行する必要がありました。Cryostat 2.0では、クライアントは1つのHTTPリクエストを発行し、Cryostatのアーカイブにターゲットのセットからデータを取得するようにCryostatを要求できます。その後、クライアントは必要に応じてCryostatからJFRデータをダウンロードできます。
- カスタムターゲット Cryostatのプラットフォームに合わせたJVM検出メカニズムに依存するのではなく、ユーザが手動でターゲット定義を作成できます。
今後、これらの機能を紹介する記事を掲載する予定です。
Cryostat 2.0の始め方
OpenShiftや他のKubernetesクラスタにCryostatをデプロイするために、Cryostat Operatorをインストールします。インストール方法と使用方法については、以下のリンクを確認してください。
- cryostat.ioの推奨インストールガイド
- テストとデモのための手動によるCryostatのインストールとセットアップのための私たちのガイド
- CryostatのWeb UIを使い始めるには、cryostat.io.をご覧ください
- Cryostat API使用ガイド:HTTP_API.md
- CryostatのREADME
2.0の追加機能
Cryostat 2.0には、他にもいくつかの細かい新機能があります。
- クライアント定義の接続プロトコル:Cryostatが異なるJMXプロトコル実装を使用してターゲットJVMと通信できるようにします(詳細はプルリクエスト#482を参照)
- POST /api/v2/certificates:ターゲットJVMに接続する際に、信頼するSSL証明書をアップロード
GET /api
: すべてのAPI操作をリストアップ- Cryostat操作のプッシュ通知
Cryostat 1.0からの主な変更点
Cryostat 2.0のリリースでは、バージョン1.0からいくつかの破壊的な変更が行われました。Cryostatがユーザーの多様なニーズに対応できる本格的な製品に成熟するにつれ、これらの変更は必要であると考えました。
対話型コマンドチャンネルの削除
対話型コマンドチャンネルは、一方通行のWebSocket通知チャンネルに置き換えられました。Cryostat は当初、ユーザの操作をあらかじめ定義されたコマンドの集合に限定した対話型モードのツールとして実装されました。この機能は、後にWebSocketを使用してリモートネットワークアクセスを可能にするために拡張され、コマンドチャンネルが生まれました。しかし、コマンドチャネル機能のすべてがHTTP APIに移植された今、チャネルは代わりにCryostatインスタンスに接続されているすべてのターゲットに一方的な通知を提供するようになりました。
イベント指定文字列の削除
これまでは、イベント指定子文字列構文(jdk.SomeEvent:optionName=value; jdk.AnotherEvent:secondOption=value2;...
など)を使用して、レコーディング中に監視するJDK Flight Recorderイベントを指定できました。現在では、JDK Flight Recorderのイベントテンプレート名を指定することで、レコーディング作成時にイベントを指定できます。ユーザは、さまざまな標準テンプレートから選ぶか、独自のカスタムテンプレートをCryostatにアップロードできます。テンプレートはXMLで構成されているため、作成、編集、検証、共有が容易であり、JDKの標準フォーマットであるため相互運用も可能です。
まとめ
Cryostat 2.0の技術プレビューリリースでは、OpenShiftまたはKubernetesクラスタ上のコンテナ化されたJVMを監視できます。さらに、JDK Mission ControlやGrafanaで分析するためのJDKフライトレコーディングの作成、管理、ダウンロードが可能です。Cryostat 2.0の詳細については、Cryostatのホームページ、cryostat.ioをご覧ください。また、上流のコミュニティに接続するために、メーリングリストにお気軽にご参加ください。