このトピックでは、Managed Service for Prometheus で、Micrometer を使用する Java アプリケーションをモニタリングする方法について説明します。
前提条件
Java アプリケーションが作成済みであること。
ステップ 1:Java アプリケーションのインストルメント化
このトピックでは、一般的な Spring Boot 2.x アプリケーションを例として使用します。
-
Java アプリケーションに Spring Boot Actuator を追加するには、プロジェクトの
pom.xmlファイルに Actuator 依存関係を追加します。<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>x.y.z</version> </dependency>説明最新バージョンは、Alibaba Cloud リポジトリで確認できます。
-
application.propertiesファイルに次のプロパティを追加して、Prometheus モニタリングデータ用のポートとエンドポイントを公開します。management.server.port=8080 management.endpoints.web.exposure.include=xxx, prometheus Add the MicroMeter dependency to the project's
pom.xmlfile.<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>x.y.z</version> </dependency>説明Find the latest version in the Alibaba Cloud repository.
-
プロジェクトの
pom.xmlファイルに Micrometer JVM Extras の依存関係を追加します。<dependency> <groupId>io.github.mweirauch</groupId> <artifactId>micrometer-jvm-extras</artifactId> <version>0.2.2</version> </dependency>説明最新バージョンは、Alibaba Cloud リポジトリで確認できます。
-
次の 2 つの Spring Bean を定義して Micrometer JVM Extras を設定し、メモリとスレッド関連のメトリックを公開します。
/* Spring を使用する場合 */ @Bean public MeterBinder processMemoryMetrics() { return new ProcessMemoryMetrics(); } @Bean public MeterBinder processThreadMetrics() { return new ProcessThreadMetrics(); } -
Java アプリケーションを Container Service または ECS インスタンスにデプロイします。
ビジネスシナリオに基づいて、Java アプリケーションを Container Service または ECS インスタンスにデプロイします。アプリケーションをデプロイした後、アプリケーションのリスニングアドレス
http://localhost:8080/actuator/prometheusにアクセスして、メトリックが正しく公開されていることを確認します。ポート8080はapplication.propertiesファイルで指定されています。異なるポートを使用する場合は、それに応じて URL を更新してください。リクエストが成功すると、次の例のような Prometheus 形式のメトリックデータが返されます。
# HELP jvm_memory_used_bytes 使用済みメモリの量 (バイト) # TYPE jvm_memory_used_bytes ゲージ jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 2964360.0 jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 1.285324E7 jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 3.6128128E7 jvm_memory_used_bytes{area="nonheap",id="CodeCache",} 9673088.0 jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 6.7108864E7 jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 4999168.0 # HELP jvm_threads_live_threads デーモンスレッドと非デーモンスレッドの両方を含む現在のライブスレッド数 # TYPE jvm_threads_live_threads ゲージ jvm_threads_live_threads 28.0 # HELP jvm_memory_committed_bytes Java 仮想マシン用にコミットされたメモリ量 (バイト) # TYPE jvm_memory_committed_bytes ゲージ jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 4194304.0 jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 5.8720256E7 jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.6569088E7 jvm_memory_committed_bytes{area="nonheap",id="CodeCache",} 1.0682368E7 jvm_memory_committed_bytes{area="heap",id="G1 Eden Space",} 9.646899E7 jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 5177344.0 # HELP executor_pool_max_threads プールで許可されるスレッドの最大数 # TYPE executor_pool_max_threads ゲージ executor_pool_max_threads{name="applicationTaskExecutor",} 2.147483647E9 ... # TYPE jvm_buffer_count_buffers ゲージ jvm_buffer_count_buffers{id="mapped - 'non-volatile memory'",} 0.0 jvm_buffer_count_buffers{id="mapped",} 0.0 jvm_buffer_count_buffers{id="direct",} 7.0 # HELP jvm_buffer_total_capacity_bytes このプール内のバッファの総容量の推定値 # TYPE jvm_buffer_total_capacity_bytes ゲージ jvm_buffer_total_capacity_bytes{id="mapped - 'non-volatile memory'",} 0.0 jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 jvm_buffer_total_capacity_bytes{id="direct",} 57344.0 # HELP jvm_threads_peak_threads Java 仮想マシンの起動後、またはピークリセット後の最大生存スレッド数 # TYPE jvm_threads_peak_threads ゲージ jvm_threads_peak_threads 30.0 # HELP jvm_threads_states_threads 状態ごとの現在のスレッド数 # TYPE jvm_threads_states_threads ゲージ jvm_threads_states_threads{state="runnable",} 11.0 jvm_threads_states_threads{state="blocked",} 0.0
ステップ 2:Micrometer の統合
-
左側のナビゲーションウィンドウで、[インテグレーションセンター] を選択します。次に、[Micrometer] を検索してクリックします。
-
Micrometer パネルの [設定] タブで、[環境タイプ] を選択し、必要な設定を行ってから [OK] をクリックします。
パラメーター
説明
[環境タイプの選択]
アプリケーションがデプロイされている環境。
-
Container Service 環境
-
ECS (VPC)
[クラスターの選択]
アプリケーションがデプロイされているクラスター。
[Pod ラベル]
Micrometer サービスを識別するための一意の Pod ラベル。
[サービスポート]
Java アプリケーションのサービスポート。デフォルト値が自動的に入力されます。
[メトリックパス]
Micrometer がメトリックを公開するパス。デフォルトのパスが自動的に入力されます。
[HTTPS 経由でのスクレイプ]
このオプションを有効にすると、HTTPS 経由でメトリックをスクレイプします。デフォルトでは、メトリックは HTTP 経由でスクレイプされます。
[メトリクスのスクレイプ間隔 (秒)]
Managed Service for Prometheus がメトリックデータをスクレイプする間隔。デフォルト値は 30 秒です。
-
ステップ 3:Micrometer ダッシュボードの表示
-
左側のナビゲーションウィンドウで、[インテグレーションセンター] をクリックします。[インテグレーションセンター] ページの [インストール済み] タブで、対象の環境を選択し、その名前をクリックしてコンテナ環境の詳細ページに移動します。
-
[コンポーネント] タブの [コンポーネントタイプ] セクションで Micrometer をクリックし、[ダッシュボード] タブをクリックしてすべてのダッシュボード名を表示します。
ダッシュボードリストには、
java、jvm、micrometerのラベルが付いた [JVM Micrometer] ダッシュボードが表示されます。 -
ダッシュボードの名前をクリックして、対応する Grafana ダッシュボードを表示します。
[JVM Micrometer] ダッシュボードが表示されます。これには、[job] と [Instance] のドロップダウンフィルター、[Restart Detection] スイッチ、[Quick Facts] セクション ([Uptime] と [Start time])、および [I/O Overview] セクション ([Rate] と [Errors]) が含まれています。対象のインスタンスを選択して、その JVM モニタリングデータを表示します。
ステップ 4:Micrometer のアラート設定
-
[コンポーネント] タブの [コンポーネントタイプ] セクションで Micrometer をクリックし、[アラート] タブをクリックしてデフォルトのアラートルールを表示します。
デフォルトのアラートルールには、[JVM CPU Usage Alert]、[JVM Memory Usage Alert]、[JVM Restart Alert]、[Logback Error Count Alert]、[Major GC Time Ratio Alert] があります。すべてのルールはアクティブで、優先度は P2 です。
-
カスタムのアラートルールを追加することもできます。Prometheus の [アラートルール] の作成方法の詳細については、「Prometheus インスタンスのアラートルールの作成」をご参照ください。