Java Management Serviceの拡張機能の構成について学習
Java Management Service (JMS)は、Oracle Cloud Infrastructure (OCI)上のネイティブ・サービスです。JMSは、独自の管理対象コンピュート・インスタンス(オンプレミスまたはOCI)でのJavaインストールの管理、監視および保護に使用できます。
JMSは次の目的で使用できます。
- 可視性: 企業全体のJavaの検出と管理
- インサイト: Java Virtual Machine(JVM)の構成、セキュリティ、コンプライアンス、パフォーマンスを分析
- チューニング: セキュリティ、移行、最適化および自動化
現在のセキュリティ・ポスチャがOracle for Javaランタイムによって行われたセキュリティ推奨と一致し、最新であるかどうか疑問に思ったことがありますか?JMSは、アプリケーションで使用されている問題のあるJavaライブラリをレポートし、すでに実行中のアプリケーションにセキュリティ領域に欠陥がないかどうかを確認するのに役立ちます。Javaアプリケーションのパフォーマンスに苦労していますか。それともJavaガベージ・コレクタのログを理解するのが難しいですか。JMSは、パフォーマンス分析によってレスキューされます。新しいバージョンのJavaに簡単に切り替えられるかどうかは不明ですか。Java移行分析について説明しました。
JMSでは、Java Flight Recorder (JFR)の録音は決して簡単ではありませんでした。必要なのは、JMSでアプリケーションを選択し、いくつかの詳細を指定して、記録リクエストを送信することだけです。JFR記録作業リクエストが終了すると、JMSフリートのバケットから簡単にアクセスできます。それだけではありません。JMSには、JavaランタイムのインストールやJavaアプリケーション・サーバーに関する追加詳細の提供など、Javaライフサイクル管理機能もあります。
このソリューション・プレイブックでは、前述したJava ITの問題を解決するためにJMSの高度な機能を構成するステップについて説明します。
JMSの高度な機能を使用すると、環境内のJavaの様々な側面に関するインサイトを取得できます。たとえば、高度な機能を使用すると、次のことができます。
- アプリケーションで使用されるJavaライブラリーをスキャンして、サードパーティのJavaライブラリーに関連する潜在的な脆弱性(CVE)を特定し、報告します。
- パフォーマンス分析を活用して、JVMチューニング推奨事項を使用してJavaワークロード・パフォーマンスを最適化します。
- Java移行分析を使用した、Javaアプリケーションを新しいJDKバージョンに移行するための作業と実現可能性の評価。
- 暗号イベント分析を使用して、Oracle JREおよびJDK暗号化ロードマップでの今後の更新の処理を停止する脆弱な暗号使用方法を特定することで、アプリケーションの安全性を維持できます。
- Javaサーバーをスキャンして、各Javaアプリケーション・サーバー上でどのサービスおよびアプリケーションが実行されているかを理解します。
- JDK Flight Recorderを実行して、アプリケーション・インサイトをリモートで収集します。
- Javaランタイムをダウンロード、インストールおよび構成します。
- レポートされたOracle Javaバージョンを削除します
- デプロイメント・ルール・セットを配布または削除します。
開始する前に
Java Management Serviceにアクセスするには、Oracle Cloud (OCI)アカウントが必要です。独自のクラウド・アカウントを使用することも、OCI Free Tierアカウントを取得することもできます。
このソリューション・プレイブックで概説されている例では、OCIコマンドライン・ツールを使用します。これらの例を自分で試す場合は、次のガイドコマンドライン・インタフェース(CLI)に従ってOCI CLIを設定および構成します。この例を実行するための追加の要件は、ociツール・コマンドを実行するマシンにjq
コマンドライン・ユーティリティが存在することです。ほぼすべてのプラットフォームでこのユーティリティは、GitHubプロジェクト・ページ(https://github.com/jqlang/jq)から取得できます。
OCIサービスとの通信を可能にするために、Oracle Linuxマシンが正しく設定されていることを確認します。マシンには次のものがあります。
- テナンシで使用可能なOCIコンピュート・インスタンス。インスタンスがまだ設定されていない場合は、OCIコンピュート・インスタンスの作成を参照してください。
- 非OCIホスト。オンプレミス(独自のデータ・センター、サード・パーティ・クラウドなど)で、JMSサービスを介して監視する必要があります。
アーキテクチャ
このプレイブックでは、Java Management Serviceの高度な機能をオンボードするための概要を説明します。具体的には、Javaインストールに関するインサイトを取得し、必要に応じて修正処理を実行します。このソリューションは、OCI、オンプレミスおよびサードパーティ・クラウドのOracleインストールで、JMSの高度な機能を有効にする場合に適用できます。
JMSエージェントが管理対象インスタンスにインストールされ、Java使用テレメトリおよびJava使用メタデータが収集されます。テレメトリ・データは、プライバシ保護のためにテナンシに発行されて格納されます。
次の図は、本番環境のJMSサービスのトポロジを示しています。この図は、OCIで実行されているJava、オンプレミス・デスクトップ、ラップトップとサーバー、サードパーティのクラウド・サービスを追跡するためにデプロイされたエージェントを示しています。これらのエージェントは管理対象インスタンスにデプロイされ、テナンシ内に作成されたリソース(フリート)に関連付けられます。
Java使用状況メタデータは、テナンシにインストールされているエージェントによってテナンシから抽出されます。JMSは、このメタデータを使用して、Javaバージョン、セキュリティ・ベースライン、今後のJava更新、アプリケーション使用などのインサイトを生成します。これは、OCIコンソールにログインしたときに表示されます。流出したメタデータの処理を超えるOracleアクセスはありません。
JMSで使用可能な高度な機能を使用すると、Javaアプリケーション・サーバーの使用状況を分析し、環境で実行されているアプリケーションによって使用されるJavaライブラリの潜在的な脆弱性を識別し、Javaフライト・レコーダを使用してパフォーマンスと暗号分析を行い、環境内のOracle Javaランタイム(JDKバージョン)を管理できます。高度な機能を使用して、環境で実行されているJavaを管理できます。
次の図に、このアーキテクチャを示します。
次の項では、管理対象インスタンスにインストールされているJMSエージェントとOCI上のJMSサービス間のデータ・フローの概要を説明します。
- エージェントは管理対象インスタンスにインストールし、エージェントはOCIに登録します。
- JMSプラグインを構成または有効化します(JMSフリートをパラメータとして渡します)。これで、JMSエージェントは目的のJMSフリートに関連付けられます。
- 登録されたJMSエージェントは、JMSに作業をポーリングします。JMSは、適切な作業リクエストがある場合にポーリングに応答します。
- JMSエージェントは、管理対象インスタンスでJavaインストールまたは使用状況トラッカ内のエントリを定期的にスキャンし、JavaメトリックおよびJavaメタデータをOCIに送信します。
JMSエージェントとOCIサービスの間のデータ・フローと、ホスト・マシン(オンプレミス)にインストールされているJMSエージェントとOCIで実行されているJMSの間のトラフィック・フローの詳細は、JavaおよびJavaアプリケーション・インストールのモニターおよび管理を参照してください。
このアーキテクチャには、次のコンポーネントがあります。
- リージョン
OCIリージョンとは、可用性ドメインをホストする1つ以上のデータ・センターを含む、ローカライズされた地理的領域のことです。リージョンは他のリージョンから独立しており、長距離の場合は複数の国または大陸にまたがる領域を分離できます。
- 可用性ドメイン
可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害が、リージョン内の他の可用性ドメインに影響することはありません。
- Tenancy
テナンシは、OCIへのサインアップ時にOracleがOracle Cloud内で設定する、セキュアで分離されたパーティションです。テナンシ内のOCI上でリソースを作成、編成および管理できます。テナンシは、会社または組織と同義です。通常、会社は単一のテナンシを持ち、そのテナンシの組織構造を反映させます。通常、単一のテナンシは単一のサブスクリプションに関連付けられ、単一のサブスクリプションには1つのテナンシのみが含まれます。
- コンパートメント
コンパートメントは、OCIテナンシ内のリージョン間論理パーティションです。コンパートメントを使用して、Oracle Cloudリソースの編成、アクセス制御および使用量割当て制限を設定します。特定のコンパートメントでは、アクセスを制御するポリシーを定義し、リソースの権限を設定します。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
仮想クラウド・ネットワーク(VCN)は、ソフトウェアで定義されたカスタマイズ可能なネットワークであり、OCIリージョン内に設定します。従来のデータ・センター・ネットワークと同様に、VCNsではネットワーク環境を制御できます。VCNには、VCNの作成後に変更できる複数の非重複クラスレス・ドメイン間ルーティング(CIDR)ブロックを含めることができます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
- インスタンス・プール
インスタンス・プールは、同じインスタンス構成から作成され、グループとして管理されるリージョン内のインスタンスのグループです。
- オンプレミス・ネットワーク
これは、組織で使用されるローカル・ネットワークです。
- OCI APIゲートウェイ
Oracle Cloud Infrastructure API Gatewayでは、ネットワーク内からアクセス可能なプライベート・エンドポイントを含むAPIを公開でき、必要に応じてパブリック・インターネットに公開できます。エンドポイントは、API検証、リクエストとレスポンスの変換、CORS、認証と認可およびリクエスト制限をサポートします。
- 動的ルーティング・ゲートウェイ(DRG)
The DRG is a virtual router that provides a path for private network traffic between VCNs in the same region, between a VCN and a network outside the region, such as a VCN in another OCI region, an on-premises network, or a network in another cloud provider.
- サービス・ゲートウェイ
サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and does not traverse the internet.
- Oracle Autonomous Database
Oracle Autonomous Databaseは、トランザクション処理およびデータ・ウェアハウス・ワークロードに使用できる、完全に管理された事前構成済のデータベース環境です。ハードウエアの構成や管理、ソフトウェアのインストールを行う必要はありません。OCIは、データベースの作成、バックアップ、パッチ適用、アップグレードおよびチューニングを処理します。
- Bastionホスト
要塞ホストは、クラウド外部からトポロジへのセキュアで制御されたエントリ・ポイントとして機能するコンピュート・インスタンスです。要塞ホストは通常、非武装地帯(DMZ)にプロビジョニングされます。機密リソースは、クラウド外部から直接アクセスできないプライベート・ネットワークに配置することで保護できます。トポロジには、定期的に監視および監査できる既知のエントリ・ポイントが1つあります。そのため、トポロジへのアクセスを損なうことなく、より機密性の高いコンポーネントの公開を回避できます。
- Oracle Cloud Agent
Oracle Cloud Agentは、OCI上のコンピュート・インスタンスで実行されているプラグインのライフサイクルを管理する軽量プロセスです。JMSプラグインは、OCIの管理対象インスタンスにデプロイされた環境からJavaメタデータを収集します。JMSプラグインは、このJavaメタデータをOCIのJMSサービスに抽出します。
- OCIコンピューティング
Oracle Cloud Infrastructure Computeを使用すると、クラウド内のコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを使用してコンピュート・インスタンスを起動できます。コンピュート・インスタンスを作成した後は、セキュアにアクセスし、再起動してボリュームをアタッチおよびデタッチし、不要になったときにそれを終了できます。
- OCI DNS
Oracle Cloud Infrastructureドメイン・ネーム・システム(DNS)サービスは、拡張性の高いグローバル・エニーキャスト・ドメイン・ネーム・システム(DNS)ネットワークであり、DNSのパフォーマンス、自己回復性およびスケーラビリティを提供しているため、エンド・ユーザーはどこからでもインターネット・アプリケーションに迅速に接続できます。
- Kafkaストリーム
Kafka Streamsは、アプリケーションおよびマイクロサービスを構築するためのクライアント・ライブラリで、入力および出力データはKafkaクラスタに格納されます。クライアント側での標準のJavaおよびScalaアプリケーションの記述とデプロイのシンプルさと、Kafkaのサーバー側クラスタ・テクノロジのメリットを兼ね備えています。
- OCIロギングOracle Cloud Infrastructure Loggingは、クラウド内のリソースから次のタイプのログへのアクセスを提供する、高度にスケーラブルで完全管理型のサービスです:
- 監査ログ: OCI監査によって生成されたイベントに関連するログ。
- サービス・ログ: OCI APIゲートウェイ、OCIイベント、OCIファンクション、OCIロード・バランシング、OCIオブジェクト・ストレージおよびVCNフロー・ログなどの個々のサービスによってパブリッシュされたログ。
- カスタム・ログ: カスタム・アプリケーション、他のクラウド・プロバイダまたはオンプレミス環境からの診断情報を含むロギング。
- Oracle Management Agent
Oracle Management Agentは、Oracle Cloud Infrastructureとオンプレミス管理対象インスタンスの間で、低レイテンシの対話型通信およびデータ収集を提供するサービスです。管理エージェントは、監視するソースからデータを収集します。管理エージェント・サービス(Oracle Cloud Service)は、管理エージェントのライフサイクルとサービスのプラグインを管理します。
- OCIモニタリング
Oracle Cloud Infrastructure Monitoringは、クラウド・リソースをアクティブおよびパッシブに監視し、メトリックが指定されたトリガーを満たしたときにアラームを使用して通知します。
- OCIオブジェクト・ストレージ
OCIオブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージおよびビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの構造化データおよび非構造化データの大量へのアクセスを提供します。アプリケーションから直接、またはクラウド・プラットフォーム内から、安全かつ安全にデータを格納できます。パフォーマンスやサービスの信頼性を低下させることなく、ストレージを拡張することができます。
迅速、即時、頻繁にアクセスする必要のあるホット・ストレージに標準ストレージを使用します。長期間保存し、ほとんどまたはめったにアクセスしないコールド・ストレージにアーカイブ・ストレージを使用します。
- ポリシー
Oracle Cloud Infrastructure Identity and Access Managementポリシーでは、誰がどのリソースにどのようにアクセスできるかを指定します。アクセス権はグループ・レベルおよびコンパートメント・レベルで付与されます。つまり、特定のコンパートメント内またはテナンシへの特定のタイプのアクセスをグループに許可するポリシーを記述できます。
- セキュリティ・リスト
サブネットごとに、サブネット内外で許可されるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。
- セキュリティ・ゾーン
セキュリティ・ゾーンは、データの暗号化やネットワークへのパブリック・アクセスの防止など、コンパートメント全体にポリシーを適用することで、Oracleセキュリティの主要なベスト・プラクティスを実装します。セキュリティ・ゾーンは、同じ名前のコンパートメントに関連付けられ、コンパートメントとそのサブコンパートメントに適用されるセキュリティ・ゾーン・ポリシー(レシピ)が含まれます。セキュリティ・ゾーン・区分に標準コンパートメントを追加したり、移動することはできません。
- OCI Vault
Oracle Cloud Infrastructure Vaultでは、データを保護する暗号化キーと、クラウド内のリソースへのアクセスを保護するために使用するシークレット資格証明を作成し、一元管理できます。デフォルトのキー管理は、Oracle管理キーです。OCI Vaultを使用する顧客管理キーを使用することもできます。OCI Vaultは、ボールトおよびキーを管理するための豊富なREST APIセットを提供します。
- OCIワークフロー
Oracle Cloud Infrastructure Workflowは、開発者およびアーキテクト向けのグラフィカル・フロー・デザイナを備えたサーバーレス・ワークフロー・エンジンです。これにより、OCI FunctionsやAI/MLなどのOCIサービスの作成、実行およびオーケストレーションが加速されます。
考慮事項
高度な機能を有効にする場合は、次の点を考慮する必要があります。
- JMS拡張機能を使用するには、追加のポリシーが必要です。
- 暗号イベント分析、パフォーマンス分析およびJDKフライト・レコーダにより、アプリケーションのJVMの全体的なメモリー使用量が増加する可能性があります。
- 暗号イベント分析、パフォーマンス分析およびJDKフライト・レコーダの場合、アプリケーションのJavaランタイム・バージョンはバージョン8u361以上である必要があります。
- 各JFR記録の暗号イベント分析およびパフォーマンス分析の上限制限は4096MBに設定されます。
- JMSの高度な機能によって生成されたデータを格納するために、OCIオブジェクト・ストレージおよびOCIロギング・サービスを使用することで、追加コストが発生する可能性があります。
- Javaライフサイクル管理
- デプロイメント・ルール・セット機能は、Java 8ランタイムにのみ適用されます。追加のオーバーヘッドは、フリートの管理対象インスタンスに対するポリシーjarの分散です。
- Javaのインストールによって、管理対象インスタンスのJavaシステム構成が変更される場合があります。選択したJavaランタイム・バージョンおよび管理対象インスタンス・プラットフォームのインストール手順に従います。
- Javaランタイムを削除すると、管理対象インスタンスのJavaシステム構成が変更される場合があります。たとえば、選択したJavaランタイムが管理対象インスタンスで唯一のシステム構成ランタイムである場合です。
- 高度な使用状況トラッキング
- 実行中のJavaアプリケーション・サーバーを検出するには、そのJavaランタイムのバージョンが8u361以上である必要があります。
- ライブラリ検出により、アプリケーションとそのライブラリの検査中に管理対象インスタンスのリソース消費が大幅に増加する可能性があります。特にCPUおよびIO使用率が増加する可能性があります。
- 管理対象インスタンスで検出されたアプリケーション・サーバーおよびライブラリの数によっては、JMSに送信されるペイロードが通常よりも大きくなる場合があります。通常の状況では、数百Kバイトの範囲内である必要があります。
- 暗号イベント解析
- 各アプリケーションが記録中にJVMのセキュリティ関連サブシステムをどれだけ利用しているかによって、JFR記録ファイルの最終的なサイズは異なる場合があります。通常の状況では、通常の記録サイズは数百KBから数MBです。
- アプリケーションがアイドル状態の場合、検出メカニズムによっては潜在的な問題を報告しないことがあります。
- ネットワーク使用率は、管理対象インスタンスの数、アプリケーション数および各記録のサイズに応じて増加する場合があります。分析のためにJFR記録をOCIにアップロードする際にネットワークが使用されます。
- パフォーマンス分析
- 各JFR記録ファイルの最終サイズは、アプリケーションの動作によって異なります。ガベージ・コレクションやメモリーなどの詳細と同様に、パフォーマンス関連のJFRイベントがいくつか取得されます。通常の状況では、通常の記録サイズは数メガバイトです。
- アプリケーションがアイドル状態の場合、検出メカニズムによっては潜在的なパフォーマンスの問題が報告されないことがあります。
- ネットワーク使用率は、管理対象インスタンスの数および各記録のサイズに応じて増加する場合があります。分析のためにJFR記録をOCIにアップロードする際にネットワークが使用されます。
- JDK Flight Recorder (JFR)
- JFR記録ファイルの最終サイズは、選択したプロファイルまたは提供されたカスタムJFC構成によって異なります。サイズに影響する別の要因は、アプリケーションの選択した記録期間です。
- Java移行の分析
- アプリケーションの分析中にリソース使用率が増加する場合があります。
- 分析の結果は、通常、アプリケーション自体のサイズとその依存関係に応じて数百キロバイトの順序になります。
暗号分析やパフォーマンス分析などの一部の高度な機能は、JVM接続APIに依存しています。作業リクエストの実行中に、JMSプラグインがフリートのインベントリ・ログ・オブジェクトに新規イベントを送信する場合があります。次のサンプル・ペイロードは、このような状況でフリートの在庫ログに配信される内容を示しています。
{
"datetime": 1752483223432,
"logContent": {
"id": "3d6a9915-af91-4527-a6d4-2a0d86106b15",
"time": "2025-07-14T08:53:43.432Z",
"oracle": {
"compartmentid": "ocid1.compartment.oc1..compartment-id",
"ingestedtime": "2025-07-14T08:55:27.274970180Z",
"instanceid": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"loggroupid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-group-id",
"logid": "ocid1.log.oc1.eu-frankfurt-1.log-id",
"tenantid": "ocid1.tenancy.oc1..tenant-id"
},
"source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"specversion": "1.0",
"subject": "Oracle JMS Plugin",
"type": "jms.jvm.usage.attach.log",
"data": {
"data": {
"additionalProperties": {
"java.runtime.name": "Java(TM) SE Runtime Environment",
"user.dir": "/home/opc/crypto",
"user.name": "opc"
},
"applicationName": "spring-tls-server-1.1.0.jar",
"classPath": "spring-tls-server-1.1.0.jar",
"classPathElements": [
"spring-tls-server-1.1.0.jar"
],
"fleetId": "ocid1.jmsfleet.oc1.eu-frankfurt-1.fleet-id",
"javaArgs": "n/a",
"javaCommand": "spring-tls-server-1.1.0.jar --debug",
"javaDistribution": "Java(TM) SE Runtime Environment",
"javaHome": "/usr/lib/jvm/jdk-21-oracle-x64",
"javaMajorVersion": "21",
"javaVendor": "Oracle Corporation",
"javaVersion": "21",
"managedInstanceId": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"osArch": "amd64",
"osName": "Linux",
"osVersion": "5.15.0-306.177.4.el9uek.x86_64",
"startTime": "2025-07-14T08:48:34.947541200Z",
"typeOfStart": "VM start"
},
"datacontenttype": "application/json",
"dataschema": "1.0",
"id": "3d6a9915-af91-4527-a6d4-2a0d86106b15",
"source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"specversion": "1.0",
"time": "2025-07-14T08:53:43.432Z",
"type": "jms.jvm.usage.attach.log"
}
},
"regionId": "eu-frankfurt-1"
}
その他の注意事項
JMSで機能実行リクエストが送信されると、JMSサービスは一意の作業リクエストOCIDで識別される作業リクエストを作成します。以下は、OCI Cloud Consoleから作業リクエストの進捗状況を追跡するための一般的なプロセスです。
- 「監視および管理」、「Java管理」、「フリート」をクリックしてフリートに移動します。
- フリートを選択します。
- フリートの「作業リクエスト」セクションをクリックします。
OCI CLIから作業リクエストの進捗状況を追跡する方法:
- 次のコマンドを実行します:
oci jms work-request get --work-request-id $WORK_REQUEST_OCID
- 作業リクエストの現在の状態のみが必要な場合は、
jq
ユーティリティを使用して前述の文を実行できます。oci jms work-request get --work-request-id $WORK_REQUEST_OCID | jq .data.status
機能の作業リクエストを送信および追跡する機能は、OCI SDKを介してアクセス可能なJMS APIでも使用できます。