第3章 Java アプリケーションの設定


Cryostat が Java 仮想マシン (JVM) 上で実行されるターゲットアプリケーションに関する Java Flight Recorder (JFR) データを収集、保存、分析できるようにするには、Cryostat がアプリケーションを検出して接続できるようにアプリケーションを設定する必要があります。

アプリケーションは次のいずれかの方法で設定できます。

  • Cryostat エージェントコンポーネントを検出と接続性に使用します。これは Java インストルメンテーションエージェントとして実装され、JVM 上で実行されるアプリケーションのプラグインとして機能します。
  • Java Management Extensions (JMX) 接続を許可するようにアプリケーションを設定し、検出には OpenShift Service を、接続性には JMX を使用します。
  • 検出には Cryostat エージェントを使用し、接続性には JMX を使用します。

Cryostat エージェント

Red Hat build of Cryostat 2.4 以降では、Cryostat エージェントは、Cryostat サーバーがアプリケーションの JMX ポートの代わりに使用できる HTTP API を提供します。適切に設定された Cryostat エージェントをデプロイするワークロードアプリケーションに接続すると、ターゲットアプリケーションが JMX ポートを公開する必要がなく、Cryostat 機能セットをすべて使用できます。

注記

Red Hat build of Cryostat 2.4 の前は、Cryostat エージェントは、限られた JFR 操作のみをサポートする読み取り専用 HTTP API を提供していました。

Cryostat エージェントの HTTP API は、JMX ポートと比較して次の利点があります。

  • API 領域の縮小によるセキュリティーの向上
  • Cryostat エージェントが Cryostat 検出プラグインとして 2 つの役割をはたすことでデプロイメントの柔軟性を向上

Cryostat エージェントがアプリケーション上でも JMX が設定されていることを検出すると、エージェントはエージェント HTTP API 定義と JMX URL 定義の両方を使用して自身を Cryostat サーバーに公開します。この場合は、任意の設定オプションを使用できます。

ワークロードのアプリケーションで Cryostat エージェントを使用するには、Cryostat エージェントの JAR ファイル (例: -javaagent:/deployment/app/lib/cryostat-agent.jar) へのパスを使用して -javaagent JVM フラグを渡すようにアプリケーションを設定する必要があります。この設定により、ワークロードアプリケーションの JVM が起動時に Cryostat エージェントを読み込み、初期化できるようになります。Cryostat エージェントの基本的な初期化が完了すると、ワークロードアプリケーションの通常の起動プロセスが通常どおり開始されます。

エージェントの JAR ファイルをワークロードアプリケーションに含めるためのオプション

Cryostat エージェントの JAR ファイルは、さまざまな方法でワークロードアプリケーションに含めることができます。

  • 最も簡単な方法は、JAR ファイルを pom.xml または build.gradle ファイルのアプリケーションの依存関係に追加することです。ビルドツール (Maven または Gradle) は、アプリケーションのビルド出力に含めるための JAR ファイルをダウンロードします。
  • maven-dependency-plugin などの Maven プラグインを使用して、アプリケーションのビルド出力に JAR ファイルのダウンロードおよび組み込みをより詳細に制御できます。
  • JAR ファイルを含めた PersistentVolume ストレージボリュームを作成できます。次に、アプリケーションの Deployment/DeploymentConfig を再設定して PersistentVolume をマウントし、-javaagent:/path/to/persistentvolume/cryostat-agent.jar を使用します。このタスクを実行する方法は、OpenShift クラスターで有効になっている PersistentVolume プロバイダーのタイプによって異なります。

Cryostat エージェントがアプリケーションコンテナーに正常に追加されてロードされると、アプリケーションの stdout および コンソール ログが Cryostat エージェントからのログメッセージを表示し始めます。

エージェント設定プロパティー

Cryostat エージェントの設定プロパティーは、次の 2 つの方法のいずれかで指定できます。

  • アプリケーションで JVM システムプロパティーフラグを使用します (例: -Dcryostat.agent.api.writes-enabled=true)。
  • すべての文字を大文字にし、句読点をアンダースコアに置き換えて環境変数を使用します (例: CRYOSTAT_AGENT_API_WRITES_ENABLED=true)。

Cryostat エージェントが正常に動作できるようにするには、次のプロパティーを設定する必要があります。

Expand

cryostat.agent.baseuri

これは、Cryostat エージェントが自身をアドバタイズする Cryostat サーバーバックエンド (つまり、内部 OpenShift サービスオブジェクト) の URL の場所 (https://my-cryostat.my-namespace.svc.cluster.local など) を指定します。

cryostat.agent.callback

これは、Cryostat エージェントインスタンスまたはアプリケーション自体の URL の場所を指定します。Cryostat は、この URL を使用してヘルスチェックを実行し、エージェントにデータを要求します。OpenShift/Kubernetes Downward API を使用して、これを動的に判別できます。詳細は、status.podIPKubernetes Downward API ドキュメント を参照してください。

設定要件に応じて、次のエージェントプロパティーを設定することもできます。

Expand

cryostat.agent.api.writes-enabled

これは、Cryostat エージェントが書き込み操作を許可するかどうかを示します。デフォルトで false に設定されています。Cryostat エージェントが JFR フライトレコーディングの開始、停止、または削除のリクエストを受け入れるようにするには、このプロパティーを true に設定する必要があります。

注記

このプロパティーが false に設定されている場合でも、エージェントはフライトレコーディングをリストしたり、個々のレコーディングファイルをダウンロードしたりするリクエストを実行できます。

cryostat.agent.webserver.port

これは、エージェントが HTTP API をバインドするために使用する HTTP ポート番号を指定します (デフォルトでは 9977)。これがアプリケーションまたは別のツールエージェントが使用する既存のポートと競合する場合は、別のポート番号を指定する必要があります。

cryostat.agent.app.name

これは、この Cryostat エージェントインスタンスがどのアプリケーションにアタッチされているかを識別するためのラベルを指定します (デフォルトでは、cryostat-agent)。これには、Downward API の metadata.name フィールド または metadata.labels'app' フィールドを使用できます。詳細は、Kubernetes Downward API ドキュメント Kubernetes Downward API ドキュメント を参照してください。

リモート Java Management Extensions (JMX) 接続

JMX は、JVM 上で実行されるターゲットアプリケーションを監視および管理できる JVM の標準機能です。Cryostat が JMX を使用するには、JVM の起動時に JMX を有効にして設定する必要があります。これは、ターゲットアプリケーションによる JMX ポートの公開を Cryostat が必要とするためです。

Cryostat は、この JMX ポートを介してターゲットアプリケーションと通信して、JFR レコーディングを開始および停止し、ネットワーク経由で JFR データを取得することで、この JFR データを Cryostat で保存および分析できるようにします。リモートモニタリングには、承認されていないユーザーがアプリケーションにアクセスできないようにセキュリティーが必要です。Cryostat がアプリケーションの JFR レコーディングにアクセスする前に、Cryostat は認証情報の入力を求めるプロンプトを表示します。

Cryostat エージェントと JMX のハイブリッド

Cryostat エージェントと JMX の両方を使用するハイブリッドアプローチを使用するようにターゲットアプリケーションを設定できます。このアプローチでは、Cryostat エージェントを使用してターゲットアプリケーションを検出し、JMX を使用して JFR データを Cryostat に公開するため、高い柔軟性が得られます。

たとえば、エージェントを使用すると、特定のポート番号に依存せずにアプリケーションを検出したり、JMX 接続を使用して JFR フライトレコーディングをオンデマンドで開始および停止したりできます。

3.1. Cryostat エージェントを使用したアプリケーションの設定

Java インストルメンテーションエージェントとして実装した Cryostat エージェントを使用すると、Cryostat がアプリケーションを検出し、データを収集し、分析のためにデータを Cryostat に送信できるようにターゲットアプリケーションを設定できます。オプションで、Cryostat エージェントが Cryostat サーバーからの JFR レコーディングの開始、停止、削除リクエストを受け入れることもできます。

Red Hat build of Cryostat 2.4 は、Cryostat エージェントの JAR ファイルに 2 つの異なるバリエーションを配布しています。設定要件に応じて、次のタイプのエージェント JAR ファイルのいずれかを使用できます。

  • 自己完結型で、エージェントコードとそのすべての依存関係が含まれるオールインワンの "shaded" JAR ファイル

    この "shaded" JAR ファイルは、追加のエージェント JAR ファイルを 1 つだけ含める必要があるため、既存のアプリケーションに組み込むのに最も便利な形式の Cryostat エージェントを提供します。これは、同様のエージェントやツールの一般的な配布パターンです。

  • 依存関係のないエージェントコードを含む標準 JAR ファイル

    このタイプの JAR ファイルは、エージェントとワークロードアプリケーションの間に依存関係の競合が存在することがわかっている場合に役立ちます。独自のストラテジーを適用して、エージェントとアプリケーションの両方の要件を満たすように、各依存関係の正しいバージョンを提供する場合は、スタンドアロン JAR ファイルを使用できます。

注記

以前のリリースでは、オールインワンの "shaded" JAR ファイルである Cryostat エージェントの 1 つのディストリビューションが提供されていました。次の手順では、Cryostat 2.4 エージェントの "shaded" JAR ファイルディストリビューションをインストールする方法について説明します。

Java アプリケーションの設定: Cryostat エージェント で説明されているように、Cryostat 2.4 エージェントは、エージェントの JAR ファイルをワークロードアプリケーションに含めるためのさまざまなオプションをサポートしています。以下の手順では、"shaded" JAR ファイルを pom.xml または build.gradle ファイルのアプリケーションの依存関係に追加する方法を説明します。

前提条件

  • Cryostat Web コンソールにログインしている。
  • JDK バージョン 11 以降がインストールされている。

手順

  1. Cryostat エージェントをインストールします。アプリケーションのビルドに応じて、次のオプションのいずれかを選択します。

    • Maven の使用:

      アプリケーションの pom.xml ファイルを Cryostat エージェントの JAR ファイルの情報で更新します。

      pom.xml の例

      <project>
        ...
        <repositories>
          <repository>
            <id>redhat-maven-repository</id>
            <url>https://maven.repository.redhat.com/earlyaccess/all/</url>
          </repository>
        </repositories>
        ...
        <build>
          <plugins>
            <plugin>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>3.3.0</version>
              <executions>
                <execution>
                  <phase>prepare-package</phase>
                  <goals>
                    <goal>copy</goal>
                  </goals>
                  <configuration>
                    <artifactItems>
                      <artifactItem>
                        <groupId>io.cryostat</groupId>
                        <artifactId>cryostat-agent</artifactId>
                        <version>0.3.0.redhat-00001</version>
                        <classifier>shaded</classifier>
                      </artifactItem>
                    </artifactItems>
                    <stripVersion>true</stripVersion>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
          ...
        </build>
        ...
      </project>

      次回アプリケーションをビルドするときに、Cryostat エージェント JAR ファイルが target/dependency/cryostat-agent-shaded.jar で利用可能になります。

    • Gradle の使用:

      build.gradle ファイルを更新します。

      build.gradle ファイルの例

      repositories {
      	…
      maven {
          	url "https://maven.repository.redhat.com/earlyaccess/all/"
          	credentials {
            		username "myusername"
              	password "mytoken"
          	}
      	}
      }

      エージェント JAR ファイルをアプリケーションにパッケージ化する方法は、ビルドに使用する Gradle プラグインによって異なります。たとえば、Jib プラグインを使用している場合は、次のように build.gradle ファイルを更新します。

      build.gradle ファイルの例

      plugins {
      	id 'java'
      	id 'application'
      	id 'com.google.cloud.tools.jib' version '3.3.1'
      	id 'com.ryandens.javaagent-jib' version '0.5.0'
      }
      …
      dependencies {
      	…
      	javaagent 'io.cryostat:cryostat-agent:0.3.0.redhat-00001:shaded'

  2. Docker ファイルを更新します。次の例では、JAVA_OPTS 環境変数を使用して、関連する JVM 情報を渡します。

    ...
    COPY target/dependency/cryostat-agent.jar /deployments/app/
    ...
    ENV JAVA_OPTS="-javaagent:/deployments/app/cryostat-agent-shaded.jar"

  3. アプリケーション固有のコンテナーイメージを再構築します。

    docker build -t docker.io/myorg/myapp:latest -f src/main/docker/Dockerfile
  4. Cryostat エージェントの設定に必要な JVM システムプロパティーまたは環境変数を指定するには、更新されたイメージをプッシュし、アプリケーションのデプロイメントを変更します。

    apiVersion: apps/v1
    kind: Deployment
    ...
    spec:
      ...
      template:
        ...
        spec:
          containers:
            - name: sample-app
              image: docker.io/myorg/myapp:latest
              env:
                - name: CRYOSTAT_AGENT_APP_NAME
                  value: "myapp"
                  # Replace this with the Kubernetes DNS record
                  # for the Cryostat Service
                - name: CRYOSTAT_AGENT_BASEURI
                  value: "http://cryostat.mynamespace.mycluster.svc:8181"
                - name: POD_IP
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
                - name: CRYOSTAT_AGENT_CALLBACK
                  value: "http://$(POD_IP):9977" 
    1
    
                  # Replace "abcd1234" with a base64-encoded authentication token
                - name: CRYOSTAT_AGENT_AUTHORIZATION 
    2
    
                  value: "Bearer abcd1234"
                - name: CRYOSTAT_AGENT_API_WRITES_ENABLED 
    3
    
                  value: true
              ports:
                - containerPort: 9977
                  protocol: TCP
              resources: {}
          restartPolicy: Always
    status: {}

    • <1>: ポート番号 9977 は、Cryostat のリクエストを処理する内部 Web サーバーに対してエージェントが公開するデフォルトの HTTP ポートです。エージェントがインストールされているターゲットアプリケーションとこのポート番号が競合する場合は、番号を変更できます。
    • <2>: CRYOSTAT_AGENT_AUTHORIZATION 値は、エージェントが自身の存在をアドバタイズするために、または JFR データをプッシュするために Cryostat への API リクエストに含める認証情報を示します。また、この目的で Kubernetes Service Account を作成し、abcd1234 を、サービスアカウントに関連付けられている Base64 エンコードされた認証トークンに置き換えることもできます。
    • <3>: CRYOSTAT_AGENT_API_WRITES_ENABLED 変数はデフォルトで false に設定されます。Cryostat エージェントが Cryostat サーバーからの JFR フライト記録の開始、停止、または削除のリクエストを受け入れるようにするには、この変数を true に設定する必要があります。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る