Cryostat 2.1の新UIでJFRの自動化ルールを構築する方法

Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。

この記事は、Red Hat Developerのブログ記事、How to build automated JFR rules with Cryostat 2.1's new UI | Red Hat Developer の翻訳記事です。


https://developers.redhat.com/sites/default/files/styles/article_feature/public/2020_Java_ContainerJFR_Featured_Article__A-01.png?itok=K_g-UdJY

Cryostatは、Kubernetes上でJDK Flight Recorderのデータを管理するためのツールです。最新バージョンであるCryostat 2.1では、Cryostat 2.0でAPI機能として導入されていた自動化ルールのユーザインタフェースが一新されています。これにより、多くのJavaアプリケーションに対してJDKフライトレコーディング(JFR)を大規模に管理することがより容易になりました。

自動化されたルールの威力

自動化されたルールは、ターゲットJVMに対してJFRを起動し、各ルールが適用されるアプリケーションを判断するための強力かつ柔軟な判定式を提供します。これらの判定式は、ポッド名(文字列の直接比較または正規表現を使用して比較可能)、JMXポート番号、ポッド上に存在するOpenShiftまたはKubernetesラベルやアノテーションなど、ターゲットアプリケーションのさまざまなプロパティを参照できます。

ルールが作成されると、Cryostatはその式に該当するすべてのアプリケーションを選択し、そのルールで定義されたJFRイベントテンプレートを使用して新しい記録を開始します。新しいターゲットアプリケーションインスタンスが発見されるたびに、同じことが起こります。Cryostatは、新しいアプリケーションインスタンスが以前に作成されたルールの式に一致するかどうかを確認し、該当する場合は、イベントテンプレートを使用して新しい記録を開始します。

さらに、自動化されたルールは、ターゲットアプリケーションのメモリからCryostatのストレージに記録データをコピーするためのオプションを含められます。このルールでは、記録データをコピーする頻度と、この保管データの過去のコピーを保存し、最も古いものを削除する頻度を指定できます。

新しいユーザインターフェース

新しいユーザインタフェース(UI)により、この強力な機能をこれまで以上に簡単に使用できるようになりました。入力フォームを表示することで、APIとの連携を容易にするだけでなく(たとえば、持続時間の数値入力)、ユーザーが観察したい対象アプリケーションにぴったり合った式を作成できるよう、その式を入力するためのウィザードが用意されています(図1)。

https://developers.redhat.com/sites/default/files/styles/article_full_width_1440px_w/public/image2_2.png?itok=YmSPHl5o

図1:自動化ルールのUIは、ルールのあらゆる側面を制御するためのフィールドやその他の要素を提供

ターゲットを選択すると、判定式ウィザードはそのターゲットに適合するための簡単な判定式の例を表示します。これは、単に判定式の構文を思い出させるためのヒントとして提供されます。

ビューの右側の分割部分には、選択したターゲットがJSON構造体として表示されます。これには、判定式内で参照できるターゲット・アプリケーションのすべての情報が表示されます(図2)。

https://developers.redhat.com/sites/default/files/styles/article_full_width_1440px_w/public/image1_6.png?itok=5A2rjZ9V

図2:ページの右側には、自動化ルールのすべてのパラメーターがJSONとして表示

目的のアプリケーションに適合させるべき表現が決まったら、それを「判定式」フィールドに入力します。UIが更新され、あなたの表現が現在選択されているターゲットに適合するかどうかが、色分けされた形で表示さ れます。

  • 緑色は、指定された式が選択されたアプリケーションに合致することを示します。
  • 黄色は、指定された式が有効な式であるが、選択されたアプリケーションに適合しないことを示します。
  • 赤は、指定された式が無効であることを示し、おそらく不正な構文が原因です。

必要に応じて、表示部が緑色になり、その式がターゲットに判定されるように、判定式を調整します。次に、同じ自動化ルールを適用したい別のターゲットアプリケーションを選択し、表示がまだ緑色であることを確認します。適合しない場合は、両方のアプリケーションで表示が緑になるまで、判定式を再度調整します。また、一致させたくないアプリケーションを選択し、その表示が黄色であることを確認することもできます。

図3では、target.labels.deployment == "quarkus-test" という判定式を記述しています。緑色とチェックマークは、この式が選択されたターゲットアプリケーションに合致することを示します。

https://developers.redhat.com/sites/default/files/styles/article_full_width_1440px_w/public/image3_3.png?itok=PhldAgBY

図3:チェックマークと緑のハイライトは、ターゲットアプリケーションに合致するルールを示す

判定式の構文、自動化ルール API、およびいくつかの使用例についての詳細と情報については、Red Hat Developer の以前の記事「JDK Flight Recorderのコンテナでの自動化 - 赤帽エンジニアブログ」 を参照してください。

このフォームを送信した後、Automated Rules ビューに戻り、新しいルールの定義が表に表示されるはずです。Cryostatは直ちにすべての既知のターゲットアプリケーションをチェックし、判定式がそれらに適合するかどうかを評価し、適合する場合は、定義した設定を使用して記録を開始します。将来のターゲットアプリケーションが発見された場合、それらも自動的に判定され、必要に応じて記録が開始されます。

次回:Cryostat記録のラベル付け方法

Cryostat 2.1では、記録物に対してラベルを追加する新機能が導入されました。自動化されたルールによって記録が開始されると、その記録を開始したルールの名前を指定するラベルが自動的に付与されます。このラベルは、録画がストレージにコピーされた場合にも適用されます。この機能については、近日中に記事を掲載する予定です。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。