The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Micrometerメトリクス

このガイドでは、QuarkusアプリケーションがランタイムメトリクスとアプリケーションメトリクスのためにMicrometerメトリクスライブラリを利用する方法を説明します。

このガイドで説明されているアプリケーション固有のメトリクスとは別に、Quarkusのさまざまなエクステンションによって公開されているビルトインメトリクスを利用することもできます。これらについては、ビルトインメトリクスをサポートしている各エクステンションのガイドで説明します。

Micrometerは、Quarkusのメトリクスとして推奨されるアプローチです。

前提条件

このガイドを完成させるには、以下が必要です:

  • 約15分

  • IDE

  • JDK 11+ がインストールされ、 JAVA_HOME が適切に設定されていること

  • Apache Maven 3.8.1+

  • 使用したい場合、 Quarkus CLI

  • ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること

アーキテクチャ

Micrometerは、メトリクスの登録メカニズムを提供するコアライブラリと、メトリクスのコアタイプ(カウンター、ゲージ、タイマー、ディストリビューション・サマリーなど)を定義しています。これらのコアタイプは、さまざまなバックエンド監視システムに適応できる抽象化レイヤーを提供します。要するに、アプリケーション(またはライブラリ)は、 Counter, Gauge, Timer, または DistributionSummaryMeterRegistry と共に register することができます。その後、Micrometerはその登録を1つまたは複数の実装に委ね、各実装は関連する監視スタックの独自の考慮事項を処理します。

Micrometerでは、登録されたメーターと、さまざまなバックエンドレジストリで使用されている規約との間の翻訳に、命名規則を使用しています。たとえば、メーターの名前は、ドットでセグメントを区切って作成し、命名する必要があります。 a.name.like.this 。その後、Micrometerはその名前を、選択したレジストリが好むフォーマットに変換します。Prometheusではアンダースコアを使用しているため、Prometheus形式のメトリクス出力では前の名前が a_name_like_this と表示されます。

ソリューション

次のセクションで紹介する手順に沿って、ステップを踏んでアプリを作成することをお勧めします。ただし、完成した例にそのまま進んでも構いません。

ソリューションは micrometer-quickstart ディレクトリ にあります。

Mavenプロジェクトの作成

Quarkus MicrometerエクステンションはMicrometer 自身と同様に構成されています。quarkus-micrometer はコア micrometer サポートとランタイム統合を提供し、その他のQuarkus、Quarkiverse エクステンションは特定のモニタリングシステムをサポートするための追加の依存関係や要件を提供します。

この例では、Prometheus のレジストリを使用します。

まず、新しいプロジェクトが必要です。以下のコマンドで新規プロジェクトを作成します。

CLI
quarkus create app org.acme:micrometer-quickstart \
    --extension=resteasy-reactive,micrometer-registry-prometheus \
    --no-code
cd micrometer-quickstart

Gradleプロジェクトを作成するには、 --gradle または --gradle-kotlin-dsl オプションを追加します。

Quarkus CLIのインストール方法については、Quarkus CLIガイドをご参照ください。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:2.11.1.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=micrometer-quickstart \
    -Dextensions="resteasy-reactive,micrometer-registry-prometheus" \
    -DnoCode
cd micrometer-quickstart

Gradleプロジェクトを作成するには、 -DbuildTool=gradle または -DbuildTool=gradle-kotlin-dsl オプションを追加します。

このコマンドは、 micrometer-registry-prometheus エクステンションを依存関係としてインポートする Maven プロジェクトを生成します。このエクステンションは、 micrometer エクステンションだけでなく、 Prometheus をサポートするために必要な追加のライブラリ依存関係もロードします。

すでにQuarkusプロジェクトが設定されている場合は、プロジェクトのベースディレクトリーで以下のコマンドを実行することで、プロジェクトに micrometer-registry-prometheus エクステンションを追加することができます。

CLI
quarkus extension add 'micrometer-registry-prometheus'
Maven
./mvnw quarkus:add-extension -Dextensions="micrometer-registry-prometheus"
Gradle
./gradlew addExtension --extensions="micrometer-registry-prometheus"

これにより、 pom.xml に以下が追加されます:

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-micrometer-registry-prometheus")

アプリケーションの作成

Micrometerは、独自のカスタムメトリクスを構築するためのAPIを提供しています。モニタリング・システムでサポートされている最も一般的なメーターのタイプは、ゲージ、カウンター、サマリーです。以下のセクションでは、エンドポイントの例を構築し、これらの基本的なメータタイプを使用してエンドポイントの動作を観察します。

メーターを登録するには、Micrometerエクステンションによって設定され維持されている MeterRegistry への参照が必要です。 MeterRegistry は、次のようにしてアプリケーションに注入することができます。

package org.acme.micrometer;

import io.micrometer.core.instrument.MeterRegistry;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/example")
@Produces("text/plain")
public class ExampleResource {

    private final MeterRegistry registry;

    ExampleResource(MeterRegistry registry) {
        this.registry = registry;
    }
}

Micrometerは、一意のメトリック識別子およびタグの組み合わせと、特定のメーターインスタンスとの間の内部マッピングを維持しています。 registercounter や他のメソッドを使用してカウンターを増加させたり値を記録したりしても、識別子とタグ/ラベル値の組み合わせがこれまでにないものでない限り、メーターの新しいインスタンスは作成されません。

ゲージ

ゲージは、車のスピードメーターのように、時間の経過とともに増えたり減ったりする値を測定するものです。ゲージは、キャッシュやコレクションの統計情報を監視する際に便利です。次の簡単な例では、リストのサイズを監視しています。

    LinkedList<Long> list = new LinkedList<>();

    // Update the constructor to create the gauge
    ExampleResource(MeterRegistry registry) {
        this.registry = registry;
        registry.gaugeCollectionSize("example.list.size", Tags.empty(), list);
    }

    @GET
    @Path("gauge/{number}")
    public Long checkListSize(long number) {
        if (number == 2 || number % 2 == 0) {
            // add even numbers to the list
            list.add(number);
        } else {
            // remove items from the list for odd numbers
            try {
                number = list.removeFirst();
            } catch (NoSuchElementException nse) {
                number = 0;
            }
        }
        return number;
    }

なお、偶数はリストに追加され、奇数はリストから要素を削除します。

アプリケーションを開発モードで起動します。

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

次に、以下のシーケンスを試して、プレーンテキストの出力で example_list_size を確認してください。

curl http://localhost:8080/example/gauge/1
curl http://localhost:8080/example/gauge/2
curl http://localhost:8080/example/gauge/4
curl http://localhost:8080/q/metrics
curl http://localhost:8080/example/gauge/6
curl http://localhost:8080/example/gauge/5
curl http://localhost:8080/example/gauge/7
curl http://localhost:8080/q/metrics

ゲージは設定されるのではなくサンプリングされることに注意してください。ゲージに関連付けられた値が測定間でどのように変化したかについての記録はありません。 この例では、Prometheusエンドポイントにアクセスしたときにリストのサイズが計測されます。

Micrometerには、ゲージを作成するための追加のメカニズムがいくつかあります。なお、Micrometer はデフォルトでは、観測するオブジェクトへの強い参照を作成しません。レジストリによっては、ごみ収集されたオブジェクトを観測するゲージを完全に省略したり、観測値として NaN (not a number) を使用したりしています。

どんなときにゲージを使うべきでしょうか?他のものが使えない場合に限ります。カウンターが使えるものでゲージを使ってはいけません。ゲージはカウンターよりも使いにくい場合があります。測定しているものが数えられる場合(値が常に増加するため)は、代わりにカウンターを使用してください。

カウンター

カウンタは、増加するだけの値を測定するために使用されます。以下の例では、ある数字が素数であるかどうかを調べる回数を数えます。

    @GET
    @Path("prime/{number}")
    public String checkIfPrime(long number) {
        if (number < 1) {
            return "Only natural numbers can be prime numbers.";
        }
        if (number == 1 || number == 2 || number % 2 == 0) {
            return number + " is not prime.";
        }

        if ( testPrimeNumber(number) ) {
            return number + " is prime.";
        } else {
            return number + " is not prime.";
        }
    }

    protected boolean testPrimeNumber(long number) {
        // Count the number of times we test for a prime number
        registry.counter("example.prime.number").increment();
        for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }

どのような値がチェックされたかを示すラベルやタグをカウンタに追加したくなるかもしれませんが、メトリック名( example.prime.number)とラベル値のユニークな組み合わせは、それぞれユニークな時系列を生成することを覚えておいてください。ラベル値として無制限のデータセットを使用すると、新しい時系列の作成が指数関数的に増加する「カーディナリティ・エクスプロージョン(cardinality explosion)」が発生する可能性があります。

Label and tag can be used interchangeably. You may also see "attribute" used in this context in some documentation. The gist is each that each label or tag or attribute defines an additional bit of information associated with the single numerical measurement that helps you classify, group, or aggregate the measured value later. The Micrometer API uses Tag as the mechanism for specifying this additional data.

しかし、もう少し情報を伝えるためのタグを追加することは可能です。コードを調整して、カウンターを動かし、追加の情報を伝えるタグを追加してみましょう。

    @GET
    @Path("prime/{number}")
    public String checkIfPrime(long number) {
        if (number < 1) {
            registry.counter("example.prime.number", "type", "not-natural").increment();
            return "Only natural numbers can be prime numbers.";
        }
        if (number == 1 ) {
            registry.counter("example.prime.number", "type", "one").increment();
            return number + " is not prime.";
        }
        if (number == 2 || number % 2 == 0) {
            registry.counter("example.prime.number", "type", "even").increment();
            return number + " is not prime.";
        }

        if ( testPrimeNumber(number) ) {
            registry.counter("example.prime.number", "type", "prime").increment();
            return number + " is prime.";
        } else {
            registry.counter("example.prime.number", "type", "not-prime").increment();
            return number + " is not prime.";
        }
    }

    protected boolean testPrimeNumber(long number) {
        for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }

このカウンタが出力するデータを見ると、負の数、1の数、偶数の数などがどれくらいの頻度でチェックされたかがわかります。次のシーケンスを試して、プレーンテキストの出力で example_prime_number_total を探してみてください。なお、 _total サフィックスは、元々指定されていたカウンタ名 example.prime.number に Micrometer が Prometheus の命名規則を適用したときに付けられたものです。

Quarkusを開発モードで起動したままにしていない場合は、再度起動してください。

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

そして、以下のシーケンスを実行します。

curl http://localhost:8080/example/prime/-1
curl http://localhost:8080/example/prime/0
curl http://localhost:8080/example/prime/1
curl http://localhost:8080/example/prime/2
curl http://localhost:8080/example/prime/3
curl http://localhost:8080/example/prime/15
curl http://localhost:8080/q/metrics

どんな時にカウンターを使うべきでしょうか?時間を計ることもまとめることもできないようなことをしているときだけです。カウンターはカウントを記録するだけなので、それだけで十分な場合もあります。しかし、値がどのように変化しているかをより深く理解したい場合は、タイマー(基本的な測定単位が時間の場合)やディストリビューション・サマリーの方が適切かもしれません。

サマリーとタイマー

Micrometerのタイマーとディストリビューション・サマリーは非常によく似ています。どちらも観測値を記録することができ、その値は他の記録された値と合算されて合計値として保存されます。また、Micrometerでは、記録された測定値の数を示すカウンタをインクリメントし、(減衰間隔内で)最大の観測値を追跡します。

ディストリビューション・サマリーは、 record メソッドを呼び出して観測値を記録することで入力されます。一方、タイマーは、時間の扱いや持続時間の測定に特化した追加機能を提供します。例えば、タイマーを使って、Supplier関数の呼び出しをラップする record メソッドの1つを使って、素数の計算にかかる時間を測定することができます。

    protected boolean testPrimeNumber(long number) {
        Timer timer = registry.timer("example.prime.number.test");
        return timer.record(() -> {
            for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
                if (number % i == 0) {
                    return false;
                }
            }
            return true;
        });
    }

Micrometerは、このタイマーの測定値を出力する際に、Prometheus の規則を適用します。Prometheusでは、時間を秒単位で測定します。Micrometerは、測定された持続時間を秒に変換し、規約に従ってメトリック名に単位を含めます。プライムエンドポイントをさらに数回訪れた後、プレーンテキストの出力で次の3つのエントリを確認してください: example_prime_number_test_seconds_count, example_prime_number_test_seconds_sum, example_prime_number_test_seconds_max

Quarkusを開発モードで起動したままにしていない場合は、再度起動してください。

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

そして、以下のシーケンスを実行します。

curl http://localhost:8080/example/prime/256
curl http://localhost:8080/q/metrics
curl http://localhost:8080/example/prime/7919
curl http://localhost:8080/q/metrics

タイマーとディストリビューションサマリーは、ヒストグラムデータ、事前に計算されたパーセンタイル、サービスレベル目標(SLO)の境界線など、追加の統計情報を出力するように設定できます。カウント、サム、ヒストグラムのデータは、ディメンション間(または一連のインスタンス間)で再集計できますが、事前に計算されたパーセンタイル値はできないことに注意してください。

自動生成されたメトリクスを確認する

メトリクスを表示するには、 curl localhost:8080/q/metrics/ を実行します。

Micrometerエクステンションは、HTTPサーバーのリクエストの時間を自動的に計測します。Prometheus のタイマーの命名規則に従い、 http_server_requests_seconds_counthttp_server_requests_seconds_sumhttp_server_requests_seconds_max を参照してください。要求された URI、HTTP メソッド (GET、POST など)、ステータスコード (200、302、404 など)、そしてより一般的な結果フィールドのための次元ラベルが追加されました。

# HELP http_server_requests_seconds
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{method="GET",outcome="SUCCESS",status="200",uri="/example/prime/{number}",} 1.0
http_server_requests_seconds_sum{method="GET",outcome="SUCCESS",status="200",uri="/example/prime/{number}",} 0.017385896
# HELP http_server_requests_seconds_max
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{method="GET",outcome="SUCCESS",status="200",uri="/example/prime/{number}",} 0.017385896
#

メトリクスは遅延的に表示され、何かがアクセスしようとするまでエンドポイントのデータが表示されないことが多いことに注意してください。

エンドポイントの無視

quarkus.micrometer.binder.http-server.ignore-patterns プロパティを使用して、HTTP エンドポイントの測定を無効にすることができます。このプロパティには、無視すべきURIパスを特定する単純な正規表現のマッチパターンをコンマで区切ったリストを指定できます。例えば、 quarkus.micrometer.binder.http-server.ignore-patterns=/example/prime/[0-9]+ を設定すると、以下へのリクエストが無視されます。http://localhost:8080/example/prime/7919 へのリクエストは無視されます。http://localhost:8080/example/gauge/7919 へのリクエストは、依然として計測されます。

URIテンプレート

micrometerエクステンションでは、パスパラメータを含むURIをテンプレート化して表現することに最善の努力を払います。上の例を使うと、次のようなリクエストは http://localhost:8080/example/prime/7919 へのリクエストは、 http_server_requests_seconds_* メトリクスの属性として、 uri=/example/prime/{number} という値で表示されます。

正しいURLが特定できない場合は、 quarkus.micrometer.binder.http-server.match-patterns プロパティを使用します。このプロパティには、単純な正規表現パターンと置換文字列の関連性を定義するコンマ区切りのリストを指定できます。例えば、 quarkus.micrometer.binder.http-server.match-patterns=/example/prime/[0-9]+=/example/{jellybeans} を設定すると、要求された uri が /example/prime/[0-9]+ に一致した場合、uri 属性に /example/{jellybeans} の値が使用されます。

MeterFilter を使ってメトリクスを設定する

Micrometerは MeterFilter インスタンスを使って、 MeterRegistry インスタンスが出力するメトリクスをカスタマイズします。 Micrometer エクステンションは、 MeterFilter のCDI Beanを検出して、 MeterRegistry インスタンスを初期化するときにそれを使います。

@Singleton
public class CustomConfiguration {

    @ConfigProperty(name = "deployment.env")
    String deploymentEnv;

    /** Define common tags that apply only to a Prometheus Registry */
    @Produces
    @Singleton
    @MeterFilterConstraint(applyTo = PrometheusMeterRegistry.class)
    public MeterFilter configurePrometheusRegistries() {
        return MeterFilter.commonTags(Arrays.asList(
                Tag.of("registry", "prometheus")));
    }

    /** Define common tags that apply globally */
    @Produces
    @Singleton
    public MeterFilter configureAllRegistries() {
        return MeterFilter.commonTags(Arrays.asList(
                Tag.of("env", deploymentEnv)));
    }

    /** Enable histogram buckets for a specific timer */
    @Produces
    @Singleton
    public MeterFilter enableHistogram() {
        return new MeterFilter() {
            @Override
            public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
                if(id.getName().startsWith("myservice")) {
                    return DistributionStatisticConfig.builder()
                        .percentiles(0.5, 0.95)     // median and 95th percentile, not aggregable
                        .percentilesHistogram(true) // histogram buckets (e.g. prometheus histogram_quantile)
                        .build()
                        .merge(config);
                }
                return config;
            }
        };
    }
}

この例では、シングルトン CDI Beanは、2 つの異なる MeterFilter Beanを生成します。1 つは Prometheus MeterRegistry インスタンスのみに適用され ( @MeterFilterConstraint 修飾子を使用)、もう 1 つはすべての MeterRegistry インスタンスに適用されます。アプリケーション設定プロパティーも注入され、タグ値として使用されます。MeterFiltersのその他の例は、次のリンクにあります:公式ドキュメント

Micrometerはアノテーションをサポートしていますか?

Micrometerでは、メソッドに追加できる2つのアノテーション、 @Counted@Timed が定義されています。 @Timed アノテーションは、メソッドの実行をラップし、アノテーション自体に定義されているタグに加えて、次のタグを出力します:class、method、exception("none "または検出された例外のシンプルなクラス名)。

意味のあるタグ値を動的に割り当てることができないため、アノテーションの使用には制限があります。また、RESTエンドポイント・メソッドやVert.x Routesなどの多くのメソッドは、最初から無設定でmicrometerエクステンションによってカウントされ、時間が計測されることに注意してください。

他のレジストリ実装の使用

Prometheusを使用していない場合は、いくつかの選択肢があります。いくつかのMicrometerのレジストリーの実装は、 Quarkiverseのエクステンション でラップされています。たとえば、Micrometer StackDriver MeterRegistryを使用するには、 quarkiverse-micrometer-registry-stackdriver エクステンションを使用します。

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer-registry-stackdriver</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-micrometer-registry-stackdriver")

使用したい Micrometer レジストリに関連するエクステンションがまだない場合は、 quarkus-micrometer エクステンションを使用して、パッケージ化された MeterRegistry の依存関係を直接取り込んでください。

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer</artifactId>
</dependency>
<dependency>
    <groupId>com.acme</groupId>
    <artifactId>custom-micrometer-registry</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-micrometer")
implementation("com.acme:custom-micrometer-registry")

次に、次のセクションで説明するように、MeterRegistry を設定して初期化するために、独自のプロバイダを指定する必要があります。

カスタマイズされたMeterRegistryの作成

必要に応じて、カスタム @Produces メソッドを使用して、カスタマイズされた MeterRegistry を作成して設定します。

以下の例では、StatsDで使用される行フォーマットをカスタマイズしています。

@Produces
@Singleton
public StatsdMeterRegistry createStatsdMeterRegistry(StatsdConfig statsdConfig, Clock clock) {
    // define what to do with lines
    Consumer<String> lineLogger = line -> logger.info(line);

    // inject a configuration object, and then customize the line builder
    return StatsdMeterRegistry.builder(statsdConfig)
          .clock(clock)
          .lineSink(lineLogger)
          .build();
}

この例は、Micrometerのドキュメントにある以下の指示に対応しています: https://micrometer.io/docs/registry/statsD#_customizing_the_metrics_sink

このメソッドは、 MeterRegistry の特定の型を @Singleton として返すことに注意してください。レジストリーを設定するために必要な設定属性を注入するには、MicroProfile Configを使用します。 quarkiverse-micrometer-registry-statsd のようなほとんどのMicrometerのレジストリーエクステンションでは、Quarkusの設定モデルと統合されたレジストリー固有の設定オブジェクトのプロデューサを定義しています。

MicroProfile Metrics API のサポート

アプリケーションで MicroProfile Metrics API を使用している場合、Micrometer エクステンションは、これらのメトリクスを Micrometer レジストリにマッピングするための適応レイヤーを作成します。2 つのシステム間の命名規則は異なるので、MP MetricsをMicrometerと一緒に使用した場合に出力されるメトリクスは変化します。MeterFilters を使用して名前やタグをダッシュボードが必要とするものに再マッピングすることができます。

@Produces
@Singleton
public MeterFilter renameApplicationMeters() {
    final String targetMetric = MPResourceClass.class.getName() + ".mpAnnotatedMethodName";

    return MeterFilter() {
        @Override
        public Meter.Id map(Meter.Id id) {
            if (id.getName().equals(targetMetric)) {
                // Drop the scope tag (MP Registry type: application, vendor, base)
                List<Tag> tags = id.getTags().stream().filter(x -> !"scope".equals(x.getKey()))
                        .collect(Collectors.toList());
                // rename the metric
                return id.withName("my.metric.name").replaceTags(tags);
            }
            return id;
        }
    };
}

MicroProfile Metrics APIを必要とする場合は、ビルドファイルに以下の依存関係が存在することを確認してください。

pom.xml
<dependency>
    <groupId>org.eclipse.microprofile.metrics</groupId>
    <artifactId>microprofile-metrics-api</artifactId>
</dependency>
build.gradle
implementation("org.eclipse.microprofile.metrics:microprofile-metrics-api")
MP Metrics API互換性レイヤは、将来的には別のエクステンションに移される予定です。

設定リファレンス

ビルド時に固定される設定プロパティ - それ以外の設定プロパティは実行時に上書き可能

Configuration property

タイプ

デフォルト

Micrometer metrics support. Micrometer metrics support is enabled by default.

Environment variable: QUARKUS_MICROMETER_ENABLED

boolean

true

Micrometer MeterRegistry discovery. Micrometer MeterRegistry implementations discovered on the classpath will be enabled automatically by default.

Environment variable: QUARKUS_MICROMETER_REGISTRY_ENABLED_DEFAULT

boolean

true

Micrometer MeterBinder discovery. Micrometer MeterBinder implementations discovered on the classpath will be enabled automatically by default.

Environment variable: QUARKUS_MICROMETER_BINDER_ENABLED_DEFAULT

boolean

true

Outbound HTTP request metrics support. Support for HTTP client metrics will be enabled if Micrometer support is enabled, the REST client feature is enabled, and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_CLIENT_ENABLED

boolean

Inbound HTTP metrics support. Support for HTTP server metrics will be enabled if Micrometer support is enabled, an extension serving HTTP traffic is enabled, and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_SERVER_ENABLED

boolean

Micrometer JVM metrics support. Support for JVM metrics will be enabled if Micrometer support is enabled, and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_JVM

boolean

Kafka metrics support. Support for Kafka metrics will be enabled if Micrometer support is enabled, the Kafka Consumer or Producer interface is on the classpath and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_KAFKA_ENABLED

boolean

gRPC Server metrics support. Support for gRPC server metrics will be enabled if Micrometer support is enabled, the gRPC server interfaces are on the classpath and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_GRPC_SERVER_ENABLED

boolean

gRPC Client metrics support. Support for gRPC client metrics will be enabled if Micrometer support is enabled, the gRPC client interfaces are on the classpath and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_GRPC_CLIENT_ENABLED

boolean

Eclipse MicroProfile Metrics support.

Support for MicroProfile Metrics will be enabled if Micrometer support is enabled and the MicroProfile Metrics dependency is present:

<dependency>
  <groupId>org.eclipse.microprofile.metrics</groupId>
  <artifactId>microprofile-metrics-api</artifactId>
</dependency>

The Micrometer extension currently provides a compatibility layer that supports the MP Metrics API, but metric names and recorded values will be different. Note that the MP Metrics compatibility layer will move to a different extension in the future.

Environment variable: QUARKUS_MICROMETER_BINDER_MP_METRICS_ENABLED

boolean

Micrometer System metrics support. Support for System metrics will be enabled if Micrometer support is enabled, and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_SYSTEM

boolean

Vert.x metrics support. Support for Vert.x metrics will be enabled if Micrometer support is enabled, Vert.x MetricsOptions is on the classpath and either this value is true, or this value is unset and quarkus.micrometer.binder-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_BINDER_VERTX_ENABLED

boolean

Support for export to JSON format. Off by default.

Environment variable: QUARKUS_MICROMETER_EXPORT_JSON_ENABLED

boolean

false

The path for the JSON metrics endpoint. The default value is metrics.

Environment variable: QUARKUS_MICROMETER_EXPORT_JSON_PATH

string

metrics

Statistics like max, percentiles, and histogram counts decay over time to give greater weight to recent samples. Samples are accumulated to such statistics in ring buffers which rotate after the expiry, with this buffer length.

Environment variable: QUARKUS_MICROMETER_EXPORT_JSON_BUFFER_LENGTH

int

3

Statistics like max, percentiles, and histogram counts decay over time to give greater weight to recent samples. Samples are accumulated to such statistics in ring buffers which rotate after this expiry, with a particular buffer length.

Environment variable: QUARKUS_MICROMETER_EXPORT_JSON_EXPIRY

Duration

P3D

Support for export to Prometheus. Support for Prometheus will be enabled if Micrometer support is enabled, the PrometheusMeterRegistry is on the classpath and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

Environment variable: QUARKUS_MICROMETER_EXPORT_PROMETHEUS_ENABLED

boolean

The path for the prometheus metrics endpoint (produces text/plain). The default value is metrics and is resolved relative to the non-application endpoint (q), e.g. ${quarkus.http.root-path}/${quarkus.http.non-application-root-path}/metrics. If an absolute path is specified (/metrics), the prometheus endpoint will be served from the configured path.

Environment variable: QUARKUS_MICROMETER_EXPORT_PROMETHEUS_PATH

string

metrics

By default, this extension will create a Prometheus MeterRegistry instance. Use this attribute to veto the creation of the default Prometheus MeterRegistry.

Environment variable: QUARKUS_MICROMETER_EXPORT_PROMETHEUS_DEFAULT_REGISTRY

boolean

true

Comma-separated list of regular expressions used to specify uri labels in http metrics.

Outbount HTTP client instrumentation will attempt to transform parameterized resource paths, /item/123, into a generic form, /item/{id}, to reduce the cardinality of uri label values.

Patterns specified here will take precedence over those computed values.

For example, if /item/\\\\d+=/item/custom or /item/[0-9]+=/item/custom is specified in this list, a request to a matching path (/item/123) will use the specified replacement value (/item/custom) as the value for the uri label. Note that backslashes must be double escaped as \\\\.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_CLIENT_MATCH_PATTERNS

list of string

Comma-separated list of regular expressions defining uri paths that should be ignored (not measured).

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_CLIENT_IGNORE_PATTERNS

list of string

Maximum number of unique URI tag values allowed. After the max number of tag values is reached, metrics with additional tag values are denied by filter.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_CLIENT_MAX_URI_TAGS

int

100

Comma-separated list of regular expressions used to specify uri labels in http metrics.

Vertx instrumentation will attempt to transform parameterized resource paths, /item/123, into a generic form, /item/{id}, to reduce the cardinality of uri label values.

Patterns specified here will take precedence over those computed values.

For example, if /item/\\\\d+=/item/custom or /item/[0-9]+=/item/custom is specified in this list, a request to a matching path (/item/123) will use the specified replacement value (/item/custom) as the value for the uri label. Note that backslashes must be double escaped as \\\\.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_SERVER_MATCH_PATTERNS

list of string

Comma-separated list of regular expressions defining uri paths that should be ignored (not measured).

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_SERVER_IGNORE_PATTERNS

list of string

Suppress non-application uris from metrics collection. This will suppress all metrics for non-application endpoints using ${quarkus.http.root-path}/${quarkus.http.non-application-root-path}.

Suppressing non-application uris is enabled by default.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_SERVER_SUPPRESS_NON_APPLICATION_URIS

boolean

true

Maximum number of unique URI tag values allowed. After the max number of tag values is reached, metrics with additional tag values are denied by filter.

Environment variable: QUARKUS_MICROMETER_BINDER_HTTP_SERVER_MAX_URI_TAGS

int

100

Prometheus registry configuration properties.

A property source for configuration of the Prometheus MeterRegistry, see https://micrometer.io/docs/registry/prometheus.

Environment variable: QUARKUS_MICROMETER_EXPORT_PROMETHEUS

Map<String,String>

期間フォーマットについて

期間のフォーマットは標準の java.time.Duration フォーマットを使用します。詳細は Duration#parse() javadoc を参照してください。

数値で始まる期間の値を指定することもできます。この場合、値が数値のみで構成されている場合、コンバーターは値を秒として扱います。そうでない場合は、 PT が暗黙的に値の前に付加され、標準の java.time.Duration 形式が得られます。