5.2. Eclipse Vert.x での Prometheus を使用したアプリケーションメトリクスの公開
Prometheus は監視されたアプリケーションに接続してデータを収集します。アプリケーションはメトリクスをサーバーに送信しません。
前提条件
- Prometheus サーバーがクラスターで実行している。
手順
アプリケーションの
pom.xmlファイルにvertx-micrometer依存関係およびvertx-web依存関係を含めます。pom.xml
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-micrometer-metrics</artifactId> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> </dependency>バージョン 3.5.4 以降、Prometheus のメトリクスを公開するには、カスタム
Launcherクラスで Eclipse Vert.x オプションを設定する必要があります。カスタム
LauncherクラスのbeforeStartingVertxメソッドおよびafterStartingVertxメソッドを上書きして、メトリクスエンジンを設定します。以下に例を示します。CustomLauncher.java ファイルの例
package org.acme; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.config.MeterFilter; import io.micrometer.core.instrument.distribution.DistributionStatisticConfig; import io.micrometer.prometheus.PrometheusMeterRegistry; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; import io.vertx.core.http.HttpServerOptions; import io.vertx.micrometer.MicrometerMetricsOptions; import io.vertx.micrometer.VertxPrometheusOptions; import io.vertx.micrometer.backends.BackendRegistries; public class CustomLauncher extends Launcher { @Override public void beforeStartingVertx(VertxOptions options) { options.setMetricsOptions(new MicrometerMetricsOptions() .setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true) .setStartEmbeddedServer(true) .setEmbeddedServerOptions(new HttpServerOptions().setPort(8081)) .setEmbeddedServerEndpoint("/metrics")) .setEnabled(true)); } @Override public void afterStartingVertx(Vertx vertx) { PrometheusMeterRegistry registry = (PrometheusMeterRegistry) BackendRegistries.getDefaultNow(); registry.config().meterFilter( new MeterFilter() { @Override public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) { return DistributionStatisticConfig.builder() .percentilesHistogram(true) .build() .merge(config); } }); }カスタムの
Verticleクラスを作成し、メトリクスを収集するためにstartメソッドを上書きします。たとえば、Timerクラスを使用して実行時間を測定します。CustomVertxApp.java ファイルの例
package org.acme; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; import io.vertx.core.AbstractVerticle; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; import io.vertx.core.http.HttpServerOptions; import io.vertx.micrometer.backends.BackendRegistries; public class CustomVertxApp extends AbstractVerticle { @Override public void start() { MeterRegistry registry = BackendRegistries.getDefaultNow(); Timer timer = Timer .builder("my.timer") .description("a description of what this timer does") .register(registry); vertx.setPeriodic(1000, l -> { timer.record(() -> { // Do something }); }); } }アプリケーションの
pom.xmlファイルの<vertx.verticle>プロパティーおよび<vertx.launcher>プロパティーを設定して、カスタムクラスを参照します。<properties> ... <vertx.verticle>org.acme.CustomVertxApp</vertx.verticle> <vertx.launcher>org.acme.CustomLauncher</vertx.launcher> ... </properties>アプリケーションを起動します。
$ mvn vertx:runトレースされたエンドポイントを複数回呼び出します。
$ curl http://localhost:8080/ Helloコレクションが発生するまで 15 秒以上待機し、Prometheus UI でメトリクスを確認します。
-
http://localhost:9090/ で Prometheus UI を開き、Expression ボックスに
helloと入力します。 -
提案から、たとえば
application:hello_countを選択し、Execute をクリックします。 - 表示される表で、リソースメソッドが呼び出された回数を確認できます。
-
application:hello_time_mean_secondsを選択して、すべての呼び出しの平均時間を確認します。
作成したすべてのメトリクスの前には
application:があることに注意してください。Eclipse MicroProfile Metrics 仕様が要求するように、Eclipse Vert.x によって自動的に公開される他のメトリックがあります。これらのメトリクスにはbase:およびvendor:という接頭辞が付けられ、アプリケーションが実行する JVM に関する情報を公開します。-
http://localhost:9090/ で Prometheus UI を開き、Expression ボックスに
関連情報
- Eclipse Vert.x で Micrometer メトリクスを使用する方法は、Eclipse Vert.x} Micrometer Metrics を参照してください。