HawtIO 診断コンソールガイド
Red Hat build of 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 用の診断コンソールです。これは、React や PatternFly などの最新の 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 のアーキテクチャーの概要を示しています。
HawtIO スタンドアロン
OpenShift 上の HawtIO
第2章 HawtIO のインストール リンクのコピーリンクがクリップボードにコピーされました!
HawtIO コンソールの使用を開始するには、いくつかの方法があります。
2.1. アプリケーションのバージョン リンクのコピーリンクがクリップボードにコピーされました!
- HawtIO: 4.2.0.redhat-00034
- Camel Spring Boot: 4.10.3.redhat-00019
- 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 ファイルがある場所を把握している。
手順:
以下の例のように、
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/ からインストールしてください。
手順:
jbangコマンドを使用して、マシンに HawtIO の最新バージョンをインストールします。$ jbang app install -Dhawtio.jbang.version=4.2.0.redhat-00034 hawtio@hawtio/hawtio注記このインストール方法は、jbang>=0.115.0 でのみ利用できます。
HawtIO コマンドがインストールされます。次のコマンドで HawtIO インスタンスを起動します。
$ hawtioこのコマンドは、http://localhost:8080/hawtio/ でコンソールを自動的に開きます。ポート番号を変更するには、次のコマンドを実行します。
$ hawtio --port 8090CLI の設定オプションの詳細を確認するには、次のコードを実行してください。
$ 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 アプリケーションに接続できます。
手順:
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>application.propertiesに次の設定を追加して認証を無効にします。quarkus.hawtio.authenticationEnabled = false- 認証を設定することもできます。「Quarkus 認証メカニズム」を参照してください。
以下のように、開発モードで Quarkus アプリケーションを使用して HawtIO を実行します。
mvn compile quarkus:dev- http://localhost:8080/hawtio/ を開き、HawtIO コンソールを表示します。
2.5. Spring Boot アプリケーションの実行 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO は 2 つのステップで Spring Boot アプリケーションに接続できます。
手順:
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>次の行を
application.propertiesに追加して、HawtIO および Jolokia エンドポイントを有効にします。spring.jmx.enabled = true management.endpoints.web.exposure.include = hawtio,jolokia次のように、Spring Boot アプリケーションを開発モードで使用して HawtIO を実行します。
mvn spring-boot:run- http://localhost:8080/actuator/hawtio を開き、HawtIO コンソールを表示します。
2.5.1. HawtIO パスの設定 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO エンドポイントに /actuator ベースパスを使用しない場合は、次のコマンドを実行することもできます。
management.endpoints.web.base-pathプロパティーを使用して Spring Boot 管理ベースパスをカスタマイズします。management.endpoints.web.base-path = /management.endpoints.web.path-mapping.hawtioプロパティーを設定して、HawtIO エンドポイントへのパスをカスタマイズすることもできます。management.endpoints.web.path-mapping.hawtio = hawtio/console以下に例を示します。
- HawtIO Spring Boot example に、実際に動作する Spring Boot の例があります。この例は、Apache Camel ルート、メトリクスなどに関する情報を公開する Web アプリケーションを監視する方法を示します。
-
リアルタイム値とチャートに適した MBean は
java.lang/OperatingSystemです。Camel ルートを確認してください。ツリー内で選択を変更すると、その内容に基づいて使用可能なタブのリストが動的に変化します。
第3章 HawtIO の設定 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO は、サーバーランタイムとクライアントコンソールの 2 つの主要コンポーネントで構成されています。
サーバーランタイムは、サーバー側で実行される Java バックエンドであり、クライアントコンソールはブラウザーにデプロイされ、実行される JavaScript フロントエンドです。
したがって、HawtIO には 2 種類の設定があります。
HawtIO とそのプラグインの動作は、システムプロパティーで設定できます。
- 設定プロパティー - サーバーランタイムの設定
- hawtconfig.json: クライアントコンソールの設定
3.1. 設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
HawtIO サーバーランタイムとそのプラグインは、システムプロパティーを通じて動作を設定できます。
次の表に、HawtIO のコアシステムとさまざまなプラグインの設定プロパティーを示します。
セキュリティーと認証に関連する設定プロパティーは、セキュリティー を参照してください。
| システム | デフォルト | 説明 |
|---|---|---|
| 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 の最上位レベルでは現在、次のオプションが提供されています。
最上位レベルの設定オプション
| オプション | 説明 |
|---|---|
|
| コンソールのブランディングオプション。 |
|
| ログインページの設定。 |
|
| about モーダル設定。 |
|
| コンソールに表示しないプラグインのリスト。 |
|
| JMX プラグインの設定。 |
|
| HawtIO Online 設定。 |
3.5.1.1. ブランディング リンクのコピーリンクがクリップボードにコピーされました!
branding 設定では、アプリケーション名、ロゴ、スタイル、ファビコン (favicon) など、コンソールのブランディングをカスタマイズするオプションが提供されます。
ブランディング設定オプション
| オプション | デフォルト | 説明 |
|---|---|---|
|
|
| コンソールのアプリケーション名をカスタマイズします。名前はブラウザーのタイトルヘッダーで使用され、オプションでコンソールページのヘッダーでも使用されます。 |
|
|
| コンソールページのヘッダーにアプリケーション名を表示します。 |
|
|
| アプリケーションロゴの代わりに URL を使用します。 |
|
|
| 会社のロゴの代わりに URL を使用します。 |
|
| コンソールに適用するカスタム CSS を提供します。 | |
|
| ファビコンの代わりに 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 ログインページに表示される情報をカスタマイズするオプションが提供されます。
ログイン設定オプション
| オプション | デフォルト | 説明 |
|---|---|---|
|
| ログインページに表示されるテキストを設定します。 | |
|
| [ ] |
ログインページの下部にリンクを提供します。値は、 |
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 設定オプション
| オプション | デフォルト | 説明 |
|---|---|---|
|
|
| About モーダルのタイトルをカスタマイズします。 |
|
| About モーダルに説明テキストを入力します。 | |
|
|
| URL を使用して、About モーダルのロゴイメージを置き換えます。 |
|
| [ ] |
コンソールで使用される追加コンポーネントの名前とバージョンの情報を提供します。値は、 |
|
| バージョン情報モーダルで著作権情報を設定します。 |
hawtconfig.json の about 設定は次のようになります。
"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.json の jmx 設定を介してカスタマイズできます。
デフォルトでは、HawtIO は JMX プラグインを介してすべての MBean をワークスペースにロードします。場合によっては、アプリケーションの負荷を軽減するために、カスタム HawtIO コンソールで MBean の一部のみをロードする必要がある場合があります。jmx 設定には、ワークスペースにロードされる MBean を制限するオプションが用意されています。
JMX プラグイン設定オプション
| オプション | デフォルト | 説明 |
|---|---|---|
|
| 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.json の online 設定で指定できます。
HawtIO オンライン設定オプション
| オプション | デフォルト | 説明 |
|---|---|---|
|
|
プロジェクトの監視に使用するセレクターを設定します。これは、HawtIO デプロイメントタイプが | |
|
|
OpenShift Web コンソールリンクを設定します。HawtIO デプロイメントが |
ConsoleLink 設定オプション
| オプション | デフォルト | 説明 |
|---|---|---|
|
| リンクのテキスト表示を設定します。 | |
|
|
リンクが表示されるアプリケーションメニューのセクションを設定します。これは、HawtIO デプロイメントタイプが | |
|
|
アプリケーションメニューのリンクの前に使用されるアイコンのパスを、HawtIO ステータス URL を基準として設定します。これは、 |
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 コアシステムのセキュリティー関連の設定プロパティーを示します。
| 名前 | デフォルト | 説明 |
|---|---|---|
| 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 で プロパティーベースの認証 を使用する方法を説明します。
プロパティーベースの認証は、実稼働環境では推奨されません。このメカニズムは開発とテストのみを目的としています。
HawtIO でプロパティーベースの認証を使用するには、次の依存関係を
pom.xmlに追加します。<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-elytron-security-properties-file</artifactId> </dependency>その後、
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 を使用するには、以下の手順を実行します。
org.springframework.boot:spring-boot-starter-securityをpom.xmlの依存関係に追加します。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>src/main/resources/application.propertiesの Spring Security 設定は次のようになります。spring.security.user.name = hawtio spring.security.user.password = s3cr3t! spring.security.user.roles = admin,viewerSpring 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(); } }注記CsrfAuthenticationStrategyとCsrfLogoutHandlerによって以前のトークンが消去されるため、認証成功およびログアウト成功後にトークンを更新する必要があります。クライアントアプリケーションは、新しいトークンを取得せずに、POST などの安全でない HTTP 要求を実行できません。
以下に例を示します。
作業例は、springboot-security example を参照してください。
4.3.1.1. Spring Security を使用したリモートアプリケーションへの接続 リンクのコピーリンクがクリップボードにコピーされました!
Spring Security を有効にしてリモート Spring Boot アプリケーションに接続しようとする場合は、Spring Security 設定で HawtIO コンソールからのアクセスが許可されていることを確認してください。デフォルトの CSRF 保護により Jolokia エンドポイントへのリモートアクセスが禁止されている可能性が高く、その場合は HawtIO コンソールで認証エラーが発生します。
アプリケーションが CSRF 攻撃のリスクにさらされることに注意してください。
最も簡単な解決策は、次のようにリモートアプリケーションで 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(); } }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 と統合するには、以下を行う必要があります。
- Keycloak サーバーを準備する
- 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 アプリケーションがパブリッククライアントとしてインストールされており、admin や viewer などのいくつかのレルムロールが定義されています。これらのロールの名前は、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 詳細設定に応じて、pkceMethod を S256 に設定します。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 に含まれています。
| プラグイン | 説明 |
|---|---|
| Apache ActiveMQ Artemis には独自の Web 管理コンソールが付属しており、これは Artemis ブローカー専用のビューを提供する外部プラグインを使用して HawtIO に構築されています。コンソールを通じて複数のアクセプターおよびアドレス間を移動し、操作できます。詳細は、Artemis User Manual - Management Console を参照してください。 | |
| Apache Camel のサポートを追加します。Camel コンテキスト、ルート、エンドポイントなどを参照したり、実行中のルートとそのメトリクスを視覚化したり、エンドポイントを作成したり、メッセージを送信したり、メッセージフローをトレースしたり、ルートをプロファイルしてどの部分が高速で実行され、どの部分が低速で実行されているかを特定したりできます。
| |
| ローカルまたはリモート JVM に接続できます。
| |
| 診断 |
Java Flight Recorder を制御し、クラスヒストグラムを表示し、JVM フラグにアクセスできます。 |
| MBean との対話、リアルタイム属性の表示、チャート作成、操作の呼び出しのためのコア JMX サポートを提供します。 | |
| JVM 内のログを表示するサポートを提供します。
| |
| Quartz スケジューラーのステータスを表示し、設定できます。また、コンソールからジョブとトリガーを設定して実行することもできます。Camel アプリケーションで Camel Quartz コンポーネントを使用する場合、このプラグインは自動的に有効になります。 | |
| スレッド、システムプロパティー、主要なメトリクスなど、Java プロセスの概要を提供します。 | |
| Spring Boot アプリケーションに関する情報を表示します。
|
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 をインストールおよびデプロイするには、以下を実行します。
-
Web ブラウザーで、
cluster admin権限を持つユーザーとして OpenShift コンソールにログインします。 - Operators をクリックした後、OperatorHub をクリックします。
- 検索フィールドウィンドウで HawtIO と入力し、Operator の一覧をフィルタリングします。HawtIO Operator をクリックします。
HawtIO Operator インストールウィンドウで、Install をクリックします。Create Operator Subscription フォームが表示されます。
- Update Channel の場合は、stable-v1 を選択します。
Installation Mode では、デフォルト (クラスターの特定の namespace) を受け入れます。
注記このモードは、Operator が HawtIO CR を監視する namespace を決定します。これは、完全にデプロイされるときに HawtIO が監視する namespace とは異なります。HawtIO が監視する namespace は、HawtIO CR を介して設定できます。
- Installed Namespace では、HawtIO Operator をインストールする namespace を選択します。
Update Approval では、Automatic または Manual を選択し、OpenShift が HawtIO Operator への更新を処理する方法を設定します。
- Automatic 更新オプションが選択され、新しいバージョンの HawtIO Operator が利用可能な場合、OpenShift Operator Lifecycle Manager (OLM) は人的介入なしに、HawtIO の実行中のインスタンスを自動的にアップグレードします。
- Manual 更新オプションが選択され、Operator の新しいバージョンが利用可能な場合、OLM は更新要求のみを作成します。クラスター管理者は、HawtIO Operator を新しいバージョンに更新するために、更新要求を手動で承認する必要があります。
- Install をクリックすると、OpenShift は現在の namespace に HawtIO Operator をインストールします。
- インストールを確認するには、Operators をクリックした後、Installed Operators をクリックします。HawtIO は Operator のリストに表示されるはずです。
OpenShift Web コンソールを使用して HawtIO をデプロイするには、以下を実行します。
- Installed Operators のリストの Name 列の下にある HawtIO Operator をクリックします。
- Provided APIs の Operator Details ページで、Create HawtIO をクリックします。
設定のデフォルト値を使用するか、任意でデフォルト値を編集します。
- Replicas の場合、HawtIO のパフォーマンスを向上させるには (たとえば、高可用性環境の場合)、HawtIO に割り当てられる Pod の数を増やすことができます。
- RBAC (ロールベースアクセス制御) では、デフォルトの RBAC 動作をカスタマイズする場合や、HawtIO Operator をインストールした namespace に ConfigMap ファイルがすでに存在する場合にのみ、Config Map フィールドに値を指定します。
- Nginx は、HawtIO Operator インストールのパフォーマンスチューニング を参照してください。
Type には、以下のいずれかを指定します。
- クラスター: HawtIO が、HawtIO 対応アプリケーションの OpenShift クラスター上にあるすべての namespace を監視する場合。
- namespace: HawtIO が、同じ namespace にデプロイされた HawtIO 対応アプリケーションのみを監視する場合。
- Create をクリックします。HawtIO Operator Details ページが開き、デプロイメントのステータスが表示されます。
HawtIO を開くには、以下を実行します。
- namespace デプロイメントの場合: OpenShift Web コンソールで、HawtIO Operator がインストールされているプロジェクトを開き、Overview を選択します。Project Overview ページで、Launcher セクションまで下にスクロールし、HawtIO リンクをクリックします。
- cluster デプロイメントでは、OpenShift Web コンソールのタイトルバーで、グリッドアイコンをクリックします。ポップアップメニューの Red Hat Applications で、HawtIO URL リンクをクリックします。
- HawtIO にログインします。ブラウザーに Authorize Access ページが表示され、必要なパーミッションが表示されます。
- Allow selected permissions をクリックします。HawtIO がブラウザーで開き、アクセスが許可される HawtIO 対応アプリケーション Pod が表示されます。
- 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 つのユーザーロールがあります。
- admin: ユーザーが OpenShift で Pod を更新できる場合、ユーザーには HawtIO の admin ロールが付与されます。ユーザーは、HawtIO で Pod の書き込み MBean 操作を実行できます。
- viewer: ユーザーが OpenShift で Pod を取得できる場合、ユーザーには HawtIO の viewer ロールが付与されます。ユーザーは、HawtIO で Pod の読み取り専用 MBean 操作を実行できます。
6.2.1. OpenShift 4 上の HawtIO のアクセスロールの決定 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO のロールベースアクセス制御は、Pod に対するユーザーの OpenShift パーミッションから推測されます。特定のユーザーに付与された HawtIO アクセスロールを確認するには、Pod に対してユーザーに付与される OpenShift パーミッションを取得します。
前提条件:
- ユーザーの名前
- Pod の名前
手順:
ユーザーが Pod に対して HawtIO の admin ロールを持っているかどうかを確認するには、以下のコマンドを実行してユーザーが OpenShift で Pod を更新できるかどうかを確認します。
oc auth can-i update pods/<pod> --as <user>- 応答が yes の場合、ユーザーには Pod の admin ロールがあります。ユーザーは、HawtIO で Pod の書き込み操作を実行できます。
ユーザーが Pod に対して HawtIO の viewer ロールを持っているかどうかを確認するには、以下のコマンドを実行してユーザーが OpenShift で Pod を取得できるかどうかを確認します。
oc auth can-i get pods/<pod> --as <user>- 応答が yes の場合、ユーザーには Pod の viewer ロールがあります。ユーザーは、HawtIO で Pod の読み取り専用操作を実行できます。コンテキストに応じて、HawtIO は、オプションを無効にするか、ユーザーが書き込み MBean 操作を試行したときに operation not allowed for this user メッセージを表示することによって、viewer ロールを持つユーザーが書き込み MBean 操作を実行できないようにします。
- 応答が 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 ロールをカスタマイズするには、以下を実行します。
RBAC ConfigMap を作成します。
現在の OpenShift プロジェクトが、HawtIO をインストールするプロジェクトであることを確認します。たとえば、hawtio-test プロジェクトに HawtIO をインストールするには、以下のコマンドを実行します。
oc project hawtio-testテンプレートから 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 -以下のコマンドを使用して、新しいカスタム ConfigMap を編集します。
oc edit ConfigMap custom-hawtio-rbac- 編集を保存すると、ConfigMap リソースが更新されます。
- 上記のように新しい HawtIO CR を作成し、configMap プロパティーの下に新しい ConfigMap の名前を追加して rbac セクションを編集します。
- 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 のパフォーマンスを調整するには、clientBodyBufferSize、proxyBuffers、および subrequestOutputBufferSize 環境変数のいずれかを設定します。たとえば、HawtIO を使用して多数の Pod とルート (合計 100 ルートなど) を監視する場合、HawtIO の subrequestOutputBufferSize 環境変数を 60m から 100m の間に設定することで、読み込みタイムアウトの問題を解決できます。
6.5.1. HawtIO Operator インストールのパフォーマンスチューニング リンクのコピーリンクがクリップボードにコピーされました!
Openshift 4.x では、HawtIO のデプロイ前後に Nginx パフォーマンスチューニング環境変数を設定できます。これを後で行うと、OpenShift は HawtIO を再デプロイします。
前提条件:
-
OpenShift クラスターにアクセス可能な
cluster admin権限が必要です。
手順:
環境変数は、HawtIO のデプロイ前後に設定できます。
HawtIO のデプロイ前に環境変数を設定 するには、以下を実行します。
- OpenShift Web コンソールの、HawtIO Operator がインストールされているプロジェクトで、Operators> Installed Operators> HawtIO Operator を選択します。
- HawtIO タブをクリックし、Create HawtIO をクリックします。
- Create HawtIO ページで、Form view で Config> Nginx セクションまでスクロールダウンします。
Nginx セクションをデプロイメントしてから、環境変数を設定します。以下に例を示します。
-
clientBodyBufferSize: 256k -
proxyBuffers: 16 128k -
subrequestOutputBufferSize: 100m
-
- Create をクリックして HawtIO をデプロイします。
- デプロイメントが完了したら、Deployments> HawtIO-console ページを開いて Environment をクリックし、環境変数がリストにあることを確認します。
HawtIO のデプロイ後に環境変数を設定 するには、以下を実行します。
- OpenShift Web コンソールで、HawtIO がデプロイされているプロジェクトを開きます。
- Operators> Installed Operators> HawtIO Operator を選択します。
- HawtIO タブをクリックしてから、HawtIO をクリックします。
- Actions> Edit HawtIO を選択します。
-
Editor ウィンドウで、
specセクションまでスクロールダウンします。 以下のように、
specセクションで、新規のnginxセクションを追加し、1 つ以上の環境変数を指定します。apiVersion: hawt.io/v2 kind: HawtIO metadata: name: hawtio-console spec: type: Namespace nginx: clientBodyBufferSize: 256k proxyBuffers: 16 128k subrequestOutputBufferSize: 100m- Save をクリックします。OpenShift は HawtIO を再デプロイします。
- 再デプロイメントが完了したら、Workloads> Deployments> HawtIO-console ページを開き、Environment をクリックしてリスト内の環境変数を確認します。
6.5.2. HawtIO でアプリケーションを表示するためのパフォーマンスチューニング リンクのコピーリンクがクリップボードにコピーされました!
HawtIO の強化されたパフォーマンスチューニング機能により、多数の MBean を持つアプリケーションを表示できます。この機能を使用するには、次の手順を実行します。
前提条件:
-
OpenShift クラスターにアクセス可能な
cluster admin権限が必要です。
手順:
アプリケーションのメモリー制限を増やします。
HawtIO のデプロイ後にメモリー制限を増やす には、以下を実行します。
- OpenShift Web コンソールで、HawtIO がデプロイされているプロジェクトを開きます。
- Operators> Installed Operators> HawtIO Operator を選択します。
- HawtIO タブをクリックしてから、HawtIO をクリックします。
- Actions> Edit HawtIO を選択します。
-
Editor ウィンドウで、
spec.resourcesセクションまでスクロールダウンします。 - リクエスト と 制限 の両方を優先する値に更新します。
- 保存をクリックします。
- HawtIO は、新しいリソース仕様を使用して再デプロイする必要があります。
6.6. HawtIO CR プロパティー リンクのコピーリンクがクリップボードにコピーされました!
このセクションには、ブランディング、バージョン情報、コンソールリンクなど、カスタマイズ可能なすべてのカスタムリソースプロパティーが含まれます。
auth: 認証設定 | type: object
- internalSSL: 内部通信に SSL を使用します。OpenShift インストールの場合、これは常に true に設定する必要があります。
- clientCertCheckSchedule: 証明書の有効期限をチェックする頻度を定義する CronJob スケジュール。スケジュールが設定されていない場合、クライアントのローテーションは有効になりません | type: string
- clientCertCommonName : 生成されたクライアント証明書 CN| type: string
- clientCertExpirationDate: 生成されたクライアント証明書の有効期限 | type: string | format: date-time
- clientCertExpirationPeriod: 証明書をローテーションできる有効期限までの期間 (時間単位)。デフォルトは 24 時間に設定されています | type: integer
config : HawtIO コンソールの設定 | type: object
about: About ページに表示される情報 | type: object
- additionalInfo: description セクションのテキスト | タイプ: 文字列
- copyright: copyright セクションのテキスト | type: string
- imgSrc: ページに表示されるイメージ。これは、HawtIO ステータス URL からの相対パス、または絶対 URL を指定可能です | type: string
productInfo: 製品情報のリスト | type: array
items: About ページに表示される製品情報 | type: object | 必須: [ "name", "value" ]
- name: 製品情報の名前 | type: string
- value: 製品情報の値 | type: string
- title: ページのタイトル | type: string
branding: UI ブランディング | type: object
- appLogoUrl: ナビゲーションバーに表示されるロゴの URL。これは、HawtIO ステータス URL からの相対パス、または絶対 URL になります。| type: string
- appName: 通常は Web ブラウザータブに表示されるアプリケーションのタイトル。| type: string
- css: アプリケーションのスタイル設定に使用できる外部 CSS スタイルシートの URL。これは、HawtIO ステータス URL からの相対パス、または絶対 URL になります。| type: string
- favicon: 通常、Web ブラウザーのタブに表示される favicon の URL。これは、HawtIO ステータス URL からの相対パス、または絶対 URL になります。| type: string
disabledRoutes: ルートが一致する UI コンポーネントを無効にします | type: array |
- items:type: string
online: OpenShift 関連の設定 | type: object
consoleLink: OpenShift Web コンソールリンクの設定。HawtIO デプロイメントが 'cluster' と同等の場合、アプリケーションメニューにリンクが追加されます。それ以外の場合は、HawtIO プロジェクトダッシュボードにリンクが追加されます。| type: object
-
imageRelativePath: アプリケーションメニューのリンクの前に使用されるアイコンの、HawtIO ステータス URL からの相対パス。これは、HawtIO デプロイメントタイプが
clusterと等しい場合にのみ該当します。イメージは正方形で、24x24 ピクセルで表示されます。| type: string - section: リンクが表示されるアプリケーションメニューのセクション。これは、HawtIO デプロイメントタイプが 'cluster' と同等の場合にのみ該当します。| type: string
- text : リンクのテキスト表示 | type: string
-
imageRelativePath: アプリケーションメニューのリンクの前に使用されるアイコンの、HawtIO ステータス URL からの相対パス。これは、HawtIO デプロイメントタイプが
-
projectSelector: プロジェクトを監視するために使用されるセレクター。これは、HawtIO デプロイメントタイプが 'cluster' と同等の場合にのみ該当します。デフォルトでは、ログインしているユーザーがアクセスできるプロジェクトがすべて監視されます。
kubectl getコマンドの--selectorまたは-lオプションで要求されているように、セレクターの文字列表現を指定する必要があります。Kubernetes Labels and Selectors を参照してください。| type: string
externalRoutes: 外部ルート名のリスト。ルートを使用してコンソールにアクセスするために Operator によってアノテーションが付けられます | type: array |
- items:type: string
metadataPropagation : デプロイメント、Pod、サービス、ルートなどの生成されたリソースに伝播する HawtIO カスタムリソースのメタデータの設定 | type: object
annotations: 伝播するアノテーション | type: array |
- items:type: string
labels: 伝播するラベル | type: array |
- items:type: string
nginx: Nginx ランタイム設定 type: object
-
clientBodyBufferSize: クライアント要求本文を読み取るためのバッファーサイズ。デフォルトは
256kです。| type: string -
proxyBuffers: プロキシーサーバーからの応答を読み取るために 1 つの接続で使用されるバッファーの数とサイズ。デフォルトは
16 128kです。| type: string -
subrequestOutputBufferSize: サブ要求の応答本文を保存するために使用されるバッファーのサイズ。デフォルトは
10mです。| type: string
-
clientBodyBufferSize: クライアント要求本文を読み取るためのバッファーサイズ。デフォルトは
rbac : RBAC 設定 | type: object
- configMap: ACL 定義を含む ConfigMap の名前。| type: string
-
disableRBACRegistry: RBACRegistry によるパフォーマンスの向上を無効にし、従来の動作に戻します。デフォルトは
falseです。| type: boolean
- replicas: 必要な Pod の数。これは、明示的なゼロと指定されていないものを区別するためのポインターです。デフォルトは 1 です。| type: integer | format: int32
resources: HawtIO コンソールのコンピュートリソース | type: object
claims: Claims は、このコンテナーによって使用される、spec.resourceClaims で定義されたリソースの名前をリストします。これはアルファフィールドであり、DynamicResourceAllocation フィーチャーゲートを有効にする必要があります。このフィールドは変更不可能です。コンテナーに対してのみ設定できます。| type: array |
- items: ResourceClaim は PodSpec.ResourceClaims 内の 1 つのエントリーを参照します。| type: object | 必須: [ "name" ]
- name: name は、このフィールドが使用されている Pod の pod.spec.resourceClaims 内の 1 つのエントリーの名前と一致する必要があります。そのリソースをコンテナー内で利用できるようにします。| type: string
- limits: limits は、許可されるコンピュートリソースの最大量を示します。Kubernetes Resource Management for Pods and Containers を参照してください | type: object
- requests: requests は、必要なコンピュートリソースの最小量を示します。コンテナーで Requests が省略される場合、明示的に指定される場合にデフォルトで Limits に設定されます。指定しない場合は、実装定義の値に設定されます。リクエストは制限を超えることはできません。Kubernetes Resource Management for Pods and Containers を参照してください | type: object
route: ルートのカスタム証明書設定 (ほとんどの OpenShift インストールでは必要ありません)。| type: object
caCert: Ca 証明書の秘密鍵セレクター | type: object | 必須: [ "key" ]
- key: 選択するシークレットのキー。有効な秘密鍵でなければなりません。| type: string
- name: 参照先の名前。Kubernetes Names を参照してください | type: string
- オプション: シークレットまたはそのキーを定義する必要があるかどうかを指定します | type: boolean
certSecret: ルート TLS 終了に使用されるカスタム証明書の TLS シークレットの名前 | type: object
- name: 参照先の名前。Kubernetes Names を参照してください | type: string
- routeHostname: HawtIO サービスを外部に公開するルートのエッジホスト名。指定されていない場合は自動的に生成され、[-] の形式になります。これは、クラスターに設定されているデフォルトのルーティングサブドメインです。フィールドが空の場合、Operator はルートを再作成し、ホストが再生成されることに注意してください。| type: string
type: デプロイメントの種類デフォルトは
clusterです。| type: string-
cluster: HawtIO は、認証されたユーザーがアクセスできるすべての名前空間でアプリケーションを検出し、管理できます。 -
namespace: HawtIO は、デプロイメント名前空間内のアプリケーションを検出および管理できます。
-
- 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 プロジェクトのスキャフォールディングを生成し、個々のアプリケーションに合わせてカスタマイズすることができます。
必要に応じて、これらの値をカスタマイズします。
archetypeVersion- 4.10.3.redhat-00019
groupId-
io.hawtio.online.examples artifactId-
hawtio-online-example-camel-springboot-os version-
1.0.0
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.hawtioartifactIdという名前の新しいプロジェクトに移動します (上記の例では、hawtio-online-example)。hello worldアプリケーションのサンプルが作成され、コンパイルが可能です。この時点で、アプリケーションはローカルで実行できるはずです。
アプリケーションをテストするには、
mvn spring-boot:runMaven ゴールを使用します。$ mvn spring-boot:run
7.2. アプリケーションへの Jolokia Starter 依存関係の追加 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO がアプリケーション内の Camel ルートを監視できるようにするには、camel-jolokia-starter 依存関係を追加する必要があります。必要な推移的な依存関係がすべて含まれています。
必要な依存関係を
<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 コンポーネントのドキュメント を参照してください。
インフライト監視を有効にするには、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 へのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Spring Boot アプリケーションが正しく実行されていることを確認します。
Red Hat build of Quarkus ドキュメントの Red Hat build of Quarkus Java アプリケーションの OpenShift Container Platform へのデプロイ セクションに記載されている検証手順に従ってください。
新しい Spring Boot アプリケーションが正しく実行されると、HawtIO インスタンスによって検出されます (モードによって異なります。'Namespace' モードでは、インスタンスが同じプロジェクト内にある必要があります)。
新しいコンテナーは、次のスクリーンショットのように表示されます。
Connect をクリックして、Spring Boot アプリケーションが HawtIO で使用できるかどうかを確認します。
第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 アプリケーションサンプルの設定 リンクのコピーリンクがクリップボードにコピーされました!
新しい 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を使用してください。-
quarkus-maven-pluginを使用してプロジェクトのスキャフォールディングを生成します。 -
プロジェクトの
maven groupIdをorg.hawtioに設定し、必要に応じてカスタマイズします。 -
maven artifactIdプロジェクトをquarkus-helloworldに設定し、必要に応じてカスタマイズします。 以下の Quarkus エクステンションを使用します。
- openshift: Maven がローカル OpenShift クラスターにデプロイできるようにします。
-
camel-quarkus-quartz : サンプル Quarkus アプリケーションで使用するために Camel エクステンション
quartzを有効にします。
- クイックスタートを実行すると、Quarkus プロジェクトのスキャフォールディングが作成され、個々のアプリケーションをさらにカスタマイズできるようになります。
-
アプリケーションをビルドして 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 アプリケーションの例の実装 リンクのコピーリンクがクリップボードにコピーされました!
この例では、簡単な 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")); } }- この例では、Camel ルートを介してコンテナーログの "Hello Camel …" エントリーをログに記録します。
次のプロパティーを使用して
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 = 10000pom.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 エージェントの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Maven プロパティーが
src/main/resources/application.propertiesファイルに渡されるようにするには、ファイルpom.xmlの<build>セクションに以下を追加する必要があります。<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>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>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>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 ポートの公開 リンクのコピーリンクがクリップボードにコピーされました!
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 へのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
前提条件:
- コマンドライン (CLI) はすでに OpenShift クラスターにログインしており、プロジェクト が選択されている。
すべてのファイルが設定されている場合は、次の maven コマンドを実行できる。
./mvnw clean package -Dquarkus.kubernetes.deploy=true- ここ で説明する検証手順を使用して、Quarkus アプリケーションが正しく実行されていることを確認する。
アプリケーションが正しく実行されていると仮定すると、新しい Quarkus アプリケーションは HawtIO インスタンスによって検出されるはずです (モードによって異なります。'Namespace' モードでは、同じプロジェクト内にある必要があります)。新しいコンテナーは、次のスクリーンショットのように表示されます。
接続をクリックすると、Quarkus アプリケーションを HawtIO で確認できます。
関連資料:
第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 は任意の名前空間にデプロイできます。
注記- OpenShift に HawtIO Online をインストールする方法の詳細は、6章OpenShift 4 上の HawtIO のセットアップ を参照してください。
- AMQ Broker を OpenShift にインストールする方法の詳細は、OpenShift での AMQ Broker のデプロイ を参照してください。
9.2. HawtIO 用の AMQ Broker の設定 リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、ブローカーのデプロイメントのカスタムリソース (CR) インスタンスを設定して、HawtIO Online がデプロイメント内のブローカーを検出して表示できるようにする方法を説明します。
- AMQ Broker をデプロイするために作成された CR を開きます
次に示すように、
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: falsejolokiaAgentEnabled: HawtIO Online がデプロイメント内のブローカーのランタイムデータを検出して表示できるかどうかを指定します。HawtIO Online を使用するには、値を
trueに設定します。managementRBACEnabled デプロイメント内のブローカーに対してロールベースのアクセス制御 (RBAC) を有効にするかどうかを指定します。HawtIO Online は独自のロールベースのアクセス制御を使用するため、HawtIO Online を使用するには値を
falseに設定する 必要 があります。重要managementRBACEnabledの値をfalseに設定して HawtIO Online の使用を有効にすると、ブローカーの管理 MBean に認可が不要になります。managementRBACEnabledがfalseに設定されている間は、ブローカー上のすべての管理操作が不正に使用される可能性があるため、AMQ 管理コンソールを使用 しない でください。- CR インスタンスを保存します。
ブローカーデプロイメントを先に作成したプロジェクトに切り替えます。
oc project <project_name>次のコマンドを実行して、変更を CR インスタンスに適用します。
oc apply -f <path/to/custom_resource_instance>.yaml- ブラウザーで Hawtio Online を開きます。設定した AMQ ブローカーは、アクセスが許可されている HawtIO 対応アプリケーション Pod のリストに表示されるはずです。
- Connect をクリックして AMQ Broker を表示します。
- 新しいブラウザーウィンドウが開き、HawtIO のアプリケーションが表示されます。Artemis プラグインはメインナビゲーションメニューからアクセスできます。
第10章 コンテナーおよびアプリケーションの表示 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift の HawtIO にログインすると、HawtIO ホームページに利用可能なコンテナーが表示されます。
手順:
- コンテナーを管理 (作成、編集、または削除) するには、OpenShift コンソールを使用します。
- OpenShift クラスター上の HawtIO 対応アプリケーションと AMQ Broker (該当する場合) を表示するには、Discover タブをクリックします。
第11章 Apache Camel アプリケーションの表示および管理 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO の Camel タブで、Apache Camel のコンテキスト、ルート、依存関係を表示および管理します。
次の詳細を表示できます。
- 実行中の Camel コンテキストすべてのリスト。
- Camel バージョン番号やランタイム統計など、各 Camel コンテキストの詳細情報。
- 各 Camel アプリケーションの全ルートおよびランタイム統計のリスト。
- 実行中のルートとリアルタイムのメトリクスのグラフィカル表示。
また、以下を行うと Camel アプリケーションと対話もできます。
- コンテキストの起動および一時停止。
- 再起動、停止、一時停止、再開などを実行できるよう、すべての Camel アプリケーションとそれらのルートのライフサイクルの管理。
- 実行中のルートのライブトレースおよびデバッグ。
- Camel エンドポイントへのメッセージの閲覧および送信。
Camel タブは、1 つ以上の Camel ルートを使用するコンテナーに接続する場合のみ使用できます。
11.1. コンテキストの起動、一時停止、または削除 リンクのコピーリンクがクリップボードにコピーされました!
- Camel タブのツリービューで、Camel Contexts をクリックします。
- リストのコンテキストの横にあるボックスにチェックマークを入れます。
- Start または Suspend をクリックします。
コンテキストを削除するには以下を行います。
- コンテキストを停止します。
- 楕円のアイコンをクリックし、ドロップダウンメニューで Delete を選択します。
コンテキストを削除する場合、デプロイされたアプリケーションから削除します。
11.2. Camel アプリケーションの詳細表示 リンクのコピーリンクがクリップボードにコピーされました!
- Camel タブのツリービューで、Camel アプリケーションをクリックします。
- アプリケーションの属性と値のリストを表示するには、Attributes をクリックします。
- アプリケーション属性をグラフィカルに表示するには、Chart をクリックした後、Edit をクリックし、チャートに表示する属性を選択します。
- inflight exchange および blocked exchange を表示するには、Exchanges をクリックします。
- アプリケーションエンドポイントを表示するには、Endpoints をクリックします。リストは URL、Route ID、および direction で絞り込むことができます。
- メッセージ本文とメッセージヘッダーを別のタイプに変換するために使用される Camel 組み込みタイプ変換メカニズムに関連する統計を表示、有効化、および無効化するには、Type Converters をクリックします。
- JMX 操作 (XML からのルートの追加または更新、クラスパスで利用できる Camel コンポーネントの検索など) を表示および実行するには、Operations をクリックします。
11.3. Camel ルートリストの表示および Camel ルートとの対話 リンクのコピーリンクがクリップボードにコピーされました!
ルートのリストを表示するには、以下を行います。
- Camel タブをクリックします。
ツリービューでアプリケーションの routes フォルダーをクリックします。
1 つまたは複数のルートを起動、停止、または削除するには、以下を行います。
- リストのルートの横にあるボックスにチェックマークを入れます。
- Start または Stop をクリックします。
最初にルートを停止してから削除する必要があります。停止したら楕円のアイコンをクリックし、ドロップダウンメニューで Delete を選択します。
注記- ルートを削除する場合、デプロイされたアプリケーションから削除します。
- ツリービューで特定のルートを選択し、右上のメニューをクリックして起動、停止、または削除することもできます。
- ルートのグラフィカルな図を表示するには、Route Diagram をクリックします。
- inflight exchange および blocked exchange を表示するには、Exchanges をクリックします。
- エンドポイントを表示するには、Endpoints をクリックします。URL、Route ID、および方向でリストを絞り込むことができます。
- Type Converters をクリックし、Camel の組み込みタイプ変換メカニズムに関連する統計を表示、有効化、および無効化します。このメカニズムはメッセージ本文とメッセージヘッダーを別のタイプに変換するために使用されます。
特定のルートと対話するには、以下を行います。。
- Camel タブのツリービューで、ルートを選択します。ルート属性と値のリストを表示するには、Attributes をクリックします。
- ルート属性をグラフィカルに表示するには、Chart をクリックします。Edit をクリックすると、チャートに表示する属性を選択できます。
- inflight exchange および blocked exchange を表示するには、Exchanges をクリックします。
- Operations をクリックして JMX 操作 (ルートを XML としてダンプ、ルートの Camel ID 値の取得など) を表示および実行できます。
ルートを介してメッセージをトレースするには、以下を実行します。
- Camel タブのツリービューで、ルートを選択します。
- Trace を選択してから、Start tracing をクリックします。
メッセージをルートに送信するには、以下を行います。
- Camel タブのツリービューでコンテキストのエンドポイントフォルダーを開き、エンドポイントを選択します。
- Send サブタブをクリックします。
- JSON または XML 形式のメッセージを設定します。
- Send をクリックします。
- ルートの Trace タブに戻り、ルートを介したメッセージのフローを確認します。
11.4. ルートのデバッグ リンクのコピーリンクがクリップボードにコピーされました!
- Camel タブのツリービューで、ルートを選択します。
- Debug を選択し、Start debugging をクリックします。
ブレークポイントを追加するには、図のノードを選択し、Add breakpoint をクリックします。ノードに赤い点が表示されます。
ノードがブレークポイントのリストに追加されます。
下矢印をクリックして次のノードに移動するか、Resume ボタンをクリックしてルートの実行を再開します。
- Pause ボタンをクリックして、ルートのすべてのスレッドを一時停止します。
- 終了したら Stop debugging をクリックします。すべてのブレークポイントが消去されます。
第12章 JMX ドメインおよび MBean の表示および管理 リンクのコピーリンクがクリップボードにコピーされました!
JMX (Java Management Extensions) は、実行時にリソース (サービス、デバイス、およびアプリケーション) を動的に管理できる Java 技術です。リソースは MBean (Managed Bean) と呼ばれるオブジェクトで表現されます。リソースは、作成、実装、またはインストール後、すぐに管理および監視できます。
HawtIO の JMX プラグインを使用すると、JMX ドメインと MBean を表示および管理できます。MBean 属性の表示、コマンドの実行、および MBean の統計を示すチャートの作成を行うことができます。
JMX タブは、フォルダーに整理されたアクティブな JMX ドメインと MBean のツリービューを提供します。詳細を確認し、MBean でコマンドを実行できます。
手順:
MBean 属性を表示および編集するには、以下を行います。。
- ツリービューで MBean を選択します。
- Attributes タブをクリックします。
- 属性をクリックしてその詳細を表示します。
操作を実行するには、以下を行います。
- ツリービューで MBean を選択します。
- Operations タブをクリックし、リストにある操作の 1 つを展開します。
- Execute をクリックし、操作を実行します。
チャートを表示するには、以下を行います。
- ツリービューで項目を選択します。
- Chart タブをクリックします。
第13章 Quartz スケジュールの表示および管理 リンクのコピーリンクがクリップボードにコピーされました!
Quartz は、ほとんどの Java アプリケーション内で統合できる、機能豊富なオープンソースジョブスケジューリングライブラリーです。Quartz を使用して、ジョブを実行するための単純または複雑なスケジュールを作成できます。
ジョブは、標準の Java コンポーネントとして定義され、プログラムで実行するほとんどの処理を実行できます。
Camel ルートが camel-quartz コンポーネントをデプロイすると、HawtIO は Quartz タブを表示します。JMX ツリービューから Quartz mbeans に交互にアクセスできることに注意してください。
手順:
- HawtIO で Quartz タブをクリックします。Quartz ページには、Quartz スケジューラーのツリービューと、Scheduler、Triggers、Jobs のタブがあります。
- スケジューラーを一時停止または起動するには、Scheduler タブのボタンをクリックします。
Triggers タブをクリックして、ジョブを実行するタイミングを決定するトリガーを表示します。たとえば、トリガーでは、ジョブを特定の時刻 (ミリ秒単位) に開始したり、指定した日に開始したり、指定した回数繰り返したり、特定の時刻に繰り返したりするように指定できます。
- トリガーの一覧をフィルタリングするには、ドロップダウンリストから State、Group、Name、または Type を選択します。続いて、入力フィールドに選択または入力することで、さらにリストをフィルターできます。
- トリガーを一時停止、再開、更新、または手動で実行するには、Action 列のオプションをクリックします。
- Jobs タブをクリックして実行中のジョブのリストを表示します。テーブルの Group、Name、Durable、Recover、Job ClassName、および Description の列でリストをソートできます。
第14章 スレッドの表示 リンクのコピーリンクがクリップボードにコピーされました!
スレッドの状態を表示および監視できます。
手順:
- Runtime タブをクリックし、Threads サブタブをクリックします。
- Threads ページには、アクティブなスレッドと各スレッドのスタックトレースの詳細が表示されます。デフォルトでは、スレッドリストにはすべてのスレッドが ID 値が大きい順に表示されます。
- ID 値が小さい順に表示するには、ID 列ラベルをクリックします。
- 任意で、スレッドの状態 (例: Blocked) やスレッド名でリストを絞り込むことができます。
- ロッククラス名やスレッドのフルスタックトレースなど、特定スレッドの詳細情報を表示するには、Actions 列で More をクリックします。
第15章 HawtIO での正しいデータ表示を確認する リンクのコピーリンクがクリップボードにコピーされました!
HawtIO のキューと接続の表示でキューが欠落していたり、接続が欠落していたり、一貫性のないアイコンが表示されたりする場合は、Jolokia が応答でマーシャリングする配列内の要素の最大数を指定する Jolokia コレクションサイズパラメーターを調整します。
手順:
HawtIO の右上隅にあるユーザーアイコンをクリックして、Preferences をクリックします。
- Maximum collection size オプションの値を大きくします (デフォルトは 50,000)。
- 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 つの要素が関与しています。
リソースサーバー:
保護されたリソースをホストするサーバーコンポーネント。アクセスはアクセストークンに基づき制限または許可されます。通常、このサーバーは REST API を介してアクセスされ、サーバーがユーザーインターフェイスを提供することはありません。
クライアント:
ユーザー (リソース所有者として扱われる) に代わってリソースサーバーにアクセスするアプリケーション (通常はユーザーインターフェイスを持っています)。リソースサーバーにアクセスするには、まずクライアントがアクセストークンを取得する必要があります。
OpenID Connect 仕様では、クライアントはリライングパーティー (RP) と呼ばれます。
認可サーバー:
クライアントとリソースサーバー間の通信を調整するサーバー。クライアントは認可サーバーにユーザー (リソース所有者) を認証するように要求し、認証が成功すると、リソースサーバーにアクセスするためのアクセストークンがクライアントに発行されます。
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 図は全体像を示しています。
最も重要なのは、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/ にアクセスし、新しいレルムを作成します。
レルム作成画面で、事前設定された hawtio-client クライアントと 3 ユーザーを含む新しい hawtio-demo レルムを定義する hawtio-demo-realm.json をアップロードします。
-
admin または
manager、admin、viewer、userのロールを持つ admin -
viewer または
viewerおよびuserのロールを持つ viewer -
jdoe または
userロールのみを持つ jdoe
16.4.1. JWT トークンに関する問題の調査 リンクのコピーリンクがクリップボードにコピーされました!
付与されたアクセストークンの内容を確認するには、Keycloak インターフェイスを使用できます。"Clients" に移動して "hawtio-client" を選択し、"Client scopes" タブと "Evaluate" サブタブを使用します。
次に "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 のプラットフォームの種類を決定することです。
選択できるオプションは 2 つあります ("パブリッククライアント/ネイティブ (モバイルとデスクトップ)" プラットフォームは考慮しません)。この UI は、後でリダイレクト URI を設定するときに表示されます。
一見するだけでは何を選択するべきかわからないかもしれませんが、次のように記述すれば十分です。
Web プラットフォーム:
この種類のクライアントは、サーバー側のアプリケーションや API に適しています。
SPA プラットフォーム:
SPA アプリケーションはブラウザー内で実行されるため、"認可コードフロー" と、いわゆるパブリッククライアントを使用するのが自然です。なぜなら、ブラウザーアプリケーションに認証情報と秘密を保存する適切な方法がないからです。
SPA プラットフォームを選択すると、Entra ID UI に次のマークが表示されます。
16.5.1. Entra ID で単一の SPA クライアントを使用する リンクのコピーリンクがクリップボードにコピーされました!
Entra ID で SPA クライアントを設定した後、hawtio-oidc.properties で関連するオプションを設定できます。Entra ID の "App registrations" ブレードで "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 profile が scope パラメーターとして送信される) の問題点は、実際には 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 で必要な設定をまとめてみましょう。
-
"Web" リダイレクト URI を使用して
hawtio-serverアプリケーション登録を作成します。 "Expose an API" セクションで、HawtIO クライアントから要求される可能性のあるアクセススコープを表すスコープを追加します。
これにより、後で使用する参照可能な
api://hawtio-server/Jolokia.Accessスコープが作成されます。hawtio-serverの "App roles" セクションで、このクライアントのスコープ内のユーザーに割り当てるロールを定義します。以下はその例です。
hawtio-serverの "Enterprise Applications" ブレードで、"Users and groups" タブに移動し、ユーザーロールの割り当てを追加します。以下に例を示します。
"SPA" リダイレクト URI を使用して
hawtio-clientアプリケーション登録を作成します。
hawtio-clientアプリケーション登録の "API Permissions" セクションで、hawtio-server公開 API の 委譲権限 を追加します。
これにより、次のような委譲済み権限セットが設定されます。
注記委譲済み権限の詳細は、Microsoft Entra ID ドキュメント を参照してください。
-
Enterprise Application ブレードの
hawtio-clientに、ユーザーとロールのマッピングは必要ありません。 上記の設定を行うと、HawtIO 設定の
scopeパラメーターを適切に設定できます。これにより、後で使用する参照可能な
api://hawtio-server/Jolokia.Accessスコープが作成されます。-
hawtio-serverの "App roles" セクションで、このクライアントのスコープ内のユーザーに割り当てるロールを定義します。以下はその例です。 -
hawtio-serverの "Enterprise Applications" ブレードで、"Users and groups" タブに移動し、ユーザーロールの割り当てを追加します。以下に例を示します。 -
"SPA" リダイレクト URI を使用して
hawtio-clientアプリケーション登録を作成します。 hawtio-clientアプリケーション登録の "API Permissions" セクションで、hawtio-server公開 API の委譲済み権限を追加します。これにより、次のような委譲済み権限セットが設定されます。
注記委譲済み権限の詳細は、Microsoft Entra ID ドキュメント を参照してください。
-
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 クレームがアクセストークンに追加されていることを確認する必要があります。
最小限の設定は次のとおりです。
groups クレームには セキュリティーグループ と ディレクトリーロール を含める必要があり、グループは UUID ではなく名前で表す必要があります。
参考までに、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
...