HawtIO 診断コンソールガイド


Red Hat build of Apache Camel 4.10

Red Hat build of HawtIO を使用したアプリケーションの管理

概要

HawtIO 対応アプリケーションをデプロイすると、HawtIO を使用してインテグレーションを監視および操作できます。

はじめに

HawtIO は、Red Hat HawtIO 対応アプリケーションを表示および管理するためのエンタープライズ監視ツールを提供します。これは、実行中の HawtIO 対応コンテナーを監視および管理するためにブラウザーからアクセスする Web ベースのコンソールです。HawtIO はオープンソースの HawtIO ソフトウェア (https://hawt.io/) に基づいています。HawtIO 診断コンソールガイドでは、HawtIO を使用してアプリケーションを管理する方法を説明します。

このガイドの対象読者は、Apache Camel エコシステムの開発者および管理者です。このガイドでは、Apache Camel と組織の処理要件をよく理解していることを前提としています。

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

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、用語の置き換えは、今後の複数のリリースにわたって段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

第1章 HawtIO の概要

HawtIO は、Red Hat build of Apache Camel および Red Hat build of AMQ 用の診断コンソールです。これは、ReactPatternFly などの最新の Web テクノロジーでビルドされた、プラグ可能な Web 診断コンソールです。HawtIO は、デプロイされた 1 つ以上の HawtIO 対応コンテナーの詳細を確認および管理するための中央インターフェイスを提供します。HawtIO は、HawtIO スタンドアロンをインストールするか、HawtIO on OpenShift を使用することで利用可能になります。HawtIO で表示および管理できるインテグレーションは、実行中のプラグインによって異なります。HawtIO およびシステムリソースの監視、更新の実行、およびサービスの起動と停止を行うことができます。

プラグ可能なアーキテクチャーは Webpack Module Federation に基づいており、高い拡張性を有します。プラグインを使用して HawtIO を動的に拡張したり、JVM 内のプラグインを自動的に検出したりできます。HawtIO には、すでに プラグイン が組み込まれているため、JVM アプリケーションですぐに使用でき便利です。プラグインには、Apache Camel、Connect、JMX、Logs、Runtime、Quartz、Spring Boot が含まれます。HawtIO は、主に Camel Quarkus および Camel Spring Boot で使用するように設計されています。また、HawtIO はマイクロサービスアプリケーションを管理するためのツールでもあります。HawtIO はクラウドネイティブであり、クラウドですぐに使用できます。HawtIO Operator を使用して、Kubernetes および OpenShift にデプロイできます。

HawtIO の利点は次のとおりです。

  • 特化されたビューによる、JMX を介した JVM のランタイム管理 (特に Camel アプリケーションと AMQ ブローカーのランタイム管理)
  • Camel ルートの可視化およびデバッグ/トレース
  • アプリケーションメトリクスのシンプルな管理と監視

以下の図は、HawtIO のアーキテクチャーの概要を示しています。

  1. HawtIO スタンドアロン

    Hawtio アーキテクチャースタンドアロン
  2. OpenShift 上の HawtIO

    hawtio アーキテクチャー openshift

第2章 HawtIO のインストール

HawtIO コンソールの使用を開始するには、いくつかの方法があります。

2.1. アプリケーションのバージョン

  1. HawtIO: 4.2.0.redhat-00034
  2. Camel Spring Boot: 4.10.3.redhat-00019
  3. Jolokia: 2.2.9.redhat-00001

2.2. Maven への Red Hat リポジトリーの追加

Red Hat Maven リポジトリーにあるアーティファクトにアクセスするには、Red Hat Maven リポジトリーを Maven の settings.xml ファイルに追加する必要があります。Maven は、ユーザーのホームディレクトリーの .m2 ディレクトリーで settings.xml ファイルを探します。ユーザー指定の settings.xml ファイルがない場合、Maven は M2_HOME/conf/settings.xml にあるシステムレベルの settings.xml ファイルを使用します。

前提条件:

Red Hat リポジトリーを追加する settings.xml ファイルがある場所を把握している。

手順:

  1. 以下の例のように、settings.xml ファイルに Red Hat リポジトリーの repository 要素を追加します。

    <?xml version="1.0"?>
    <settings>
    
      <profiles>
        <profile>
          <id>extra-repos</id>
          <activation>
            <activeByDefault>true</activeByDefault>
          </activation>
          <repositories>
           <repository>
             <id>redhat-ga-repository</id>
             <url>https://maven.repository.redhat.com/ga</url>
             <releases>
               <enabled>true</enabled>
             </releases>
             <snapshots>
               <enabled>false</enabled>
             </snapshots>
            </repository>
            <repository>
              <id>redhat-ea-repository</id>
              <url>https://maven.repository.redhat.com/earlyaccess/all</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
            </repository>
          </repositories>
          <pluginRepositories>
            <pluginRepository>
              <id>redhat-ga-repository</id>
              <url>https://maven.repository.redhat.com/ga</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
            </pluginRepository>
            <pluginRepository>
              <id>redhat-ea-repository</id>
              <url>https://maven.repository.redhat.com/earlyaccess/all</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
            </pluginRepository>
          </pluginRepositories>
        </profile>
      </profiles>
    
      <activeProfiles>
        <activeProfile>extra-repos</activeProfile>
      </activeProfiles>
    
    </settings>

2.3. CLI (JBang) からの実行

JBang で CLI から HawtIO をインストールして実行できます。

注記

まだローカルに JBang がない場合は、https://www.jbang.dev/download/ からインストールしてください。

手順:

  1. jbang コマンドを使用して、マシンに HawtIO の最新バージョンをインストールします。

    $ jbang app install -Dhawtio.jbang.version=4.2.0.redhat-00034 hawtio@hawtio/hawtio
    注記

    このインストール方法は、jbang>=0.115.0 でのみ利用できます。

  2. HawtIO コマンドがインストールされます。次のコマンドで HawtIO インスタンスを起動します。

    $ hawtio
  3. このコマンドは、http://localhost:8080/hawtio/ でコンソールを自動的に開きます。ポート番号を変更するには、次のコマンドを実行します。

    $ hawtio --port 8090
  4. CLI の設定オプションの詳細を確認するには、次のコードを実行してください。

    $ hawtio --help
    Usage: hawtio [-hjoV] [-c=<contextPath>] [-d=<plugins>] [-e=<extraClassPath>]
                  [-H=<host>] [-k=<keyStore>] [-l=<warLocation>] [-p=<port>]
                  [-s=<keyStorePass>] [-w=<war>]
    Run HawtIO
      -c, --context-path=<contextPath>
                          Context path.
      -d, --plugins-dir=<plugins>
                          Directory to search for .war files to install as 3rd
                            party plugins.
      -e, --extra-class-path=<extraClassPath>
                          Extra class path.
      -h, --help          Print usage help and exit.
      -H, --host=<host>   Hostname to listen to.
      -j, --join          Join server thread.
      -k, --key-store=<keyStore>
                          JKS keyStore with the keys for https.
      -l, --war-location=<warLocation>
                          Directory to search for .war files.
      -o, --open-url      Open the web console automatic in the web browser.
      -p, --port=<port>   Port number.
      -s, --key-store-pass=<keyStorePass>
                          Password for the JKS keyStore with the keys for https.
      -V, --version       Print HawtIO version
      -w, --war=<war>     War file or directory of the hawtio web application.

2.4. Quarkus アプリケーションの実行

以下の手順に従って、HawtIO を Quarkus アプリケーションに接続できます。

手順:

  1. io.hawt:hawtio-quarkus およびサポートする Camel Quarkus エクステンションを pom.xml の依存関係に追加します。

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.hawt</groupId>
          <artifactId>hawtio-bom</artifactId>
          <version>4.2.0.redhat-00034</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
      <!-- ... other BOMs or dependencies ... -->
    </dependencyManagement>
    
    <dependencies>
      <dependency>
        <groupId>io.hawt</groupId>
        <artifactId>hawtio-quarkus</artifactId>
      </dependency>
    
       <!-- Mandatory for enabling Camel management via JMX / HawtIO -->
      <dependency>
        <groupId>org.apache.camel.quarkus</groupId>
        <artifactId>camel-quarkus-management</artifactId>
      </dependency>
    
      <!-- (Optional) Required for HawtIO Camel route diagram tab -->
      <dependency>
        <groupId>org.apache.camel.quarkus</groupId>
        <artifactId>camel-quarkus-jaxb</artifactId>
      </dependency>
    
      <!-- ... other dependencies ... -->
    </dependencies>
  2. application.properties に次の設定を追加して認証を無効にします。

    quarkus.hawtio.authenticationEnabled = false
    1. 認証を設定することもできます。「Quarkus 認証メカニズム」を参照してください。
  3. 以下のように、開発モードで Quarkus アプリケーションを使用して HawtIO を実行します。

    mvn compile quarkus:dev
  4. http://localhost:8080/hawtio/ を開き、HawtIO コンソールを表示します。

2.5. Spring Boot アプリケーションの実行

HawtIO は 2 つのステップで Spring Boot アプリケーションに接続できます。

手順:

  1. io.hawt:hawtio-springboot およびサポートする Camel Spring Boot スターターを pom.xml の依存関係に追加します。

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.hawt</groupId>
          <artifactId>hawtio-bom</artifactId>
          <version>4.2.0.redhat-00034</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
        <!-- ... other BOMs or dependencies ... -->
      </dependencies>
    </dependencyManagement>
    
    <dependencies>
      <dependency>
        <groupId>io.hawt</groupId>
        <artifactId>hawtio-springboot</artifactId>
      </dependency>
    
       <!-- Mandatory for enabling Camel management via JMX / HawtIO -->
      <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-management-starter</artifactId>
      </dependency>
    
      <!-- (Optional) Required for HawtIO Camel route diagram tab -->
      <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-spring-boot-xml-starter</artifactId>
      </dependency>
    
      <!-- ... other dependencies ... -->
    </dependencies>
  2. 次の行を application.properties に追加して、HawtIO および Jolokia エンドポイントを有効にします。

    spring.jmx.enabled = true
    management.endpoints.web.exposure.include = hawtio,jolokia
  3. 次のように、Spring Boot アプリケーションを開発モードで使用して HawtIO を実行します。

    mvn spring-boot:run
  4. http://localhost:8080/actuator/hawtio を開き、HawtIO コンソールを表示します。

2.5.1. HawtIO パスの設定

HawtIO エンドポイントに /actuator ベースパスを使用しない場合は、次のコマンドを実行することもできます。

  1. management.endpoints.web.base-path プロパティーを使用して Spring Boot 管理ベースパスをカスタマイズします。

    management.endpoints.web.base-path = /
  2. management.endpoints.web.path-mapping.hawtio プロパティーを設定して、HawtIO エンドポイントへのパスをカスタマイズすることもできます。

    management.endpoints.web.path-mapping.hawtio = hawtio/console
  3. 以下に例を示します。

    1. HawtIO Spring Boot example に、実際に動作する Spring Boot の例があります。この例は、Apache Camel ルート、メトリクスなどに関する情報を公開する Web アプリケーションを監視する方法を示します。
    2. リアルタイム値とチャートに適した MBean は java.lang/OperatingSystem です。Camel ルートを確認してください。ツリー内で選択を変更すると、その内容に基づいて使用可能なタブのリストが動的に変化します。

第3章 HawtIO の設定

HawtIO は、サーバーランタイムとクライアントコンソールの 2 つの主要コンポーネントで構成されています。

サーバーランタイムは、サーバー側で実行される Java バックエンドであり、クライアントコンソールはブラウザーにデプロイされ、実行される JavaScript フロントエンドです。

したがって、HawtIO には 2 種類の設定があります。

HawtIO とそのプラグインの動作は、システムプロパティーで設定できます。

  1. 設定プロパティー - サーバーランタイムの設定
  2. hawtconfig.json: クライアントコンソールの設定

3.1. 設定プロパティー

HawtIO サーバーランタイムとそのプラグインは、システムプロパティーを通じて動作を設定できます。

次の表に、HawtIO のコアシステムとさまざまなプラグインの設定プロパティーを示します。

注記

セキュリティーと認証に関連する設定プロパティーは、セキュリティー を参照してください。

Expand
システムデフォルト説明

hawtio.disableProxy

false

このプロパティーを true に設定すると、ProxyServlet (/hawtio/proxy/*) を無効にできます。これにより、Connect プラグインが利用できなくなります。つまり、HawtIO はリモート JVM に接続できなくなります。Connect プラグインを使用しない場合は、利用不可にする方がセキュリティー上の理由から望ましい場合があります。

hawtio.localAddressProbing

true

起動時にプロキシー許可リストのローカルアドレスプローブを有効にするかどうかを決定します。無効にするには、このプロパティーを false に設定します。

hawtio.proxyAllowlist

localhost, 127.0.0.1

Connect プラグインが ProxyServlet 経由で接続できるターゲットホストの、コンマ区切りの許可リストです。この許可リストに含まれないホストはすべて、セキュリティー上の理由から接続を拒否されます。このオプションを * に設定すると、すべてのホストが許可されます。リストの要素に接頭辞 "r:" を付けると、正規表現を定義できます (例: localhost,r:myserver[0-9]+.mydomain.com)。

hawtio.redirect.scheme

 

認証が必要な場合、URL をログインページにリダイレクトするスキームです。

hawtio.sessionTimeout

 

サーブレットコンテナーがクライアントアクセス間でセッションを開いたままにする最大間隔 (秒単位) です。このオプションを設定しない場合、HawtIO はサーブレットコンテナーのデフォルトのセッションタイムアウトを使用します。

3.2. Quarkus

Quarkus の場合、これらのプロパティーはすべて、application.properties または application.yaml で接頭辞 quarkus.hawtio を付けて設定できます。

以下に例を示します。

quarkus.hawtio.disableProxy = true

3.3. Spring Boot

Spring Boot の場合、これらのプロパティーはすべて application.properties または application.yaml でそのまま設定できます。

以下に例を示します。

hawtio.disableProxy = true

3.4. システムプロパティーによる Jolokia の設定

Jolokia エージェントは、Jolokia ネイティブの org.jolokia.http.AgentServlet クラスを拡張する io.hawt.web.JolokiaConfiguredAgentServlet (hawtio-war/WEB-INF/web.xml で定義) を使用して、自動的にデプロイされます。

Jolokia ドキュメント で定義されている設定パラメーターで Jolokia サーブレットをカスタマイズする場合は、接頭辞 jolokia を付けたシステムプロパティーとしてパラメーターを渡すことができます。

以下に例を示します。

jolokia.policyLocation = file:///opt/hawtio/my-jolokia-access.xml

3.5. HawtIO のカスタムブランディング設定

hawtconfig.json は、HawtIO のフロントエンドコンソールを設定するためのエントリーポイント JSON ファイルです。これを使用して、コンソールのさまざまな部分 (ブランディング、スタイル、ログインページやバージョン情報モーダルなどの基本的な UI 部分、および一部の HawtIO プラグインのコンソール固有の動作) をカスタマイズできます。

以下は、hawtconfig.json のファイルの例です。

hawtconfig.json の例:

{
  "branding":
  {
    "appName": "HawtIO Management Console",
    "showAppName": false,
    "appLogoUrl": "hawtio-logo.svg",
    "companyLogoUrl": "hawtio-logo.svg",
    "css": "",
    "favicon": "favicon.ico"
  },
  "login": {
    "description": "Login page for HawtIO Management Console.",
    "links": [
      { "url": "#terms", "text": "Terms of Use" },
      { "url": "#help", "text": "Help" },
      { "url": "#privacy", "text": "Privacy Policy" }
    ]
  },
  "about": {
    "title": "HawtIO Management Console",
    "description": "A HawtIO reimplementation based on TypeScript + React.",
    "imgSrc": "hawtio-logo.svg",
    "productInfo": [
      { "name": "ABC", "value": "1.2.3" },
      { "name": "XYZ", "value": "7.8.9" }
    ],
    "copyright": "© HawtIO project"
  },
  "disabledRoutes": [
    "/disabled"
  ]
}

3.5.1. hawtconfig.json の設定オプション

hawtconfig.json の最上位レベルでは現在、次のオプションが提供されています。

最上位レベルの設定オプション

Expand
オプション説明

branding

コンソールのブランディングオプション。

login

ログインページの設定。

about

about モーダル設定。

disabledRoutes

コンソールに表示しないプラグインのリスト。

jmx

JMX プラグインの設定。

online

HawtIO Online 設定。

3.5.1.1. ブランディング

branding 設定では、アプリケーション名、ロゴ、スタイル、ファビコン (favicon) など、コンソールのブランディングをカスタマイズするオプションが提供されます。

ブランディング設定オプション

Expand
オプションデフォルト説明

appName

HawtIO Management Console

コンソールのアプリケーション名をカスタマイズします。名前はブラウザーのタイトルヘッダーで使用され、オプションでコンソールページのヘッダーでも使用されます。

showAppName

false

コンソールページのヘッダーにアプリケーション名を表示します。

appLogoUrl

img/hawtio-logo.svg

アプリケーションロゴの代わりに URL を使用します。

companyLogoUrl

img/hawtio-logo.svg

会社のロゴの代わりに URL を使用します。

css

 

コンソールに適用するカスタム CSS を提供します。

favicon

 

ファビコンの代わりに URL を使用します。

hawtconfig.json での branding 設定は次のようになります。

"branding": {
  "appName": "HawtIO Management Console",
  "showAppName": false,
  "appLogoUrl": "hawtio-logo.svg",
  "companyLogoUrl": "hawtio-logo.svg",
  "css": "",
  "favicon": "favicon.ico"
}
3.5.1.2. ログイン

login 設定では、HawtIO ログインページに表示される情報をカスタマイズするオプションが提供されます。

ログイン設定オプション

Expand
オプションデフォルト説明

description

 

ログインページに表示されるテキストを設定します。

links

[ ]

ログインページの下部にリンクを提供します。値は、URL および テキスト プロパティーを含む、オブジェクトの配列である必要があります。

hawtconfig.json での login 設定は次のようになります。

"login": {
  "description": "Login page for HawtIO Management Console.",
  "links": [
    { "url": "#terms", "text": "Terms of Use" },
    { "url": "#help", "text": "Help" },
    { "url": "#privacy", "text": "Privacy Policy" }
  ]
}
3.5.1.3. About

About 設定では、HawtIO の About モーダルに表示される情報をカスタマイズするオプションが提供されます。

About 設定オプション

Expand
オプションデフォルト説明

title

HawtIO Management Console

About モーダルのタイトルをカスタマイズします。

description

 

About モーダルに説明テキストを入力します。

imgSrc

img/hawtio-logo.svg

URL を使用して、About モーダルのロゴイメージを置き換えます。

productInfo

[ ]

コンソールで使用される追加コンポーネントの名前とバージョンの情報を提供します。値は、name および value のプロパティーを含むオブジェクトの配列である必要があります。

copyright

 

バージョン情報モーダルで著作権情報を設定します。

hawtconfig.jsonabout 設定は次のようになります。

"about":
{
  "title": "HawtIO Management Console",
  "description": "A HawtIO reimplementation based on TypeScript + React.",
  "imgSrc": "hawtio-logo.svg",
  "productInfo": [
    { "name": "ABC", "value": "1.2.3" },
    { "name": "XYZ", "value": "7.8.9" }
  ],
  "copyright": "© HawtIO project"
}
3.5.1.4. 無効なルート

disabledRoutes 設定では、コンソールからプラグインを非表示にするオプションが提供されます。

オプションの値は、表示しないプラグインのパスを表す文字列の配列である必要があります。

hawtconfig.json での disabledRoutes 設定は次のようになります。

"disabledRoutes": [
  "/disabled"
]
3.5.1.5. JMX プラグイン

JMX プラグインは hawtconfig.jsonjmx 設定を介してカスタマイズできます。

ヒント

デフォルトでは、HawtIO は JMX プラグインを介してすべての MBean をワークスペースにロードします。場合によっては、アプリケーションの負荷を軽減するために、カスタム HawtIO コンソールで MBean の一部のみをロードする必要がある場合があります。jmx 設定には、ワークスペースにロードされる MBean を制限するオプションが用意されています。

JMX プラグイン設定オプション

Expand
オプションデフォルト説明

workspace

 

JMX プラグインワークスペースにロードする MBean ドメインとオブジェクト名のリストを指定します。

このオプションでは、false を設定してワークスペースを完全に無効にするか、次の形式で MBean パスの配列を指定できます。

<domain>/<prop1>=<value1>,<prop2>=<value2>,...

ワークスペースにロードする MBean を微調整します。

警告

ワークスペースを無効にすると、ワークスペースによって提供される MBean に依存するすべてのプラグインも非アクティブになります。

hawtconfig.json での jmx 設定は次のようになります。

"jmx": {
  "workspace": [
    "hawtio",
    "java.lang/type=Memory",
    "org.apache.camel",
    "no.such.domain"
  ]
}
3.5.1.6. HawtIO オンライン

HawtIO Online のフロントエンド要素は、hawtconfig.jsononline 設定で指定できます。

HawtIO オンライン設定オプション

Expand
オプションデフォルト説明

projectSelector

 

プロジェクトの監視に使用するセレクターを設定します。これは、HawtIO デプロイメントタイプが cluster と等しい場合にのみ該当します。デフォルトでは、ログインしているユーザーがアクセスできるプロジェクトがすべて監視されます。kubectl get コマンドの --selector または -l オプションで要求されているように、セレクターの文字列表現を指定する必要があります。こちら を参照してください。

consoleLink

 

OpenShift Web コンソールリンクを設定します。HawtIO デプロイメントが cluster と等しい場合、アプリケーションメニューにリンクが追加されます。それ以外の場合は、HawtIO プロジェクトダッシュボードにリンクが追加されます。値は、textsectionimageRelativePath のプロパティーを持つオブジェクトである必要があります。

ConsoleLink 設定オプション

Expand
オプションデフォルト説明

text

 

リンクのテキスト表示を設定します。

section

 

リンクが表示されるアプリケーションメニューのセクションを設定します。これは、HawtIO デプロイメントタイプが cluster と等しい場合にのみ該当します。

imageRelativePath

 

アプリケーションメニューのリンクの前に使用されるアイコンのパスを、HawtIO ステータス URL を基準として設定します。これは、HawtIO デプロイメントタイプが cluster に等しい場合にのみ該当します。イメージは正方形で、24x24 ピクセルで表示されます。

hawtconfig.json での HawtIO online 設定は次のようになります。

"online": {
  "projectSelector": "myproject",
  "consoleLink": {
      "text": "HawtIO Management Console",
      "section": "HawtIO",
      "imageRelativePath": "/online/img/favicon.ico"
  }
}

3.5.2. hawtconfig.json のデプロイ

3.5.2.1. Quarkus

Quarkus アプリケーションの場合、hawtconfig.json ファイルと、CSS ファイルやイメージなど、他に付随する静的リソースは、プロジェクトの src/main/resources ディレクトリーにある META-INF/resources/hawtio の下に配置する必要があります。

Quarkus プロジェクトの例は こちら にあります。

3.5.2.2. Spring Boot

Spring Boot アプリケーションの場合、hawtconfig.json ファイルや CSS ファイルやイメージなどの他の静的リソースは、プロジェクトの src/main/resources ディレクトリーの hawtio-static の下に配置する必要があります。

Spring Boot プロジェクトの例は こちら を参照してください。

3.5.3. プラグインからのカスタマイズ

プラグインはコンソールに hawtconfig.json ファイル自体を直接指定できませんが、メインのコンソールアプリケーションからファイルが読み込まれた後に設定をカスタマイズできます。

@hawtio/react NPM パッケージは configManager API を提供します。プラグインの index.ts でこの API を使用して、プラグインの読み込み中に hawtconfig.json の設定をカスタマイズできます。

プラグインから hawtconfig.json 設定をカスタマイズする方法の例を次に示します。

import
{
  HawtIOPlugin, configManager
  } from '@hawtio/react'
...

/**
 * The entry function of your plugin.
 */
export const plugin: HawtIOPlugin = () =>
{
  ...
}

// Register the custom plugin version to HawtIO
// See package.json "replace-version" script for how to replace the version placeholder with a real version
configManager.addProductInfo('HawtIO Sample Plugin', '__PACKAGE_VERSION_PLACEHOLDER__')

/*
 * This example also demonstrates how branding and styles can be customised from a WAR plugin.
 *
 * The Plugin API `configManager` provides `configure(configurer: (config: Hawtconfig) => void)` method
 * and you can customise the `Hawtconfig` by invoking it from the plugin's `index.ts`.
 */
configManager.configure(config => {
  // Branding & styles
  config.branding =
  {
    appName: 'HawtIO Sample WAR Plugin',
    showAppName: true,
    appLogoUrl: '/sample-plugin/branding/Logo-RedHat-A-Reverse-RGB.png',
    css: '/sample-plugin/branding/app.css',
    favicon: '/sample-plugin/branding/favicon.ico',
  }
  // Login page
  config.login = {
    description: 'Login page for HawtIO Sample WAR Plugin application.',
    links: [
      { url: '#terms', text: 'Terms of use' },
      { url: '#help', text: 'Help' },
      { url: '#privacy', text: 'Privacy policy' },
    ],
  }
  // About modal
  if (!config.about) {
    config.about = {}
  }
  config.about.title = 'HawtIO Sample WAR Plugin'
  config.about.description = 'About page for HawtIO Sample WAR Plugin application.'
  config.about.imgSrc = '/sample-plugin/branding/Logo-RedHat-A-Reverse-RGB.png'
  if (!config.about.productInfo) {
    config.about.productInfo = []
  }
  config.about.productInfo.push(
    { name: 'HawtIO Sample Plugin - simple-plugin', value: '1.0.0' },
    { name: 'HawtIO Sample Plugin - custom-tree', value: '1.0.0' },
  )
  // If you want to disable specific plugins, you can specify the paths to disable them.
  //config.disabledRoutes = ['/simple-plugin']
})

WAR プラグインプロジェクトの例は こちら にあります。

第4章 HawtIO のセキュリティーと認証

注記

アクセスを検証するためのセキュリティー保護手段として、ランタイム/コンテナー (Quarkus、OpenShift など) でアクセスログを有効にできます。アクセスレコードは、セキュリティーインシデントが発生した場合にアクセス試行を調査するために使用できます。

HawtIO は、実行時に使用するランタイム/コンテナーに応じて、設定不要で使用できる認証を有効にします。アプリケーションで HawtIO を使用するには、ランタイムの認証をセットアップするか、HawtIO 認証を無効にする必要があります。

4.1. 設定プロパティー

次の表に、HawtIO コアシステムのセキュリティー関連の設定プロパティーを示します。

Expand
名前デフォルト説明

hawtio.authenticationContainerDiscoveryClasses

io.hawt.web.tomcat.TomcatAuthenticationContainerDiscovery

使用する AuthenticationContainerDiscovery 実装のコンマ区切りのリスト。デフォルトでは、TomcatAuthenticationContainerDiscovery のみが存在します。これは、tomcat-users.xml ファイルから Tomcat でユーザーを認証するために使用されます。設定済みの JAAS ログインモジュールから Tomcat でユーザーを認証する場合は、削除できます。独自のクラスを追加することも可能です。

hawtio.authenticationContainerTomcatDigestAlgorithm

NONE

Tomcat の tomcat-users.xml ファイルを使用する場合、プレーンテキストではなくハッシュ化したパスワードを使用できます。このプロパティーを使用してダイジェストアルゴリズムを指定します。有効な値は、NONE、MD5、SHA、SHA-256、SHA-384、および SHA-512 です。

hawtio.authenticationEnabled

true

セキュリティーを有効にするかどうかを指定します。

hawtio.keycloakClientConfig

classpath:keycloak.json

フロントエンドに使用される Keycloak 設定ファイル。Keycloak インテグレーションが有効な場合は必須です。

hawtio.keycloakEnabled

false

Keycloak インテグレーションを有効にするか無効にするかを指定します。

hawtio.noCredentials401

false

認証が有効になっているものの認証情報が提供されていない場合に、HTTP ステータス 401 を返すかどうかを指定します。401 を返すと、ブラウザーのポップアップウィンドウが表示され、認証情報の入力が求められます。デフォルトでは false に設定されており、代わりに HTTP ステータス 403 を返します。

hawtio.realm

hawtio

ログインに使用するセキュリティーレルム。

hawtio.rolePrincipalClasses

 

完全修飾されたプリンシパルクラス名。複数のクラスをコンマで区切って指定できます。

hawtio.roles

Admin, manager, viewer

コンソールにログインするには、ユーザーロールが必要です。複数のロールを許可するには、コンマで区切って指定します。HawtIO がユーザーを認証するときにロールのチェックを無効にするには、* または空の値に設定します。

hawtio.tomcatUserFileLocation

conf/tomcat-users.xml

tomcat-users.xml ファイルの代替の場所 (/production/userlocation/ など) を指定します。

4.2. Quarkus

HawtIO は、Quarkus と Keycloak が提供する認証メカニズムで保護されます。

Quarkus の HawtIO 認証を無効にする場合は、次の設定を application.properties に追加します。

quarkus.hawtio.authenticationEnabled = false

4.2.1. Quarkus 認証メカニズム

HawtIO は、Quarkus の観点からは単なる Web アプリケーションです。そのため、HawtIO の認証は、Quarkus が提供するさまざまなメカニズムを使用して、Web アプリケーションの認証と同じ方法で行われます。

ここでは、例示のために、HawtIO で プロパティーベースの認証 を使用する方法を説明します。

重要

プロパティーベースの認証は、実稼働環境では推奨されません。このメカニズムは開発とテストのみを目的としています。

  1. HawtIO でプロパティーベースの認証を使用するには、次の依存関係を pom.xml に追加します。

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-elytron-security-properties-file</artifactId>
    </dependency>
  2. その後、application.properties でユーザーを定義し、認証を有効にできます。たとえば、パスワード s3cr3t! を指定して ユーザー hawtio を定義するとします。この場合、ロール admin は次のようになります。

    quarkus.security.users.embedded.enabled = true
    quarkus.security.users.embedded.plain-text = true
    quarkus.security.users.embedded.users.hawtio = s3cr3t!
    quarkus.security.users.embedded.roles.hawtio = admin

以下に例を示します。

プロパティーベースの認証の実際の例は、Quarkus の例 を参照してください。

4.2.2. Keycloak を使用した Quarkus

Keycloak インテグレーション - Quarkus を参照してください。

4.3. Spring Boot

標準の JAAS 認証に加えて、Spring Boot の HawtIO は Spring Security または Keycloak を使用して保護できます。Spring Boot の HawtIO 認証を無効にする場合は、次の設定を application.properties に追加します。

hawtio.authenticationEnabled = false

4.3.1. Spring Security

HawtIO で Spring Security を使用するには、以下の手順を実行します。

  1. org.springframework.boot:spring-boot-starter-securitypom.xml の依存関係に追加します。

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
  2. src/main/resources/application.properties の Spring Security 設定は次のようになります。

    spring.security.user.name = hawtio
    spring.security.user.password = s3cr3t!
    spring.security.user.roles = admin,viewer
  3. Spring Security でアプリケーションを保護する方法をセットアップするには、security config クラスを定義する必要があります。

    @EnableWebSecurity
    public class SecurityConfig
    {
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception
        {
            http
                .authorizeHttpRequests(authorize -> authorize
                    .anyRequest().authenticated()
                )
                .formLogin(withDefaults())
                .httpBasic(withDefaults())
                .csrf(csrf -> csrf
                    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                    .csrfTokenRequestHandler(new SpaCsrfTokenRequestHandler())
                )
                .addFilterAfter(new CsrfCookieFilter(), BasicAuthenticationFilter.class);
            return http.build();
        }
    }
    注記

    CsrfAuthenticationStrategyCsrfLogoutHandler によって以前のトークンが消去されるため、認証成功およびログアウト成功後にトークンを更新する必要があります。クライアントアプリケーションは、新しいトークンを取得せずに、POST などの安全でない HTTP 要求を実行できません。

以下に例を示します。

作業例は、springboot-security example を参照してください。

4.3.1.1. Spring Security を使用したリモートアプリケーションへの接続

Spring Security を有効にしてリモート Spring Boot アプリケーションに接続しようとする場合は、Spring Security 設定で HawtIO コンソールからのアクセスが許可されていることを確認してください。デフォルトの CSRF 保護により Jolokia エンドポイントへのリモートアクセスが禁止されている可能性が高く、その場合は HawtIO コンソールで認証エラーが発生します。

警告

アプリケーションが CSRF 攻撃のリスクにさらされることに注意してください。

  1. 最も簡単な解決策は、次のようにリモートアプリケーションで Jolokia エンドポイントの CSRF 保護を無効にすることです。

    import org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaEndpoint;
    import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
    
    @EnableWebSecurity
    public class SecurityConfig
    {
    
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception
        {
            ...
            // Disable CSRF protection for the Jolokia endpoint
            http.csrf().ignoringRequestMatchers(EndpointRequest.to(JolokiaEndpoint.class));
            return http.build();
        }
    
    }
  2. Spring Security の CSRF 保護を使用せずに Jolokia エンドポイントを保護するには、以下のような jolokia-access.xml ファイル (スニペット) を src/main/resources/ に配置する必要があります。これにより、信頼されたノードのみがファイルにアクセスできるようになります。

    <restrict>
      ...
      <cors>
        <allow-origin>http*://localhost:*</allow-origin>
        <allow-origin>http*://127.0.0.1:*</allow-origin>
        <allow-origin>http*://*.example.com</allow-origin>
        <allow-origin>http*://*.example.com:*</allow-origin>
    
        <strict-checking />
      </cors>
    </restrict>

4.3.2. Keycloak を使用した Spring Boot

Keycloak インテグレーション - Spring Boot を参照してください。

4.4. Keycloak インテグレーション

Keycloak で HawtIO コンソールを保護できます。HawtIO を Keycloak と統合するには、以下を行う必要があります。

  1. Keycloak サーバーを準備する
  2. HawtIO を任意のランタイム (Quarkus、Spring Boot、WildFly、Karaf、Jetty、Tomcat など) にデプロイし、認証に Keycloak を使用するように設定する

4.4.1. Keycloak サーバーを準備する

Keycloak サーバーをインストールして実行します。最も簡単な方法は、Docker イメージ を使用することです。

docker run -d --name keycloak \
  -p 18080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak start-dev

ここでは、他のアプリケーションが使用する可能性のあるポートとの潜在的な競合を回避するために、Keycloak サーバーのポート番号 18080 を使用します。

ユーザー admin/ パスワード admin を使用して、Keycloak 管理コンソール http://localhost:18080/admin/ にログインできます。hawtio-demo-realm.json を Keycloak にインポートします。これを行うには、Create Realm ボタンをクリックし、hawtio-demo-realm.json をインポートします。hawtio-demo レルムを作成します。

hawtio-demo レルムには、hawtio-client アプリケーションがパブリッククライアントとしてインストールされており、adminviewer などのいくつかのレルムロールが定義されています。これらのロールの名前は、HawtIO 管理コンソールと JMX にログインできるデフォルトの HawtIO ロールと同じです。

以下のように、ユーザーも 3 種類あります。

admin
パスワード admin とロール admin が割り当てられた、HawtIO にログインできるユーザー。
viewer
パスワード viewer とロール viewer が割り当てられた、HawtIO にログインできるユーザー。
jdoe
パスワードが password で、ロールが割り当てられていないユーザーは、HawtIO にログインできません。
注記

現在、HawtIO RBAC 機能はこれらのランタイムにまだ実装されていないため、ロールの違いは Quarkus と Spring Boot 上の HawtIO アクセス権に影響はありません。

4.4.2. 設定

HawtIO の Keycloak 統合の設定は、ランタイム (サーバー側) での Keycloak との統合と、HawtIO コンソール (クライアント側) での Keycloak との統合の 2 つの部分で構成されます。

各パーツごとに以下の設定を行う必要があります。

サーバー側
Keycloak アダプターのランタイム固有の設定
クライアント側の設定
HawtIO Keycloak 設定 keycloak-hawtio.json
4.4.2.1. Quarkus

まず、HawtIO を Quarkus アプリケーションにアタッチするために 必要な設定 を適用します。

Quarkus アプリケーションを Keycloak と統合するために必要なのは、Quarkus OIDC 拡張機能です。以下の依存関係を pom.xml に追加します。

pom.xml

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-oidc</artifactId>
</dependency>

4.4.2.1.1. サーバー側

次に、application.properties (サーバー側の OIDC 拡張を設定する) に次の行を追加します。

application.properties

quarkus.oidc.auth-server-url = http://localhost:18080/realms/hawtio-demo
quarkus.oidc.client-id = hawtio-client
quarkus.oidc.credentials.secret = secret
quarkus.oidc.application-type = web-app
quarkus.oidc.token-state-manager.split-tokens = true
quarkus.http.auth.permission.authenticated.paths = "/*"
quarkus.http.auth.permission.authenticated.policy = authenticated

重要

quarkus.oidc.token-state-manager.split-tokens = true は重要です。そうしないと、大きなサイズのセッションの Cookie トークンの問題が発生し、Keycloak との統合に失敗する可能性があります。

4.4.2.1.2. クライアント側の設定

最後に、Quarkus アプリケーションプロジェクトの src/main/resources の下に keycloak-hawtio.json を作成します (これはクライアント側の HawtIO JS 設定として機能します)。

keycloak-hawtio.json

{
  "realm": "hawtio-demo",
  "clientId": "hawtio-client",
  "url": "http://localhost:18080/",
  "jaas": false,
  "pkceMethod": "S256"
}

注記

Code Exchange Code Challenge Method の Proof Key 詳細設定に応じて、pkceMethodS256 に設定します。PKCE が有効になっていない場合は、このオプションを設定しないでください。

プロジェクトをビルドして実行すると、Keycloak と統合されます。

4.4.2.1.3. 例

実際の例は、quarkus-keycloak の例 を参照してください。

4.4.2.2. Spring Boot

まず、Spring Boot アプリケーションに HawtIO をアタッチするために 必要な設定 を適用します。

Spring Boot アプリケーションを Keycloak と統合するには、pom.xml に次の依存関係を追加する必要があります (4.xy は、最新の HawtIO リリースバージョンに置き換えます)。

pom.xml

<dependency>
  <groupId>io.hawt</groupId>
  <artifactId>hawtio-springboot-keycloak</artifactId>
  <version>4.x.y</version>
</dependency>

4.4.2.2.1. サーバー側

次に、application.properties (サーバー側の Keycloak アダプターを設定する) に次の行を追加します。

application.properties

keycloak.realm = hawtio-demo
keycloak.resource = hawtio-client
keycloak.auth-server-url = http://localhost:18080/
keycloak.ssl-required = external
keycloak.public-client = true
keycloak.principal-attribute = preferred_username

4.4.2.2.2. クライアント側の設定

最後に、Spring Boot プロジェクトの src/main/resources の下に keycloak-hawtio.json を作成します (これはクライアント側の HawtIO JS 設定として機能します)。

keycloak-hawtio.json

{
  "realm": "hawtio-demo",
  "clientId": "hawtio-client",
  "url": "http://localhost:18080/",
  "jaas": false
}

プロジェクトをビルドして実行すると、Keycloak と統合されます。

4.4.2.2.3. 例

作業例は、springboot-keycloak の例 を参照してください。

第5章 プラグイン

HawtIO は高度にモジュール化されており、さまざまなテクノロジー用のプラグインがすぐに使用できます。HawtIO プラグインは、基本的に、動作するために必要なすべての JavaScript、CSS、イメージが自己完結した React コンポーネントです。Plugin API で認証やイベント通知などの HawtIO コア機能を利用できます。

プラグインの唯一の要件は、HawtIO がプラグインをロードできるエントリーポイントを提供することです。これは、Webpack Module Federation の仕様に準拠している必要があります。

HawtIO は JMX を使用して存在する MBean を検出し、検出した内容に基づいてナビゲーションバーとタブを動的に更新します。UI は、HawtIO が MBean をリロードするたびに更新されます。これは定期的に実行されるか、プラグインによって明示的にトリガーされます。

検出に JMX を使用する場合、プラグインが JMX とだけ対話できるわけではなく、ブラウザーでできることはすべて実行できます。たとえば、REST を使用して UI 機能やその他のプラグインを検出できます。

5.1. 組み込みプラグイン

以下のプラグインはすべてデフォルトで HawtIO に含まれています。

Expand
表5.1 組み込みプラグインのリスト
プラグイン説明

Apache ActiveMQ Artemis

Apache ActiveMQ Artemis には独自の Web 管理コンソールが付属しており、これは Artemis ブローカー専用のビューを提供する外部プラグインを使用して HawtIO に構築されています。コンソールを通じて複数のアクセプターおよびアドレス間を移動し、操作できます。詳細は、Artemis User Manual - Management Console を参照してください。

Camel

Apache Camel のサポートを追加します。Camel コンテキスト、ルート、エンドポイントなどを参照したり、実行中のルートとそのメトリクスを視覚化したり、エンドポイントを作成したり、メッセージを送信したり、メッセージフローをトレースしたり、ルートをプロファイルしてどの部分が高速で実行され、どの部分が低速で実行されているかを特定したりできます。

要件
Camel アプリケーションは JVM で実行されている必要があります。JMX を有効にするには、Camel アプリケーションに Camel Management コンポーネントを含める必要があります。Source タブには Camel XML DSL サポートが必要です。Debug タブには Camel Debug コンポーネントが必要です。Trace タブでは、Camel Tracer を有効にする必要があります。

接続

ローカルまたはリモート JVM に接続できます。

要件
Discover タブでは、依存関係に io.hawt:hawtio-local-jvm-mbean が必要です。

診断

Java Flight Recorder を制御し、クラスヒストグラムを表示し、JVM フラグにアクセスできます。
まだ v3 に移植されていません。

JMX

MBean との対話、リアルタイム属性の表示、チャート作成、操作の呼び出しのためのコア JMX サポートを提供します。

Logs

JVM 内のログを表示するサポートを提供します。

要件
依存関係には、io.hawt:hawtio-log と、hawtio-log のログ記録フレームワーク固有の実装が必要です。現在、io.hawt:hawtio-log-logback のみが提供されています。

Quartz

Quartz スケジューラーのステータスを表示し、設定できます。また、コンソールからジョブとトリガーを設定して実行することもできます。Camel アプリケーションで Camel Quartz コンポーネントを使用する場合、このプラグインは自動的に有効になります。

Runtime

スレッド、システムプロパティー、主要なメトリクスなど、Java プロセスの概要を提供します。

Spring Boot

Spring Boot アプリケーションに関する情報を表示します。

要件
プラグイン内の対応する各タブをアクティブ化するには、Spring Boot Health、Info、Loggers、および HTTP Exchanges エンドポイント を公開する必要があります。

5.2. カスタムプラグイン

カスタムプラグインを開発して HawtIO 機能を拡張することもできます。

通常、プラグインの開発には TypeScript、React、PatternFly v4 が含まれます。現時点では、HawtIO を拡張するカスタムプラグインを開発する方法を示す例をいくつか紹介します。

HawtIO プロジェクト例内のサンプルプラグイン
https://github.com/jboss-fuse/hawtio-examples/tree/rhbac-4.10/sample-plugin
HawtIO プラグインの最も単純な形式。これは JAR としてパッケージ化され、Java プロジェクトに依存関係として含めることで使用できます。
Spring Boot のサンプルプラグイン
https://github.com/hawtio/hawtio-sample-plugin-ts
このサンプルでは、Spring Boot アプリケーションでカスタム HawtIO プラグインを作成して使用する方法を示します。
WAR アプリケーションとしてのサンプルプラグイン
https://github.com/hawtio/hawtio-sample-war-plugin-ts
このサンプルでは、後で Jetty、WildFly、Tomcat などのアプリケーションサーバーにデプロイできるカスタム HawtIO プラグインを WAR ファイルとして作成する方法を示します。

5.2.1. プラグイン開発のためのリソース

以下は、HawtIO プラグインの開発に役立つ参考資料のリストです。

第6章 OpenShift 4 上の HawtIO のセットアップ

注記

HawtIO Online は Fuse 7 アプリケーションを検出できるはずですが、含まれている Camel プラグインは Camel 4.x モデルのみをサポートします。おそらく、Fuse 7 Camel ルートの管理に HawtIO 4 は使用できません。

OpenShift 4.x では、HawtIO のセットアップには、インストールおよびデプロイが必要になります。このインストールのメカニズムとして、OperatorHub から入手可能な HawtIO Operator を使用することが推奨されています。オプションで、OpenShift 4.x 上の HawtIO のロールベースアクセス制御で説明されているように、HawtIO のロールベースアクセス制御 (RBAC) をカスタマイズできます。

6.1. OperatorHub を使用した OpenShift 4 上の HawtIO のインストールおよびデプロイ

HawtIO Operator は、HawtIO のインストール用に OpenShift OperatorHub で提供されます。HawtIO をデプロイするには、インストールされた Operator のインスタンスと HawtIO カスタムリソース (CR) をデプロイする必要があります。

HawtIO をインストールおよびデプロイするには、以下を実行します。

  1. Web ブラウザーで、cluster admin 権限を持つユーザーとして OpenShift コンソールにログインします。
  2. Operators をクリックした後、OperatorHub をクリックします。
  3. 検索フィールドウィンドウで HawtIO と入力し、Operator の一覧をフィルタリングします。HawtIO Operator をクリックします。
  4. HawtIO Operator インストールウィンドウで、Install をクリックします。Create Operator Subscription フォームが表示されます。

    1. Update Channel の場合は、stable-v1 を選択します。
    2. Installation Mode では、デフォルト (クラスターの特定の namespace) を受け入れます。

      注記

      このモードは、Operator が HawtIO CR を監視する namespace を決定します。これは、完全にデプロイされるときに HawtIO が監視する namespace とは異なります。HawtIO が監視する namespace は、HawtIO CR を介して設定できます。

    3. Installed Namespace では、HawtIO Operator をインストールする namespace を選択します。
    4. Update Approval では、Automatic または Manual を選択し、OpenShift が HawtIO Operator への更新を処理する方法を設定します。

      1. Automatic 更新オプションが選択され、新しいバージョンの HawtIO Operator が利用可能な場合、OpenShift Operator Lifecycle Manager (OLM) は人的介入なしに、HawtIO の実行中のインスタンスを自動的にアップグレードします。
      2. Manual 更新オプションが選択され、Operator の新しいバージョンが利用可能な場合、OLM は更新要求のみを作成します。クラスター管理者は、HawtIO Operator を新しいバージョンに更新するために、更新要求を手動で承認する必要があります。
  5. Install をクリックすると、OpenShift は現在の namespace に HawtIO Operator をインストールします。
  6. インストールを確認するには、Operators をクリックした後、Installed Operators をクリックします。HawtIO は Operator のリストに表示されるはずです。
  7. OpenShift Web コンソールを使用して HawtIO をデプロイするには、以下を実行します。

    1. Installed Operators のリストの Name 列の下にある HawtIO Operator をクリックします。
    2. Provided APIsOperator Details ページで、Create HawtIO をクリックします。
    3. 設定のデフォルト値を使用するか、任意でデフォルト値を編集します。

      1. Replicas の場合、HawtIO のパフォーマンスを向上させるには (たとえば、高可用性環境の場合)、HawtIO に割り当てられる Pod の数を増やすことができます。
      2. RBAC (ロールベースアクセス制御) では、デフォルトの RBAC 動作をカスタマイズする場合や、HawtIO Operator をインストールした namespace に ConfigMap ファイルがすでに存在する場合にのみ、Config Map フィールドに値を指定します。
      3. Nginx は、HawtIO Operator インストールのパフォーマンスチューニング を参照してください。
      4. Type には、以下のいずれかを指定します。

        1. クラスター: HawtIO が、HawtIO 対応アプリケーションの OpenShift クラスター上にあるすべての namespace を監視する場合。
        2. namespace: HawtIO が、同じ namespace にデプロイされた HawtIO 対応アプリケーションのみを監視する場合。
    4. Create をクリックします。HawtIO Operator Details ページが開き、デプロイメントのステータスが表示されます。
  8. HawtIO を開くには、以下を実行します。

    1. namespace デプロイメントの場合: OpenShift Web コンソールで、HawtIO Operator がインストールされているプロジェクトを開き、Overview を選択します。Project Overview ページで、Launcher セクションまで下にスクロールし、HawtIO リンクをクリックします。
    2. cluster デプロイメントでは、OpenShift Web コンソールのタイトルバーで、グリッドアイコンをクリックします。ポップアップメニューの Red Hat Applications で、HawtIO URL リンクをクリックします。
    3. HawtIO にログインします。ブラウザーに Authorize Access ページが表示され、必要なパーミッションが表示されます。
    4. Allow selected permissions をクリックします。HawtIO がブラウザーで開き、アクセスが許可される HawtIO 対応アプリケーション Pod が表示されます。
  9. Connect をクリックして、監視対象のアプリケーションを表示します。新しいブラウザーウィンドウが開き、HawtIO のアプリケーションが表示されます。

6.2. OpenShift 4 上の HawtIO のロールベースアクセス制御

HawtIO は、OpenShift によって提供されるユーザー承認に応じてアクセスを推測する、ロールベースアクセス制御 (RBAC) を提供します。HawtIO では、RBAC によって、ユーザーが Pod 上で MBean 操作を実行できるかどうかが決定されます。

OpenShift の承認に関する詳細は、OpenShift ドキュメントの RBAC の使用によるパーミッションの定義および適用 を参照してください。

Operator を使用して OpenShift に HawtIO をインストールすると、ロールベースのアクセスがデフォルトで有効になります。HawtIO RBAC は、OpenShift の Pod リソースでユーザーの verb アクセスを利用して、HawtIO での Pod の MBean 操作へのユーザーのアクセスを決定します。デフォルトでは、HawtIO には 2 つのユーザーロールがあります。

  1. admin: ユーザーが OpenShift で Pod を更新できる場合、ユーザーには HawtIO の admin ロールが付与されます。ユーザーは、HawtIO で Pod の書き込み MBean 操作を実行できます。
  2. viewer: ユーザーが OpenShift で Pod を取得できる場合、ユーザーには HawtIO の viewer ロールが付与されます。ユーザーは、HawtIO で Pod の読み取り専用 MBean 操作を実行できます。

6.2.1. OpenShift 4 上の HawtIO のアクセスロールの決定

HawtIO のロールベースアクセス制御は、Pod に対するユーザーの OpenShift パーミッションから推測されます。特定のユーザーに付与された HawtIO アクセスロールを確認するには、Pod に対してユーザーに付与される OpenShift パーミッションを取得します。

前提条件:

  • ユーザーの名前
  • Pod の名前

手順:

  1. ユーザーが Pod に対して HawtIO の admin ロールを持っているかどうかを確認するには、以下のコマンドを実行してユーザーが OpenShift で Pod を更新できるかどうかを確認します。

    oc auth can-i update pods/<pod> --as <user>
  2. 応答が yes の場合、ユーザーには Pod の admin ロールがあります。ユーザーは、HawtIO で Pod の書き込み操作を実行できます。
  3. ユーザーが Pod に対して HawtIO の viewer ロールを持っているかどうかを確認するには、以下のコマンドを実行してユーザーが OpenShift で Pod を取得できるかどうかを確認します。

    oc auth can-i get pods/<pod> --as <user>
  4. 応答が yes の場合、ユーザーには Pod の viewer ロールがあります。ユーザーは、HawtIO で Pod の読み取り専用操作を実行できます。コンテキストに応じて、HawtIO は、オプションを無効にするか、ユーザーが書き込み MBean 操作を試行したときに operation not allowed for this user メッセージを表示することによって、viewer ロールを持つユーザーが書き込み MBean 操作を実行できないようにします。
  5. 応答が no の場合、ユーザーはどの HawtIO ロールにもバインドされておらず、ユーザーは HawtIO で Pod を表示できません。

6.2.2. OpenShift 4 上の HawtIO へのロールベースアクセスのカスタマイズ

OperatorHub を使用して HawtIO をインストールする場合、ロールベースのアクセス制御 (RBAC) がデフォルトで有効になります。HawtIO の RBAC 動作をカスタマイズするには、HawtIO をデプロイメントする前に、(カスタム RBAC 動作を定義する) ConfigMap リソースを提供する必要があります。この ConfigMap の名前は、HawtIO カスタムリソース (CR) の rbac 設定セクションに入力する必要があります。

カスタム ConfigMap リソースは、HawtIO Operator がインストールされているのと同じ namespace に追加する必要があります。

前提条件:

  • HawtIO Operator が OperatorHub からインストールされている。

手順:

HawtIO RBAC ロールをカスタマイズするには、以下を実行します。

  1. RBAC ConfigMap を作成します。

    1. 現在の OpenShift プロジェクトが、HawtIO をインストールするプロジェクトであることを確認します。たとえば、hawtio-test プロジェクトに HawtIO をインストールするには、以下のコマンドを実行します。

      oc project hawtio-test
    2. テンプレートから HawtIO RBAC ConfigMap ファイルを作成し、以下のコマンドを実行します。

      oc process -f https://raw.githubusercontent.com/hawtio/hawtio-online/2.x/docker/ACL.yaml -p APP_NAME=custom-hawtio | oc create -f -
    3. 以下のコマンドを使用して、新しいカスタム ConfigMap を編集します。

      oc edit ConfigMap custom-hawtio-rbac
    4. 編集を保存すると、ConfigMap リソースが更新されます。
  2. 上記のように新しい HawtIO CR を作成し、configMap プロパティーの下に新しい ConfigMap の名前を追加して rbac セクションを編集します。
  3. Create をクリックします。Operator はカスタム ConfigMap を利用して、HawtIO の新しいバージョンをデプロイする必要があります。

6.3. Fuse Console からの移行

HawtIO カスタムリソース定義 (CRD) のバージョンが、HawtIO で v1alpha1 から v2 にアップグレードされました。つまり、HawtIO Operator をインストールすると、既存のすべての Fuse-Console カスタムリソース (CR) がこの新しいバージョンにアップグレードされます。CRD の現行のスキーマプロパティーは変更されません。

CRD バージョンプロパティーは CRD に残りますが、HawtIO Operator はこれを HawtIO のインストールに使用しなくなります。これは、Fuse-Console Operator が引き続き Fuse-Console を正常にインストールできるようにするためです。

HawtIO と Fuse-Console は、別個の独立したアプリケーションとして実行する必要があります。

6.4. OpenShift 4 上の HawtIO のアップグレード

Red Hat OpenShift 4.x は、HawtIO Operator を含む Operator への更新を処理します。詳細は、OpenShift ドキュメントの Operator を参照してください。次に、Operator の更新により、アプリケーションの設定方法に応じてアプリケーションのアップグレードがトリガーされます。

6.5. OpenShift 4 上の HawtIO のパフォーマンスのチューニング

デフォルトでは、HawtIO は以下の Nginx 設定を使用します。

  • clientBodyBufferSize: 256k
  • proxyBuffers: 16 128k
  • subrequestOutputBufferSize: 10m
注記

これらの設定の説明は、Nginx のドキュメント を参照してください。

HawtIO のパフォーマンスを調整するには、clientBodyBufferSizeproxyBuffers、および subrequestOutputBufferSize 環境変数のいずれかを設定します。たとえば、HawtIO を使用して多数の Pod とルート (合計 100 ルートなど) を監視する場合、HawtIO の subrequestOutputBufferSize 環境変数を 60m から 100m の間に設定することで、読み込みタイムアウトの問題を解決できます。

6.5.1. HawtIO Operator インストールのパフォーマンスチューニング

Openshift 4.x では、HawtIO のデプロイ前後に Nginx パフォーマンスチューニング環境変数を設定できます。これを後で行うと、OpenShift は HawtIO を再デプロイします。

前提条件:

  • OpenShift クラスターにアクセス可能な cluster admin 権限が必要です。

手順:

環境変数は、HawtIO のデプロイ前後に設定できます。

  1. HawtIO のデプロイ前に環境変数を設定 するには、以下を実行します。

    1. OpenShift Web コンソールの、HawtIO Operator がインストールされているプロジェクトで、Operators> Installed Operators> HawtIO Operator を選択します。
    2. HawtIO タブをクリックし、Create HawtIO をクリックします。
    3. Create HawtIO ページで、Form viewConfig> Nginx セクションまでスクロールダウンします。
    4. Nginx セクションをデプロイメントしてから、環境変数を設定します。以下に例を示します。

      1. clientBodyBufferSize: 256k
      2. proxyBuffers: 16 128k
      3. subrequestOutputBufferSize: 100m
    5. Create をクリックして HawtIO をデプロイします。
    6. デプロイメントが完了したら、Deployments> HawtIO-console ページを開いて Environment をクリックし、環境変数がリストにあることを確認します。
  2. HawtIO のデプロイ後に環境変数を設定 するには、以下を実行します。

    1. OpenShift Web コンソールで、HawtIO がデプロイされているプロジェクトを開きます。
    2. Operators> Installed Operators> HawtIO Operator を選択します。
    3. HawtIO タブをクリックしてから、HawtIO をクリックします。
    4. Actions> Edit HawtIO を選択します。
    5. Editor ウィンドウで、spec セクションまでスクロールダウンします。
    6. 以下のように、spec セクションで、新規の nginx セクションを追加し、1 つ以上の環境変数を指定します。

      apiVersion: hawt.io/v2
      kind: HawtIO
      metadata:
       name: hawtio-console
      spec:
       type: Namespace
       nginx:
        clientBodyBufferSize: 256k
        proxyBuffers: 16 128k
        subrequestOutputBufferSize: 100m
    7. Save をクリックします。OpenShift は HawtIO を再デプロイします。
    8. 再デプロイメントが完了したら、Workloads> Deployments> HawtIO-console ページを開き、Environment をクリックしてリスト内の環境変数を確認します。

6.5.2. HawtIO でアプリケーションを表示するためのパフォーマンスチューニング

HawtIO の強化されたパフォーマンスチューニング機能により、多数の MBean を持つアプリケーションを表示できます。この機能を使用するには、次の手順を実行します。

前提条件:

  • OpenShift クラスターにアクセス可能な cluster admin 権限が必要です。

手順:

アプリケーションのメモリー制限を増やします。

  1. HawtIO のデプロイ後にメモリー制限を増やす には、以下を実行します。

    1. OpenShift Web コンソールで、HawtIO がデプロイされているプロジェクトを開きます。
    2. Operators> Installed Operators> HawtIO Operator を選択します。
    3. HawtIO タブをクリックしてから、HawtIO をクリックします。
    4. Actions> Edit HawtIO を選択します。
    5. Editor ウィンドウで、spec.resources セクションまでスクロールダウンします。
    6. リクエスト制限 の両方を優先する値に更新します。
    7. 保存をクリックします。
    8. HawtIO は、新しいリソース仕様を使用して再デプロイする必要があります。

6.6. HawtIO CR プロパティー

このセクションには、ブランディング、バージョン情報、コンソールリンクなど、カスタマイズ可能なすべてのカスタムリソースプロパティーが含まれます。

  1. auth: 認証設定 | type: object

    1. internalSSL: 内部通信に SSL を使用します。OpenShift インストールの場合、これは常に true に設定する必要があります。
    2. clientCertCheckSchedule: 証明書の有効期限をチェックする頻度を定義する CronJob スケジュール。スケジュールが設定されていない場合、クライアントのローテーションは有効になりません | type: string
    3. clientCertCommonName : 生成されたクライアント証明書 CN| type: string
    4. clientCertExpirationDate: 生成されたクライアント証明書の有効期限 | type: string | format: date-time
    5. clientCertExpirationPeriod: 証明書をローテーションできる有効期限までの期間 (時間単位)。デフォルトは 24 時間に設定されています | type: integer
  2. config : HawtIO コンソールの設定 | type: object

    1. about: About ページに表示される情報 | type: object

      1. additionalInfo: description セクションのテキスト | タイプ: 文字列
      2. copyright: copyright セクションのテキスト | type: string
      3. imgSrc: ページに表示されるイメージ。これは、HawtIO ステータス URL からの相対パス、または絶対 URL を指定可能です | type: string
      4. productInfo: 製品情報のリスト | type: array

        1. items: About ページに表示される製品情報 | type: object | 必須: [ "name", "value" ]

          1. name: 製品情報の名前 | type: string
          2. value: 製品情報の値 | type: string
      5. title: ページのタイトル | type: string
    2. branding: UI ブランディング | type: object

      1. appLogoUrl: ナビゲーションバーに表示されるロゴの URL。これは、HawtIO ステータス URL からの相対パス、または絶対 URL になります。| type: string
      2. appName: 通常は Web ブラウザータブに表示されるアプリケーションのタイトル。| type: string
      3. css: アプリケーションのスタイル設定に使用できる外部 CSS スタイルシートの URL。これは、HawtIO ステータス URL からの相対パス、または絶対 URL になります。| type: string
      4. favicon: 通常、Web ブラウザーのタブに表示される favicon の URL。これは、HawtIO ステータス URL からの相対パス、または絶対 URL になります。| type: string
    3. disabledRoutes: ルートが一致する UI コンポーネントを無効にします | type: array |

      1. items:type: string
    4. online: OpenShift 関連の設定 | type: object

      1. consoleLink: OpenShift Web コンソールリンクの設定。HawtIO デプロイメントが 'cluster' と同等の場合、アプリケーションメニューにリンクが追加されます。それ以外の場合は、HawtIO プロジェクトダッシュボードにリンクが追加されます。| type: object

        1. imageRelativePath: アプリケーションメニューのリンクの前に使用されるアイコンの、HawtIO ステータス URL からの相対パス。これは、HawtIO デプロイメントタイプが cluster と等しい場合にのみ該当します。イメージは正方形で、24x24 ピクセルで表示されます。| type: string
        2. section: リンクが表示されるアプリケーションメニューのセクション。これは、HawtIO デプロイメントタイプが 'cluster' と同等の場合にのみ該当します。| type: string
        3. text : リンクのテキスト表示 | type: string
      2. projectSelector: プロジェクトを監視するために使用されるセレクター。これは、HawtIO デプロイメントタイプが 'cluster' と同等の場合にのみ該当します。デフォルトでは、ログインしているユーザーがアクセスできるプロジェクトがすべて監視されます。kubectl get コマンドの --selector または -l オプションで要求されているように、セレクターの文字列表現を指定する必要があります。Kubernetes Labels and Selectors を参照してください。| type: string
  3. externalRoutes: 外部ルート名のリスト。ルートを使用してコンソールにアクセスするために Operator によってアノテーションが付けられます | type: array |

    1. items:type: string
  4. metadataPropagation : デプロイメント、Pod、サービス、ルートなどの生成されたリソースに伝播する HawtIO カスタムリソースのメタデータの設定 | type: object

    1. annotations: 伝播するアノテーション | type: array |

      1. items:type: string
    2. labels: 伝播するラベル | type: array |

      1. items:type: string
  5. nginx: Nginx ランタイム設定 type: object

    1. clientBodyBufferSize: クライアント要求本文を読み取るためのバッファーサイズ。デフォルトは 256k です。| type: string
    2. proxyBuffers: プロキシーサーバーからの応答を読み取るために 1 つの接続で使用されるバッファーの数とサイズ。デフォルトは 16 128k です。| type: string
    3. subrequestOutputBufferSize: サブ要求の応答本文を保存するために使用されるバッファーのサイズ。デフォルトは 10m です。| type: string
  6. rbac : RBAC 設定 | type: object

    1. configMap: ACL 定義を含む ConfigMap の名前。| type: string
    2. disableRBACRegistry: RBACRegistry によるパフォーマンスの向上を無効にし、従来の動作に戻します。デフォルトは false です。| type: boolean
  7. replicas: 必要な Pod の数。これは、明示的なゼロと指定されていないものを区別するためのポインターです。デフォルトは 1 です。| type: integer | format: int32
  8. resources: HawtIO コンソールのコンピュートリソース | type: object

    1. claims: Claims は、このコンテナーによって使用される、spec.resourceClaims で定義されたリソースの名前をリストします。これはアルファフィールドであり、DynamicResourceAllocation フィーチャーゲートを有効にする必要があります。このフィールドは変更不可能です。コンテナーに対してのみ設定できます。| type: array |

      1. items: ResourceClaim は PodSpec.ResourceClaims 内の 1 つのエントリーを参照します。| type: object | 必須: [ "name" ]
      2. name: name は、このフィールドが使用されている Pod の pod.spec.resourceClaims 内の 1 つのエントリーの名前と一致する必要があります。そのリソースをコンテナー内で利用できるようにします。| type: string
    2. limits: limits は、許可されるコンピュートリソースの最大量を示します。Kubernetes Resource Management for Pods and Containers を参照してください | type: object
    3. requests: requests は、必要なコンピュートリソースの最小量を示します。コンテナーで Requests が省略される場合、明示的に指定される場合にデフォルトで Limits に設定されます。指定しない場合は、実装定義の値に設定されます。リクエストは制限を超えることはできません。Kubernetes Resource Management for Pods and Containers を参照してください | type: object
  9. route: ルートのカスタム証明書設定 (ほとんどの OpenShift インストールでは必要ありません)。| type: object

    1. caCert: Ca 証明書の秘密鍵セレクター | type: object | 必須: [ "key" ]

      1. key: 選択するシークレットのキー。有効な秘密鍵でなければなりません。| type: string
      2. name: 参照先の名前。Kubernetes Names を参照してください | type: string
      3. オプション: シークレットまたはそのキーを定義する必要があるかどうかを指定します | type: boolean
    2. certSecret: ルート TLS 終了に使用されるカスタム証明書の TLS シークレットの名前 | type: object

      1. name: 参照先の名前。Kubernetes Names を参照してください | type: string
  10. routeHostname: HawtIO サービスを外部に公開するルートのエッジホスト名。指定されていない場合は自動的に生成され、[-] の形式になります。これは、クラスターに設定されているデフォルトのルーティングサブドメインです。フィールドが空の場合、Operator はルートを再作成し、ホストが再生成されることに注意してください。| type: string
  11. type: デプロイメントの種類デフォルトは cluster です。| type: string

    1. cluster: HawtIO は、認証されたユーザーがアクセスできるすべての名前空間でアプリケーションを検出し、管理できます。
    2. namespace: HawtIO は、デプロイメント名前空間内のアプリケーションを検出および管理できます。
  12. version: HawtIO コンソールコンテナーイメージのバージョン。非推奨: インストールにまだ必要な以前の Operator (<1.0.0) は下方互換性を確保するために残されています | type: string

第7章 Jolokia を使用した HawtIO Online 用の Spring Boot アプリケーションのセットアップ

注記

Camel ルートを停止するとヘルスステータスが DOWN に変わり、OpenShift によって Pod の再起動がトリガーされる場合、次の設定を行うことでこの動作が回避される可能性があります。

camel.routecontroller.enabled = true

これにより、監視対象ルートコントローラーが有効になり、ルートのステータスが Stopped になり、ヘルスチェックの全体的なステータスが UP になります。

このセクションでは、HawtIO による Spring Boot アプリケーションの監視を有効にする方法を説明します。簡単なサンプルアプリケーションをセットアップする基本原則から始まります。

注記

このアプリケーションは OpenShift 上で実行され、HawtIO によってオンラインで検出および監視されます。

すでに Spring Boot アプリケーションを実装している場合は、「アプリケーションへの Jolokia Starter 依存関係の追加」 にすすんでください。

注記

以下は、Apache Camel Spring-Boot サンプル リポジトリーの jolokia サンプルアプリケーションに基づいています。

前提条件

  • Maven がインストールされており、コマンドライン (CLI) で mvn が使用できる。

7.1. サンプル Spring Boot アプリケーションの設定

新しい Spring Boot アプリケーションを作成するには、Maven プロジェクトディレクトリー構造を手動で作成するか、archetype を実行して標準 Java プロジェクトのスキャフォールディングを生成し、個々のアプリケーションに合わせてカスタマイズすることができます。

  1. 必要に応じて、これらの値をカスタマイズします。

    archetypeVersion
    4.10.3.redhat-00019
    groupId
    io.hawtio.online.examples
    artifactId
    hawtio-online-example-camel-springboot-os
    version
    1.0.0
  2. Maven archetype を実行します。

    mvn archetype:generate  \
      -DarchetypeGroupId=org.apache.camel.archetypes  \
      -DarchetypeArtifactId=camel-archetype-spring-boot  \
      -DarchetypeVersion=4.10.3.redhat-00019  \
      -DgroupId=io.hawt.online.examples  \
      -DartifactId=hawtio-online-example  \
      -Dversion=1.0.0  \
      -DinteractiveMode=false \
      -Dpackage=io.hawtio
  3. artifactId という名前の新しいプロジェクトに移動します (上記の例では、hawtio-online-example)。

    hello world アプリケーションのサンプルが作成され、コンパイルが可能です。

    この時点で、アプリケーションはローカルで実行できるはずです。

  1. アプリケーションをテストするには、mvn spring-boot:run Maven ゴールを使用します。

    $ mvn spring-boot:run

7.2. アプリケーションへの Jolokia Starter 依存関係の追加

HawtIO がアプリケーション内の Camel ルートを監視できるようにするには、camel-jolokia-starter 依存関係を追加する必要があります。必要な推移的な依存関係がすべて含まれています。

  1. 必要な依存関係を <dependencies> セクションに追加します。

    <dependencies>
      ...
    
      <!-- Camel -->
      ...
    
      <!-- Dependency is mandatory for exposing Jolokia endpoint -->
      <dependency>
          <groupId>org.apache.camel.springboot</groupId>
          <artifactId>camel-jolokia-starter</artifactId>
      </dependency>
    
      <!-- Optional: enables debugging support for Camel -->
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-debug</artifactId>
        <version>4.10.3.redhat-00019</version>
     </dependency>
    
    ...
    </dependencies>

    設定の詳細は、Jolokia コンポーネントのドキュメント を参照してください。

  1. インフライト監視を有効にするには、Spring Boot のドキュメント に従って、application.properties ファイルに次のプロパティーも追加します。

    camel.springboot.inflight-repository-browse-enabled=true

7.3. OpenShift へのデプロイメント用のアプリケーション設定

スターターはすでに Kubernetes/OpenShift 環境の設定を管理しているため、特別な追加設定は必要ありません。

必須設定は、POD によって公開されるポートの名前のみで、その名前は jolokia に指定する必要があります。

spec:
  containers:
    - name: my-container
      ports:
        - name: jolokia
          containerPort: 8778
          protocol: TCP
          ........
      .......

7.4. Spring Boot アプリケーションの OpenShift へのデプロイ

  1. 前提条件

    • 適切なプロジェクトが選択されている (ドキュメント を参照)。
    • すべてのファイルが設定されている。
  2. 次の maven コマンドを実行します。

    mvn clean install -DskipTests -P openshift

    アプリケーションは S2I でコンパイルされ、OpenShift に デプロイされます

  1. Spring Boot アプリケーションが正しく実行されていることを確認します。

    Red Hat build of Quarkus ドキュメントの Red Hat build of Quarkus Java アプリケーションの OpenShift Container Platform へのデプロイ セクションに記載されている検証手順に従ってください。

  2. 新しい Spring Boot アプリケーションが正しく実行されると、HawtIO インスタンスによって検出されます (モードによって異なります。'Namespace' モードでは、インスタンスが同じプロジェクト内にある必要があります)。

    新しいコンテナーは、次のスクリーンショットのように表示されます。

    springboot の Pod リスト例
  1. Connect をクリックして、Spring Boot アプリケーションが HawtIO で使用できるかどうかを確認します。

    springboot 接続 ui の例

第8章 Jolokia を使用した HawtIO Online 用の Quarkus アプリケーションのセットアップ

このセクションでは、HawtIO による Quarkus アプリケーションの監視を有効にする方法を説明します。簡単なサンプルアプリケーションをセットアップする基本原則から始まります。ただし、Quarkus アプリケーションがすでに実装されている場合は、「サンプル Quarkus アプリケーションで Jolokia Java エージェントを有効にする」に進んでください。

便宜上、このドキュメントに基づいたサンプルプロジェクトがすでに実装され、ここ に公開されています。親リポジトリーのクローンを作成し、「HawtIO 対応 Quarkus アプリケーションの OpenShift へのデプロイメント」に進んでください。

Hawtio Online コンポーネントの説明

  • ユーザーまたは Hawtio Next からのあらゆるやり取りは、HTTP プロトコルを使用して Nginx ウェブサーバーに通信されます。
  • Nginx ウェブサーバーは外部向けのインターフェイスで、外部のコンシューマーに唯一表示されるサブコンポーネントです。
  • リクエストが行われると、Nginx Web サーバーは内部のゲートウェイコンポーネントに渡します。このコンポーネントは次の 2 つの異なる目的で使用されます。

    • Master-Guard Agent

      • ターゲットの Master Cluster API サーバー (OpenShift) に向けられたすべての要求は、このコンポーネントを通過する必要があり、ここで要求されたエンドポイント URL が承認されているかどうかのチェックが行われます。承認されていない URL (例: シークレットまたは configmaps (セキュリティー機密が高い場合あり) へのリクエスト) は拒否されます。
    • Jolokia Agent

      • Pod は Master Cluster 上に存在するため、最終的には Pod からの Jolokia 情報の要求も保護され、安全な方法で処理される必要があります。
      • このエージェントは、クライアントからのリクエストを内部的にターゲット Pod に送信する形式に正しく変換し、応答をクライアントに返します。

8.1. Quarkus アプリケーションサンプルの設定

  1. 新しい Quarkus アプリケーションの場合は、Maven quarkus クイックスタート が利用できます。例:

    mvn com.redhat.quarkus.platform:quarkus-maven-plugin:<quarkus.platform.version>:create\
    -DprojectGroupId=org.hawtio \
    -DprojectArtifactId=quarkus-helloworld \
    -Dextensions='openshift,camel-quarkus-quartz'
    注記

    Camel Quarkus の公式ドキュメントの最新の quarkus.platform.version を使用してください。

    1. quarkus-maven-plugin を使用してプロジェクトのスキャフォールディングを生成します。
    2. プロジェクトの maven groupIdorg.hawtio に設定し、必要に応じてカスタマイズします。
    3. maven artifactId プロジェクトを quarkus-helloworld に設定し、必要に応じてカスタマイズします。
    4. 以下の Quarkus エクステンションを使用します。

      1. openshift: Maven がローカル OpenShift クラスターにデプロイできるようにします。
      2. camel-quarkus-quartz : サンプル Quarkus アプリケーションで使用するために Camel エクステンション quartz を有効にします。
    5. クイックスタートを実行すると、Quarkus プロジェクトのスキャフォールディングが作成され、個々のアプリケーションをさらにカスタマイズできるようになります。
  2. アプリケーションをビルドして OpenShift にデプロイするには、src/main/resources/application.properties ファイルで次のプロパティーを指定する必要があります (関連の ドキュメント を参照)。

      # Set the Docker build strategy
      quarkus.openshift.build-strategy=docker
    
      # Expose the service to create an OpenShift Container Platform route
      quarkus.openshift.route.expose=true

8.2. Camel Quarkus アプリケーションの例の実装

  1. この例では、簡単な Camel ‘hello-world’ Quarkus アプリケーションを実装します。src/main/java/org/hawtio/SampleCamelRoute.java ファイルを以下の内容のプロジェクトに追加します。

    package org.hawtio;
    
    import jakarta.enterprise.context.ApplicationScoped;
    import org.apache.camel.builder.endpoint.EndpointRouteBuilder;
    
    @ApplicationScoped
    public class SampleCamelRoute extends EndpointRouteBuilder
    {
    
    	@Override
    	public void configure()
    	{
    		from(quartz("cron").cron("{{quartz.cron}}")).routeId("cron")
    			.setBody().constant("Hello Camel! - cron")
    			.to(stream("out"))
    			.to(mock("result"));
    
         	from("quartz:simple?trigger.repeatInterval={{quartz.repeatInterval}}").routeId("simple")
    			.setBody().constant("Hello Camel! - simple")
    			.to(stream("out"))
    			.to(mock("result"));
    	}
    }
    1. この例では、Camel ルートを介してコンテナーログの "Hello Camel …​" エントリーをログに記録します。
  2. 次のプロパティーを使用して src/main/resources/application.properties ファイルを変更します。

      # Camel
      camel.context.name = SampleCamel
    
      # Uncomment the following to enable the Camel plugin Trace tab
      #camel.main.tracing = true
      #camel.main.backlogTracing = true
      #camel.main.useBreadcrumb = true
    
      # Uncomment to enable debugging of the application and in turn
      # enables the Camel plugin Debug tab even in non-development
      # environment
      #quarkus.camel.debug.enabled = true
    
      # Define properties for the Camel quartz component used in the
      # example
      quartz.cron = 0/10 * * * * ?
      quartz.repeatInterval = 10000
  3. pom.xml ファイルの <dependencies> セクションに次の依存関係を追加します。これらは src/main/java/org/hawtio/SampleCamelRoute.java で定義されているルートのために必要です。アプリケーションに追加された Camel ルートが変更された場合は、これらを変更する必要があります。

    <dependency>
      <groupId>org.apache.camel.quarkus</groupId>
      <artifactId>camel-quarkus-stream</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.camel.quarkus</groupId>
      <artifactId>camel-quarkus-mock</artifactId>
    </dependency>

8.3. Quarkus アプリケーション例での Jolokia Java エージェントの有効化

  1. Maven プロパティーが src/main/resources/application.properties ファイルに渡されるようにするには、ファイル pom.xml<build> セクションに以下を追加する必要があります。

    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  2. pom.xml ファイルの <properties> セクションに次の Jolokia プロパティーを追加します。これらは、Quarkus コンテナーで実行中の jolokia java-agent を設定するために使用されます (プロパティーの説明は、Jolokia JVM エージェント のドキュメントを参照してください)。

      <properties>
      	...
    
      	<!-- The current HawtIO Jolokia Version -->
      	<jolokia-version>2.2.9.redhat-00001</jolokia-version>
    
      	<!--
    
        ===============================================================
        === Jolokia agent configuration for the connection with HawtIO
        ===============================================================
    
    	It should use HTTPS and SSL client authentication at minimum.
    	The client principal should match those the HawtIO instance provides (the default is `hawtio-online.hawtio.svc`).
      	-->
      	<jolokia.protocol>https</jolokia.protocol>
      	<jolokia.host>*</jolokia.host>
      	<jolokia.port>8778</jolokia.port>
    	<jolokia.useSslClientAuthentication>true</jolokia.useSslClientAuthentication>
    	<jolokia.caCert>/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt</jolokia.caCert>
      	<jolokia.clientPrincipal.1>cn=hawtio-online.hawtio.svc</jolokia.clientPrincipal.1>
      	<jolokia.extendedClientCheck>true</jolokia.extendedClientCheck>
      	<jolokia.discoveryEnabled>false</jolokia.discoveryEnabled>
    
    	...
      </properties>
  3. pom.xml ファイルの <dependencies> セクションに次の依存関係を追加します。

    <!--
    	This dependency is required for enabling Camel management via JMX / HawtIO.
    -->
    <dependency>
    	<groupId>org.apache.camel.quarkus</groupId>
    	<artifactId>camel-quarkus-management</artifactId>
    </dependency>
    
    <!--
    	This dependency is optional for monitoring with HawtIO but is required for HawtIO view the Camel routes source XML.
    -->
    <dependency>
    	<groupId>org.apache.camel.quarkus</groupId>
    	<artifactId>camel-quarkus-jaxb</artifactId>
    </dependency>
    
    <!--
    	Add this optional dependency, to enable Camel plugin debugging feature.
    -->
    <dependency>
    	<groupId>org.apache.camel.quarkus</groupId>
    	<artifactId>camel-quarkus-debug</artifactId>
    </dependency>
    
    <!--
    	This dependency is required to include the Jolokia agent jvm for
    	access to JMX beans.
    -->
    <dependency>
    	<groupId>org.jolokia</groupId>
    	<artifactId>jolokia-agent-jvm</artifactId>
    	<version>${jolokia-version}</version>
    	<classifier>javaagent</classifier>
    </dependency>
  4. Maven プロパティーフィルタリングが実装されている場合、アプリケーションのビルド中に ${jolokia…} 環境変数を pom.xml から渡す必要があります。このプロパティーの目的は、jolokia java-agent を実行するコンテナーの実行プロセスに JVM オプションを追加することです。次のプロパティーを使用して src/main/resources/application.properties ファイルを変更します。

    # Enable the jolokia java-agent on the quarkus application
    quarkus.openshift.env.vars.JAVA_OPTS_APPEND=-javaagent:lib/main/org.jolokia.jolokia-agent-jvm-${jolokia-version}-javaagent.jar=protocol=${jolokia.protocol}\,host=${jolokia.host}\,port=${jolokia.port}\,useSslClientAuthentication=${jolokia.useSslClientAuthentication}\,caCert=${jolokia.caCert}\,clientPrincipal.1=${jolokia.clientPrincipal.1}\,extendedClientCheck=${jolokia.extendedClientCheck}\,discoveryEnabled=${jolokia.discoveryEnabled}

8.4. HawtIO による検出のための Quarkus コンテナーからの Jolokia ポートの公開

  1. HawtIO がデプロイされたアプリケーションを検出するには、実行中のコンテナーに jolokia という名前のポートが存在している必要があります。したがって、src/main/resources/application.properties ファイルに次のプロパティーを追加する必要があります。

    # Define the Jolokia port on the container for HawtIO access
    quarkus.openshift.ports.jolokia.container-port=${jolokia.port}
    quarkus.openshift.ports.jolokia.protocol=TCP

8.5. HawtIO 対応 Quarkus アプリケーションの OpenShift へのデプロイメント

前提条件:

  1. コマンドライン (CLI) はすでに OpenShift クラスターにログインしており、プロジェクト が選択されている。
  2. すべてのファイルが設定されている場合は、次の maven コマンドを実行できる。

    ./mvnw clean package -Dquarkus.kubernetes.deploy=true
  3. ここ で説明する検証手順を使用して、Quarkus アプリケーションが正しく実行されていることを確認する。
  4. アプリケーションが正しく実行されていると仮定すると、新しい Quarkus アプリケーションは HawtIO インスタンスによって検出されるはずです (モードによって異なります。'Namespace' モードでは、同じプロジェクト内にある必要があります)。新しいコンテナーは、次のスクリーンショットのように表示されます。

    quarkus discovered app
  5. 接続をクリックすると、Quarkus アプリケーションを HawtIO で確認できます。

    接続された quarkus アプリケーション

関連資料:

第9章 Jolokia を使用した HawtIO Online 用 AMQ Broker の設定

OpenShift では、AMQ 管理コンソールの代わりに HawtIO Online を使用するように AMQ Broker デプロイメントを設定できます。ブローカーのデプロイメントを適切に設定すると、HawtIO Online はブローカーを検出し、専用の Artemis プラグインを表示します。AMQ 管理コンソールと同じブローカーランタイムデータを、一元化された Web UI から表示できます。アドレスやキューの作成など、同じ基本的な管理操作を実行することもできます。

次の手順では、ブローカーのデプロイメントのカスタムリソース (CR) インスタンスを設定して、HawtIO Online がデプロイメント内のブローカーを検出して表示できるようにする方法を説明します。

9.1. 前提条件

  • HawtIO Online と AMQ Broker は両方とも同じ OpenShift クラスターにインストールされます。
  • 同じ名前空間にデプロイされたアプリケーションのみを監視するように HawtIO Online を設定した場合は、その名前空間に AMQ Broker をデプロイする必要があります。それ以外の場合、AMQ Broker は任意の名前空間にデプロイできます。

    注記

9.2. HawtIO 用の AMQ Broker の設定

次の手順では、ブローカーのデプロイメントのカスタムリソース (CR) インスタンスを設定して、HawtIO Online がデプロイメント内のブローカーを検出して表示できるようにする方法を説明します。

  1. AMQ Broker をデプロイするために作成された CR を開きます
  2. 次に示すように、deploymentPlan セクションで、jolokiaAgentEnabled および managementRBACEnabled プロパティーを追加し、値を指定します。

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 4
        image: registry.redhat.io/amq7/amq-broker-rhel8:7.13
        ...
        jolokiaAgentEnabled: true
        managementRBACEnabled: false

    jolokiaAgentEnabled: HawtIO Online がデプロイメント内のブローカーのランタイムデータを検出して表示できるかどうかを指定します。HawtIO Online を使用するには、値を true に設定します。

    managementRBACEnabled デプロイメント内のブローカーに対してロールベースのアクセス制御 (RBAC) を有効にするかどうかを指定します。HawtIO Online は独自のロールベースのアクセス制御を使用するため、HawtIO Online を使用するには値を false に設定する 必要 があります。

    重要

    managementRBACEnabled の値を false に設定して HawtIO Online の使用を有効にすると、ブローカーの管理 MBean に認可が不要になります。managementRBACEnabledfalse に設定されている間は、ブローカー上のすべての管理操作が不正に使用される可能性があるため、AMQ 管理コンソールを使用 しない でください。

  3. CR インスタンスを保存します。
  4. ブローカーデプロイメントを先に作成したプロジェクトに切り替えます。

    oc project <project_name>
  5. 次のコマンドを実行して、変更を CR インスタンスに適用します。

    oc apply -f <path/to/custom_resource_instance>.yaml
  6. ブラウザーで Hawtio Online を開きます。設定した AMQ ブローカーは、アクセスが許可されている HawtIO 対応アプリケーション Pod のリストに表示されるはずです。
  7. Connect をクリックして AMQ Broker を表示します。
  8. 新しいブラウザーウィンドウが開き、HawtIO のアプリケーションが表示されます。Artemis プラグインはメインナビゲーションメニューからアクセスできます。

第10章 コンテナーおよびアプリケーションの表示

OpenShift の HawtIO にログインすると、HawtIO ホームページに利用可能なコンテナーが表示されます。

手順:

  1. コンテナーを管理 (作成、編集、または削除) するには、OpenShift コンソールを使用します。
  2. OpenShift クラスター上の HawtIO 対応アプリケーションと AMQ Broker (該当する場合) を表示するには、Discover タブをクリックします。

第11章 Apache Camel アプリケーションの表示および管理

HawtIO の Camel タブで、Apache Camel のコンテキスト、ルート、依存関係を表示および管理します。

次の詳細を表示できます。

  1. 実行中の Camel コンテキストすべてのリスト。
  2. Camel バージョン番号やランタイム統計など、各 Camel コンテキストの詳細情報。
  3. 各 Camel アプリケーションの全ルートおよびランタイム統計のリスト。
  4. 実行中のルートとリアルタイムのメトリクスのグラフィカル表示。

また、以下を行うと Camel アプリケーションと対話もできます。

  1. コンテキストの起動および一時停止。
  2. 再起動、停止、一時停止、再開などを実行できるよう、すべての Camel アプリケーションとそれらのルートのライフサイクルの管理。
  3. 実行中のルートのライブトレースおよびデバッグ。
  4. Camel エンドポイントへのメッセージの閲覧および送信。
注記

Camel タブは、1 つ以上の Camel ルートを使用するコンテナーに接続する場合のみ使用できます。

11.1. コンテキストの起動、一時停止、または削除

  1. Camel タブのツリービューで、Camel Contexts をクリックします。
  2. リストのコンテキストの横にあるボックスにチェックマークを入れます。
  3. Start または Suspend をクリックします。
  4. コンテキストを削除するには以下を行います。

    1. コンテキストを停止します。
    2. 楕円のアイコンをクリックし、ドロップダウンメニューで Delete を選択します。
注記

コンテキストを削除する場合、デプロイされたアプリケーションから削除します。

11.2. Camel アプリケーションの詳細表示

  1. Camel タブのツリービューで、Camel アプリケーションをクリックします。
  2. アプリケーションの属性と値のリストを表示するには、Attributes をクリックします。
  3. アプリケーション属性をグラフィカルに表示するには、Chart をクリックした後、Edit をクリックし、チャートに表示する属性を選択します。
  4. inflight exchange および blocked exchange を表示するには、Exchanges をクリックします。
  5. アプリケーションエンドポイントを表示するには、Endpoints をクリックします。リストは URLRoute ID、および direction で絞り込むことができます。
  6. メッセージ本文とメッセージヘッダーを別のタイプに変換するために使用される Camel 組み込みタイプ変換メカニズムに関連する統計を表示、有効化、および無効化するには、Type Converters をクリックします。
  7. JMX 操作 (XML からのルートの追加または更新、クラスパスで利用できる Camel コンポーネントの検索など) を表示および実行するには、Operations をクリックします。

11.3. Camel ルートリストの表示および Camel ルートとの対話

  1. ルートのリストを表示するには、以下を行います。

    1. Camel タブをクリックします。
    2. ツリービューでアプリケーションの routes フォルダーをクリックします。

      1
  2. 1 つまたは複数のルートを起動、停止、または削除するには、以下を行います。

    1. リストのルートの横にあるボックスにチェックマークを入れます。
    2. Start または Stop をクリックします。
    3. 最初にルートを停止してから削除する必要があります。停止したら楕円のアイコンをクリックし、ドロップダウンメニューで Delete を選択します。

      2
      注記
      • ルートを削除する場合、デプロイされたアプリケーションから削除します。
      • ツリービューで特定のルートを選択し、右上のメニューをクリックして起動、停止、または削除することもできます。
  3. ルートのグラフィカルな図を表示するには、Route Diagram をクリックします。
  4. inflight exchange および blocked exchange を表示するには、Exchanges をクリックします。
  5. エンドポイントを表示するには、Endpoints をクリックします。URL、Route ID、および方向でリストを絞り込むことができます。
  6. Type Converters をクリックし、Camel の組み込みタイプ変換メカニズムに関連する統計を表示、有効化、および無効化します。このメカニズムはメッセージ本文とメッセージヘッダーを別のタイプに変換するために使用されます。
  7. 特定のルートと対話するには、以下を行います。

    1. Camel タブのツリービューで、ルートを選択します。ルート属性と値のリストを表示するには、Attributes をクリックします。
    2. ルート属性をグラフィカルに表示するには、Chart をクリックします。Edit をクリックすると、チャートに表示する属性を選択できます。
    3. inflight exchange および blocked exchange を表示するには、Exchanges をクリックします。
    4. Operations をクリックして JMX 操作 (ルートを XML としてダンプ、ルートの Camel ID 値の取得など) を表示および実行できます。
  8. ルートを介してメッセージをトレースするには、以下を実行します。

    1. Camel タブのツリービューで、ルートを選択します。
    2. Trace を選択してから、Start tracing をクリックします。
  9. メッセージをルートに送信するには、以下を行います。

    1. Camel タブのツリービューでコンテキストのエンドポイントフォルダーを開き、エンドポイントを選択します。
    2. Send サブタブをクリックします。
    3. JSON または XML 形式のメッセージを設定します。
    4. Send をクリックします。
    5. ルートの Trace タブに戻り、ルートを介したメッセージのフローを確認します。

11.4. ルートのデバッグ

  1. Camel タブのツリービューで、ルートを選択します。
  2. Debug を選択し、Start debugging をクリックします。
  3. ブレークポイントを追加するには、図のノードを選択し、Add breakpoint をクリックします。ノードに赤い点が表示されます。

    camel route debug add breakpoint
  4. ノードがブレークポイントのリストに追加されます。

    3
  5. 下矢印をクリックして次のノードに移動するか、Resume ボタンをクリックしてルートの実行を再開します。

    camel route debug add breakpoint added
  6. Pause ボタンをクリックして、ルートのすべてのスレッドを一時停止します。
  7. 終了したら Stop debugging をクリックします。すべてのブレークポイントが消去されます。

第12章 JMX ドメインおよび MBean の表示および管理

JMX (Java Management Extensions) は、実行時にリソース (サービス、デバイス、およびアプリケーション) を動的に管理できる Java 技術です。リソースは MBean (Managed Bean) と呼ばれるオブジェクトで表現されます。リソースは、作成、実装、またはインストール後、すぐに管理および監視できます。

HawtIO の JMX プラグインを使用すると、JMX ドメインと MBean を表示および管理できます。MBean 属性の表示、コマンドの実行、および MBean の統計を示すチャートの作成を行うことができます。

JMX タブは、フォルダーに整理されたアクティブな JMX ドメインと MBean のツリービューを提供します。詳細を確認し、MBean でコマンドを実行できます。

手順:

  1. MBean 属性を表示および編集するには、以下を行います。

    1. ツリービューで MBean を選択します。
    2. Attributes タブをクリックします。
    3. 属性をクリックしてその詳細を表示します。
  2. 操作を実行するには、以下を行います。

    1. ツリービューで MBean を選択します。
    2. Operations タブをクリックし、リストにある操作の 1 つを展開します。
    3. Execute をクリックし、操作を実行します。
  3. チャートを表示するには、以下を行います。

    1. ツリービューで項目を選択します。
    2. Chart タブをクリックします。

第13章 Quartz スケジュールの表示および管理

Quartz は、ほとんどの Java アプリケーション内で統合できる、機能豊富なオープンソースジョブスケジューリングライブラリーです。Quartz を使用して、ジョブを実行するための単純または複雑なスケジュールを作成できます。

ジョブは、標準の Java コンポーネントとして定義され、プログラムで実行するほとんどの処理を実行できます。

Camel ルートが camel-quartz コンポーネントをデプロイすると、HawtIO は Quartz タブを表示します。JMX ツリービューから Quartz mbeans に交互にアクセスできることに注意してください。

手順:

  1. HawtIO で Quartz タブをクリックします。Quartz ページには、Quartz スケジューラーのツリービューと、SchedulerTriggersJobs のタブがあります。
  2. スケジューラーを一時停止または起動するには、Scheduler タブのボタンをクリックします。
  3. Triggers タブをクリックして、ジョブを実行するタイミングを決定するトリガーを表示します。たとえば、トリガーでは、ジョブを特定の時刻 (ミリ秒単位) に開始したり、指定した日に開始したり、指定した回数繰り返したり、特定の時刻に繰り返したりするように指定できます。

    1. トリガーの一覧をフィルタリングするには、ドロップダウンリストから StateGroupName、または Type を選択します。続いて、入力フィールドに選択または入力することで、さらにリストをフィルターできます。
    2. トリガーを一時停止、再開、更新、または手動で実行するには、Action 列のオプションをクリックします。
  4. Jobs タブをクリックして実行中のジョブのリストを表示します。テーブルの GroupNameDurableRecoverJob ClassName、および Description の列でリストをソートできます。

第14章 スレッドの表示

スレッドの状態を表示および監視できます。

手順:

  1. Runtime タブをクリックし、Threads サブタブをクリックします。
  2. Threads ページには、アクティブなスレッドと各スレッドのスタックトレースの詳細が表示されます。デフォルトでは、スレッドリストにはすべてのスレッドが ID 値が大きい順に表示されます。
  3. ID 値が小さい順に表示するには、ID 列ラベルをクリックします。
  4. 任意で、スレッドの状態 (例: Blocked) やスレッド名でリストを絞り込むことができます。
  5. ロッククラス名やスレッドのフルスタックトレースなど、特定スレッドの詳細情報を表示するには、Actions 列で More をクリックします。

第15章 HawtIO での正しいデータ表示を確認する

HawtIO のキューと接続の表示でキューが欠落していたり、接続が欠落していたり、一貫性のないアイコンが表示されたりする場合は、Jolokia が応答でマーシャリングする配列内の要素の最大数を指定する Jolokia コレクションサイズパラメーターを調整します。

手順:

  1. HawtIO の右上隅にあるユーザーアイコンをクリックして、Preferences をクリックします。

    hawtio の正しいデータ
  2. Maximum collection size オプションの値を大きくします (デフォルトは 50,000)。
  3. Close をクリックします。

第16章 OpenID Connect インテグレーション

HawtIO は、すでに OpenID プロバイダー として Keycloak をサポートしています。ただし、Keycloak は、HawtIO で使用される設定方法が非推奨であることを すでに発表していますOpenID Connect Core 1.0 は、分散認証 (OAuth 2 に基づく) の広く普及した仕様および標準方式であるため、HawtIO 4 では汎用 OpenID 認証がサポートされるようになりました。

16.1. ビルディングブロックと用語

ここでは、HawtIO が OpenID Connect と OAuth2 をどのように使用するかを理解するために、いくつかの基本的な概念を最確認します。OpenID Connect に基づく分散認証 (OAuth2 上に構築) には、主に 3 つの要素が関与しています。

  1. リソースサーバー:

    保護されたリソースをホストするサーバーコンポーネント。アクセスはアクセストークンに基づき制限または許可されます。通常、このサーバーは REST API を介してアクセスされ、サーバーがユーザーインターフェイスを提供することはありません。

  2. クライアント:

    ユーザー (リソース所有者として扱われる) に代わってリソースサーバーにアクセスするアプリケーション (通常はユーザーインターフェイスを持っています)。リソースサーバーにアクセスするには、まずクライアントがアクセストークンを取得する必要があります。

    OpenID Connect 仕様では、クライアントはリライングパーティー (RP) と呼ばれます。

  3. 認可サーバー:

    クライアントとリソースサーバー間の通信を調整するサーバー。クライアントは認可サーバーにユーザー (リソース所有者) を認証するように要求し、認証が成功すると、リソースサーバーにアクセスするためのアクセストークンがクライアントに発行されます。

    OpenID Connect 仕様では、認可サーバーは OpenID プロバイダー (OP) と呼ばれます。

OAuth2 と OpenID Connect の主な目的は、アプリケーションがユーザー認証情報を使用せずに API にアクセスし、トークンエクスチェンジに切り替えることを可能にすることです。HawtIO が上記の役割にどのようにマッピングされるかを知ることが重要です。

  • HawtIO クライアントアプリケーションは OAuth2 クライアントです。ユーザーは HawtIO Web アプリケーションと対話し、Hawtio Web アプリケーションは Jolokia エージェントが実行されている HawtIo サーバー (バックエンド) と通信します。Jolokia エージェントにアクセスする前に、HawtIO には OpenID Connect アクセストークンが必要です。そのため、HawtIO クライアントは、ユーザーを認可サーバーにリダイレクトして OpenID Connect 認証プロセスを開始します。
  • HawtIO サーバーアプリケーションは、Jolokia エージェント API を公開する JakartaEE アプリケーションです。Jolokia エージェント API は、アクセストークンの内容に基づきユーザーアクションを承認します。OAuth2 用語では、HawtIO サーバーはリソースサーバーです。

以下の UML 図は全体像を示しています。

oidc auth

最も重要なのは、HawtIO クライアントがユーザーの認証情報を処理することはないという点です。ユーザーは認可サーバーで認証し、HawtIO クライアントは後で HawtIO サーバー (およびその Jolokia API) へのアクセスに使用するアクセストークンのみ取得します。

16.2. HawtIO における汎用 OpenID Connect 認証

HawtIO 4 は、既存の OpenID Connect プロバイダー (Keycloak、Microsoft Entra ID、Auth0 など) と併用でき、次のライブラリーを使用してタスクを実行します。

  • HawtIO Server から OpenID Connect プロバイダーへの HTTP 通信を実装する Apache HTTP Client 4 (例: トークン署名検証用の公開鍵に関する情報を取得するため)。
  • OpenID Connect/OAuth2 アクセストークンを操作および検証するための Nimbus JOSE + JWT ライブラリー。

これらのライブラリーは HawtIO Server WAR に含まれているため、追加のライブラリーをインストール/デプロイする必要はありません (Keycloak 固有の設定の場合と同様)。外部 OpenID Connect プロバイダーを使用して HawtIO を設定するには、1 つの設定ファイルを提供し、HawtIO をその場所に指す必要があります。

OIDC (OpenID Connect) 設定の場所を指定するシステムプロパティーは -Dhawtio.oidcConfig ですが、それが指定されていない場合はデフォルトの場所がチェックされます。デフォルトは次のとおりです。

  • Karaf ランタイムの場合: ${karaf.base}/etc/hawtio-oidc.properties
  • Jetty ランタイムの場合: ${jetty.home}/etc/hawtio-oidc.properties
  • Tomcat ランタイムの場合: ${catalina.home}/conf/hawtio-oidc.properties
  • JBoss/EAP/Wildfly ランタイムの場合: ${jboss.server.config.dir}/hawtio-oidc.properties
  • Apache Artemis ランタイムの場合: ${artemis.instance.etc}/hawtio-oidc.properties
  • classpath:hawtio-oidc.properties にフォールバックします (組み込み HawtIO を使用する場合)

Keycloak 固有の設定とは異なり、1 つの *.properties ファイルで OpenID Connect 設定のすべてを設定できます。

以下はそのテンプレートです。

# OpenID Connect configuration requred at client side

# URL of OpenID Connect Provider - the URL after which ".well-known/openid-configuration" can be appended for
# discovery purposes
provider = http://localhost:18080/realms/hawtio-demo
# OpenID client identifier
client_id = hawtio-client
# response mode according to https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html
response_mode = fragment
# scope to request when performing OpenID authentication. MUST include "openid" and required permissions
scope = openid email profile
# redirect URI after OpenID authentication - must also be configured at provider side
redirect_uri = http://localhost:8080/hawtio
# challenge method according to https://datatracker.ietf.org/doc/html/rfc7636
code_challenge_method = S256
# prompt hint according to https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
prompt = login

# additional configuration for the server side

# if true, .well-known/openid-configuration will be fetched at server side. This is required
# for proper JWT access token validation
oidc.cacheConfig = true

# time in minutes to cache public keys from jwks_uri
jwks.cacheTime = 60

# a path for an array of roles found in JWT payload. Property placeholders can be used for parameterized parts
# of the path (like for Keycloak) - but only for properties from this particular file
# example for properly configured Entra ID token
#oidc.rolesPath = roles
# example for Keycloak with use-resource-role-mappings=true
#oidc.rolesPath = resource_access.${client_id}.roles
# example for Keycloak with use-resource-role-mappings=false
oidc.rolesPath = realm_access.roles

# properties for role mapping. Each property with "roleMapping." prefix is used to map an original role
# from JWT token (found at ${oidc.rolesPath}) to a role used by the application
roleMapping.admin = admin
roleMapping.user = user
roleMapping.viewer = viewer
roleMapping.manager = manager

# timeout for connection establishment (milliseconds)
http.connectionTimeout = 5000
# timeout for reading from established connection (milliseconds)
http.readTimeout = 10000
# HTTP proxy to use when connecting to OpenID Connect provider
#http.proxyURL = http://127.0.0.1:3128

# TLS configuration (system properties can be used, e.g., "${catalina.home}/conf/hawtio.jks")

#ssl.protocol = TLSv1.3
#ssl.truststore = src/test/resources/hawtio.jks
#ssl.truststorePassword = hawtio
#ssl.keystore = src/test/resources/hawtio.jks
#ssl.keystorePassword = hawtio
#ssl.keyAlias = openid connect test provider
#ssl.keyPassword = hawtio

このファイルは、HawtIO および OpenID Connect の一部を設定します。

  • OAuth2 - 認可サーバー、クライアント ID、いくつかの OpenID Connect 関連オプションの場所を設定します
  • JWKS - jwks_uri から取得した公開鍵のキャッシュ時間。jwks_uri は、認可サーバーが使用する公開鍵を公開するエンドポイントです。
  • JWT トークン設定 - 認証済みユーザーに関連付けられたロールを含むクレーム (JSON Web トークンのフィールド) に関する情報。また、認可サーバーで定義されたロールを、アプリケーション (HawtIO サーバーおよび Jolokia) で使用されるロールにマッピングすることもできます。
  • HTTP 設定 - サーバー側の HTTP クライアントが認可サーバーに接続するため (OpenID Connect メタデータと公開された公開鍵を取得するため) に使用します。

この設定例は特定のニーズに合わせて調整できますが、そのままコンテナー化された Keycloak と組み合わせて使用しても機能します。以下を参照してください。

16.3. JAAS ロールクラスの設定

OpenID Connect は、JAAS を介して HawtIO サーバー側で使用されます。HawtIO クライアントがアクセス トークン を取得すると、HTTP Authorization: Bearer <access_token> ヘッダーを使用してすべての Jolokia リクエストとともに送信されます。JWT トークンに含まれる各ロールは、(おそらくマッピング後に) JAAS サブジェクトの ロールプリンシパル として含まれます。デフォルトでは、ロールプリンシパルのクラス (明示的に設定されていない場合) は io.hawt.web.auth.oidc.RolePrincipal です。

ただし、別のクラス (単一の文字列引数コンストラクターを含むことが要件) をプリンシパルロールクラスとして使用するように設定することは可能です。たとえば、Apache Artemis で使用する場合、ロールは org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal になります。

ロールクラスを指定するシステムプロパティーがあります。

-Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal

16.4. Keycloak で HawtIO と OpenID Connect 認証を使用する

Keycloak インスタンスを実行する最も簡単な方法は、コンテナーを使用することです。

podman run -d --name keycloak \
  -p 18080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:latest start-dev

起動したら、http://localhost:18080/admin/master/console/ にアクセスし、新しいレルムを作成します。

keycloak によるレルムの作成

レルム作成画面で、事前設定された hawtio-client クライアントと 3 ユーザーを含む新しい hawtio-demo レルムを定義する hawtio-demo-realm.json をアップロードします。

  1. admin または manageradminvieweruser のロールを持つ admin
  2. viewer または viewer および user のロールを持つ viewer
  3. jdoe または user ロールのみを持つ jdoe

16.4.1. JWT トークンに関する問題の調査

付与されたアクセストークンの内容を確認するには、Keycloak インターフェイスを使用できます。"Clients" に移動して "hawtio-client" を選択し、"Client scopes" タブと "Evaluate" サブタブを使用します。

keycloak 評価

次に "Users" フィールドで、たとえば "admin" を選択し、"Generated access token" をクリックします。次に、サンプルトークンを調査します。

{
  "exp": 1709552728,
  "iat": 1709552428,
  "jti": "0f33971f-c4f7-4a5c-a240-c18ba3f97aa1",
  "iss": "http://localhost:18080/realms/hawtio-demo",
  "aud": "account",
  "sub": "84d156fa-e4cc-4785-91c1-4e0bda4b8ed9",
  "typ": "Bearer",
  "azp": "hawtio-client",
  "session_state": "181a30ac-fce1-4f4f-aaee-110304ccb0e6",
  "acr": "1",
  "allowed-origins":
  [
    "http://0.0.0.0:8181",
    "http://localhost:8080",
    "http://localhost:8181",
    "http://0.0.0.0:10001",
    "http://0.0.0.0:8080",
    "http://localhost:10001",
    "http://localhost:10000",
    "http://0.0.0.0:10000"
  ],
  "realm_access":
  {
    "roles":
    [
      "viewer",
      "manager",
      "admin",
      "user"
    ]
  },
  "resource_access":
  {
    "account":
    {
      "roles":
      [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  },
  "scope": "openid profile email",
  "sid": "181a30ac-fce1-4f4f-aaee-110304ccb0e6",
  "email_verified": false,
  "name": "Admin HawtIO",
  "preferred_username": "admin",
  "given_name": "Admin",
  "family_name": "HawtIO",
  "email": "admin@hawt.io"
}

JWT アクセストークンの構造がわかれば、ロールパスが正しく設定されているかどうかを確認できます。

# example for Keycloak with use-resource-role-mappings=false
oidc.rolesPath = realm_access.roles

16.5. Microsoft Entra ID で HawtIO と OpenID Connect 認証を使用する

HawtIO 4 は、Microsoft Entra ID でもテストされています。理論上、関連する OpenID プロバイダーメタデータ にアクセスできれば OpenID Connect プロバイダーを使用できるはずですが、実際はプロバイダー固有の設定が必要です。

クライアント は、"App registrations" ブレードを使用して Entra ID に登録されます。アプリケーションの登録時に最も重要となるのは、リダイレクト URI のプラットフォームの種類を決定することです。

entra create app

選択できるオプションは 2 つあります ("パブリッククライアント/ネイティブ (モバイルとデスクトップ)" プラットフォームは考慮しません)。この UI は、後でリダイレクト URI を設定するときに表示されます。

entra platforms

一見するだけでは何を選択するべきかわからないかもしれませんが、次のように記述すれば十分です。

  1. Web プラットフォーム:

    この種類のクライアントは、サーバー側のアプリケーションや API に適しています。

  2. SPA プラットフォーム:

    SPA アプリケーションはブラウザー内で実行されるため、"認可コードフロー" と、いわゆるパブリッククライアントを使用するのが自然です。なぜなら、ブラウザーアプリケーションに認証情報と秘密を保存する適切な方法がないからです。

SPA プラットフォームを選択すると、Entra ID UI に次のマークが表示されます。

entra spa

16.5.1. Entra ID で単一の SPA クライアントを使用する

Entra ID で SPA クライアントを設定した後、hawtio-oidc.properties で関連するオプションを設定できます。Entra ID の "App registrations" ブレードで "Endpoints" タブをクリックすると、次の内容が表示されます。

entra endpoints

テナント ID は、使用されている Entra ID/Azure テナントに固有の UUID です。以下は HawtIO の設定です。この場合の provider はテナントのベース URL、client_id は Overview of App Registration ページの "Application (client) ID" です。

# OpenID Connect configuration requred at client side

# URL of OpenID Connect Provider - the URL after which ".well-known/openid-configuration" can be appended for
# discovery purposes
provider = https://login.microsoftonline.com/00000000-1111-2222-3333-444444444444/v2.0
# OpenID client identifier
client_id = 55555555-6666-7777-8888-999999999999
# response mode according to https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html
response_mode = fragment
# scope to request when performing OpenID authentication. MUST include "openid" and required permissions
scope = openid email profile
# redirect URI after OpenID authentication - must also be configured at provider side
redirect_uri = http://localhost:8080/hawtio
# challenge method according to https://datatracker.ietf.org/doc/html/rfc7636
code_challenge_method = S256
# prompt hint according to https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
prompt = login

このような設定 (openid email profilescope パラメーターとして送信される) の問題点は、実際には email openid profile User がスコープとして想定されることです。読み取りおよび付与されたアクセストークンは次のとおりです (関連する JWT クレームのみ表示)。

{
  "aud": "00000003-0000-0000-c000-000000000000",
  "iss": "https://sts.windows.net/8fd8ed3d-c739-410f-83ab-ac2228fa6bbf/",
...
  "app_displayname": "hawtio",
...
  "scp": "email openid profile User.Read",
...
}

aud (オーディエンス) クレームは 00000003-0000-0000-c000-000000000000 であり、これは …​ Microsoft Graph API の OAuth2 クライアント ID です。

このようなアクセストークンは、HawtIO サーバー (Jolokia エージェントを使用) で使用されません。さらに、署名も Microsoft Graph API に関連付けられたキーを使用して作成されます。

Entra ID を適切に設定し、生成されたアクセストークンが HawtIO サーバーで 使用できる ことを確実化するためには、HawtIO クライアントと HawtIO サーバーのそれぞれに対して (つまり合計 2 つの) アプリケーション登録 が必要です。次のサブチャプターを参照してください。

16.5.2. Entra ID で Web クライアントと SPA を使用する

Entra ID で 2 つのアプリケーション登録を設定することが推奨されます。

  • HawtIO クライアントアプリケーション用の SPA クライアント - PKCE が有効になっている OAuth2 パブリッククライアント を設定する方法です。
  • HawtIO Server アプリケーションの Web (API) (実際は Jolokia API) - たとえば api://hawtio-server/Jolokia.Access という名前のスコープとして表される API を公開する Entra ID。これは上記の HawtIO Client アプリケーションで許可済み API として設定されます。

最後に、認可コードフロー が開始されると、スコープパラメーターで要求されたスコープの 1 つが、HawtIO サーバーアプリケーションに定義された scope になります (api://hawtio-server/Jolokia.Access など)。

Entra ID で必要な設定をまとめてみましょう。

  1. "Web" リダイレクト URI を使用して hawtio-server アプリケーション登録を作成します。
  2. "Expose an API" セクションで、HawtIO クライアントから要求される可能性のあるアクセススコープを表すスコープを追加します。

    entra scope

    これにより、後で使用する参照可能な api://hawtio-server/Jolokia.Access スコープが作成されます。

  3. hawtio-server の "App roles" セクションで、このクライアントのスコープ内のユーザーに割り当てるロールを定義します。以下はその例です。

    entra roles
  4. hawtio-server の "Enterprise Applications" ブレードで、"Users and groups" タブに移動し、ユーザーロールの割り当てを追加します。以下に例を示します。

    entra user roles
  5. "SPA" リダイレクト URI を使用して hawtio-client アプリケーション登録を作成します。

    entra spa definition
  6. hawtio-client アプリケーション登録の "API Permissions" セクションで、hawtio-server 公開 API の 委譲権限 を追加します。

    entra delegated permission
  7. これにより、次のような委譲済み権限セットが設定されます。

    entra permissions
    注記

    委譲済み権限の詳細は、Microsoft Entra ID ドキュメント を参照してください。

  8. Enterprise Application ブレードの hawtio-client に、ユーザーとロールのマッピングは必要ありません。
  9. 上記の設定を行うと、HawtIO 設定の scope パラメーターを適切に設定できます。

    これにより、後で使用する参照可能な api://hawtio-server/Jolokia.Access スコープが作成されます。

  10. hawtio-server の "App roles" セクションで、このクライアントのスコープ内のユーザーに割り当てるロールを定義します。以下はその例です。
  11. hawtio-server の "Enterprise Applications" ブレードで、"Users and groups" タブに移動し、ユーザーロールの割り当てを追加します。以下に例を示します。
  12. "SPA" リダイレクト URI を使用して hawtio-client アプリケーション登録を作成します。
  13. hawtio-client アプリケーション登録の "API Permissions" セクションで、hawtio-server 公開 API の委譲済み権限を追加します。

    これにより、次のような委譲済み権限セットが設定されます。

    注記

    委譲済み権限の詳細は、Microsoft Entra ID ドキュメント を参照してください。

  14. Enterprise Application ブレードの hawtio-client に、ユーザーとロールのマッピングは必要ありません。

上記の設定を行うと、HawtIO 設定でスコープパラメーターを適切に設定できます。

# scope to request when performing OpenID authentication. MUST include "openid" and required permissions
scope = openid email profile api://hawtio-server/Jolokia.Access

16.5.3. アクセストークンの設定

最後になりますが、非常に重要な設定項目がトークン設定です。HawtIO Server を表すアプリケーション (および付与されたアクセストークンを使用するコンポーネント) である hawtio-server アプリケーションの登録では、groups クレームがアクセストークンに追加されていることを確認する必要があります。

最小限の設定は次のとおりです。

entra token configuration

groups クレームには セキュリティーグループディレクトリーロール を含める必要があり、グループは UUID ではなく名前で表す必要があります。

entra token groups

参考までに、hawtio-server アプリケーション登録のマニフェストに関連する JSON スニペットを次に示します。

"optionalClaims":
{
  "idToken":
  [
    {
      "name": "groups",
      "source": null,
      "essential": false,
      "additionalProperties": []
    }
  ],
  "accessToken":
  [
    {
      "name": "groups",
      "source": null,
      "essential": false,
      "additionalProperties":
      [
        "sam_account_name"
      ]
    },
...

付与されたアクセストークンは、Microsoft Graph API オーディエンス固有のものではなくなります。これは hawtio-server 用になります。aud クレームは hawtio-server アプリケーション登録の UUID、appid クレームは hawtio-client アプリケーション登録の UUID です。

{
  "aud": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "iss": "https://sts.windows.net/.../",
  "iat": 1709626257,
  "nbf": 1709626257,
  "exp": 1709630939,
...
  "appid": "55555555-6666-7777-8888-999999999999",
...
  "groups":
  [
    ...
  ],
...
  "name": "hawtio-viewer",
...
  "roles":
  [
    "HawtIO.User"
  ],
  "scp": "Jolokia.Access",

このロールは変換され (マッピングを含む場合もある) は、roles クレームで使用可能になり、設定に反映されます。

# a path for an array of roles found in JWT payload. Property placeholders can be used for parameterized parts
# of the path (like for Keycloak) - but only for properties from this particular file
# example for properly configured Entra ID token
#oidc.rolesPath = roles
...
# properties for role mapping. Each property with "roleMapping." prefix is used to map an original role
# from JWT token (found at ${oidc.rolesPath}) to a role used by the application
roleMapping.HawtIO.User = user
...

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る