🔥

Hawtio v3のリリースとCamel CLI

2024/01/12に公開

Hawtio

Hawtioは、Java/JVMアプリケーションをWeb UIで管理するための定番のツールです。

HawtioはながらくJMXベースのJavaアプリケーション管理やApache CamelアプリケーションのWeb GUIコンソールとして、JavaエンジニアやCamelエンジニアの間でコアな人気を集めてきましたが、古いJavaScriptフレームワーク[1]をベースにしていてこれ以上の拡張や継続的なメンテが困難な状況でした。しかし、WebベースのJMX管理コンソールというのは他に代替がなく、JConsoleでは非常に基本的なアプリケーションの監視・管理しかできないので、Hawtioには未だに根強い人気があります。

Hawtio開発チームとしてはこうしたJavaエンジニアの需要を知っていたので、どこかでモダンなJavaScriptフレームワークに移行したいと考えていたのですが、やるとなるとWeb UI部分を完全に再実装することになるのでなかなか着手できないでいました。幸いにも昨年この次世代Hawtioのリブートプロジェクトに着手できることになり、昨年中に3.0.0 GAをリリースできました。

https://twitter.com/hawtio/status/1736676413905010976

Hawtio v3のハイライト

Hawtio v3リリースのハイライトは以下のとおりです。

フロントエンドの刷新:
基本的なUIの見た目と機能性は維持しつつ、これまでの古いJavaScriptフレームワークを捨ててReactPatternFly v4によって新しく作り直しました。新しいフレームワークをベースにすることで、セキュリティのアップデートはもちろん、Hawtioに興味を持ってくれた最新の技術に親しんだフロントエンドの技術者がより気軽にコントリビューションを行えるようになりました。

機能性の維持:
Hawtioの魅力はJMXモニタリングの上に、特定のアプリケーション向けにカスタマイズされた豊富なプラグインが用意されていることです。バージョンアップによってその機能性が損なわれることがないよう、Apache Camelプラグイン、Spring Bootプラグイン、Quartzプラグイン、Logsプラグインなど、これまでの人気の組み込みプラグインはそのまま新しいUI上に再実装されています。

新しいプラグインシステム:
Hawtioはこれまでも独自にプラグインを開発することで簡単に機能拡張できましたが、v3ではそのプラグインシステムをマイクロフロントエンドの新しい標準であるWebpack Module Federationに準拠したメカニズムに一新しました。同時に、興味を持ったユーザーが簡単にプラグイン開発を試せるようサンプルプロジェクトをいくつも用意しています。

新しいCLI:
JBangの登場以降、JavaのエコシステムではJBangベースのCLIの提供が新しい定番のディストリビューション配布方法として広まりつつあります。HawtioはもともとCamel CLI(a.k.a. Camel JBang)から起動することができていましたが、Hawtio v3からはhawtio-app.jarに代わる新しい配布方法としてHawtio CLIを提供します。JBangがローカルにインストールしてあれば、コマンド1つで最新のHawtioをカタログからインストールして起動できます。

ランタイムサポートの更新:
マイクロサービスの普及に伴いアプリケーションのランタイムが軽量化し、フルスタックのアプリケーションサーバーが使われなくなってきました。そうしたトレンドに対応するため、Spring Bootのランタイムサポートに加え、Hawtio v3ではQuarkusのサポートを追加しました。一方で、開発リソースを最適化するため、これまで通り一般的なWAR形式での提供は続けるものの特定のアプリケーションサーバー(KarafやWildFly)向けにカスタマイズされたディストリビューションは廃止しました。

Camel CLIからHawtio v3を起動する

Camel JBang CLIにはすでに便利なcamel hawtioというコマンドがあります。[2]今後のアップデートでHawtio v3がデフォルトで起動するようになると思いますが、もしまだ古いv2のコンソールが起動するようであれば、以下のようにしてCamel CLIから新しいHawtio v3を起動できます。[3]

camel hawtio --version=3.0.1

Camel CLIから新しいルートファイルを作成し、それをHawtioで閲覧するまでの完全なステップも示しておきましょう。

まず、ターミナルを開いてルートファイルを作成し、それを実行します。

camel init hello.java
camel run hello.java

ここまではCamelエンジニアにはお馴染みの手順です。ここから、別のターミナルを開いて先ほど実行したhelloルートにJolokiaエージェントをアタッチします。あとはCamel CLIから起動したHawtioでそのルートを自動的に認識できます。

camel jolokia hello
camel hawtio --version=3.0.1

実行すると、自動的にブラウザが開いてhttp://localhost:8888/hawtio/にHawtioコンソールが見えるはずです。ConnectプラグインのDiscoverタブを選びます。すると、Jolokiaエージェントがアタッチされたローカルで実行中のCamelルートが検出されます。

camel hawtio

あとは、Connectボタンを押せば新しいブラウザタブにHawtioコンソールが開いて、接続したCamelルートを色々といじれるようになっているはずです。

Camelプラグインでできること

Camel plugin

HawtioがCamelエンジニアの間で根強い人気があるのは、ランタイムで簡単に以下のようなことができてしまうからです。

ルートの可視化(Route Diagram):
実行中のCamelルートのルート定義をグラフィカルな図で確認できます。現在ルーティング中のエクスチェンジや完了したエクスチェンジのメトリクスなど、簡単なメトリクス情報もこのルート図に表示されます。ブラウザがあれば特別な開発環境やプラグインがなくても、Camelアプリケーションの構成をグラフィカルに把握することができます。

ルート定義の確認(Source):
実行中のCamelルートのルート定義をXML DSL形式でブラウザ上で確認できます。ルート定義の詳細を確認したいときに便利です。

簡易的なメトリクスの確認(Exchanges、Profile、Chart):
Camelルートが提供するメトリクスの簡易的な確認をブラウザ上で行なえます。この機能は、あくまでその場の簡易的なヘルスチェックなどを目的とします。本格的なモニタリングの仕組みを作りたい場合は、Prometheusなどのモニタリングフレームワークが必要です。

デバッグとトレース(Debug、Trace):
Camelのデバッグ/トレースオプションを有効にすることで、ブラウザ上でCamelルートのステップ実行やエクスチェンジのトレースを行うことができます。開発時や問題のトラブルシュートに活かすことができます。

MBeanの操作・確認(Operations、Attributes):
これは元々のHawtioのJMXコンソールとしての機能にすぎないですが、コンソール上でCamel固有MBeanの属性をチェックしたり、MBeanオペレーションを直接呼び出したりできます。MBean経由でルートの細かな状態を確認したり、属性を変更したりオペレーションを実行することで、ルートの振る舞いをランタイムに変更したり、問題のデバッグに役立てたりすることができます。

その他のプラグイン

HawtioはCamelプラグインの他にも標準で便利なプラグインをいくつも用意しています。

JMXプラグイン
Hawtioの基本機能です。JolokiaエージェントをアタッチしたJVMランタイムからすべてのMBeanを読み込み、ツリー状に閲覧できます。それぞれのMBeanについて、属性をランタイムで閲覧・更新したり、JMXオペレーションをパラメーター付きでブラウザから実行したりできます。簡易的なチャート機能も提供します。

Runtimeプラグイン
JVMランタイムについてのモニタリングビューを提供します。システムプロパティの閲覧、CPU/メモリ使用率などの簡易的なメトリクス、実行中スレッドの閲覧やダンプなどが行なえます。

Quartzプラグイン
CamelルートでQuartzコンポーネントを使っている時など、QuartzスケジューラのインスタンスがJVMランタイム上に存在する場合、その管理ビューを提供します。スケジューラー・ジョブ・トリガーの設定変更やテスト実行などを行えます。

Logsプラグイン
アプリケーション側にロギングフレームワークのフックを導入することで、アプリケーションログをブラウザ上で閲覧できるようになります。ロギングフレームワーク毎のフックが必要なため、現在はLogbackのみがサポートされます。

Spring Bootプラグイン
Spring Bootアプリケーションの場合に、そのアクチュエータエンドポイントの様々な情報(基本情報、ヘルス、ロガー)を閲覧できるビューを提供します。

それでも求めている管理ビューが見つからない場合は、以下のサンプルプロジェクトを参考に自分でカスタムプラグインを作ってコンソールを拡張できます。必要なのはJMXとReactの知識だけです。

まとめ

Hawtioを使ってみようかなと思ったら、まずは公式ドキュメントのGet Startedを読んでみてください。

コードベースを一新したことで、JMXとApache Camelのデファクトの管理コンソールとしてのHawtioの開発を継続できる土台ができました。Hawtio v3自体にはそれほど驚くような新機能は見つからなかったかもしれませんが、それこそがHawtio v3が狙ったものです。コミュニティーベースのイノベーションを促進するための土台作りが一番の目的でした。これから、新たな機能開発に注力することができます。ぜひコミュニティに参加して、管理コンソールの未来を一緒に作っていきましょう。

脚注
  1. AngularJS 1.xやPatternFly 3.x ↩︎

  2. https://camel.apache.org/manual/camel-jbang.html#_using_jolokia_and_hawtio ↩︎

  3. 3.0.0にはcamel hawtioからの起動に問題があったので3.0.1を使ってください。 ↩︎

Discussion