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

Micrometer Metrics

本指南展示了您的Quarkus应用程序如何利用Micrometer metrics库测量运行时和应用程序metrics。

除了在本指南中所述的一些的应用特定的metrics之外,您也可以利用各种Quarkus扩展所暴露的内置metrics。这些将在支持内置metrics的每个特定扩展的指南中描述。

Micrometer是Quarkus推荐的metrics度量库。

先决条件

要完成这个指南,你需要:

  • 大概15分钟

  • 编辑器

  • 安装JDK 11以上版本并正确配置了 JAVA_HOME

  • Apache Maven 3.8.1+

  • 如果你愿意的话,还可以选择使用Quarkus CLI

  • 如果你想构建原生可执行程序,可以选择安装Mandrel或者GraalVM,并正确配置(或者使用Docker在容器中进行构建)

架构

Micrometer定义了一个核心库为Metrics提供注册机制,以及核心metric类型(Counters、Gauges、Timers、Distribution Summaries等)。这些核心类型提供了一个抽象层,以适应不同的后端监控系统。从本质上讲,您的应用程序(或一个库)可以向 MeterRegistry 注册 一个 CounterGaugeTimer ,或 DistributionSummary 。Micrometer会将该注册委托给一个或多个实现,每个实现都会处理相关监控栈的特定考虑。

Micrometer使用了一套命名规范来翻译已注册的Meters和各种后端registries使用的规范。例如,Meters名称的创建和命名应使用点来分隔各段,如 a.name.like.this 。之后Micrometer会将该名称翻译成所选registries使用的格式。Prometheus使用的是下划线,这意味着之前的名称在Prometheus的格式的metrics输出中会显示为 a_name_like_this

解决方案

我们建议您按照下面几节的说明,一步一步地创建应用程序。您也可以直接跳到解决方案。或者:

该解决方案位于 micrometer-quickstart 目录中。

创建Maven项目

Quarkus Micrometer扩展的结构与Micrometer本身类似: quarkus-micrometer 提供核心Micrometer支持和运行时集成,其他Quarkus和Quarkiverse扩展提供额外的依赖和需求,以支持相应的监控系统。

在这个例子中,我们将使用Prometheus registry。

首先,我们需要一个新的项目。用以下命令创建一个新项目:

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

创建Grade项目,请添加 --gradle 或者 --gradle-kotlin-dsl 参数。

关于如何安装并使用Quarkus CLI的更多信息,请参考Quarkus CLI指南

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

创建Grade项目,请添加 -DbuildTool=gradle 或者 -DbuildTool=gradle-kotlin-dsl 参数。

该命令生成一个Maven项目,将 micrometer-registry-prometheus 扩展作为一个依赖导入。该扩展将加载核心的 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
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-micrometer-registry-prometheus")

编写应用程序

Micrometer提供了一个API,允许您构建自己的自定义度量。监测系统支持的最常见的meters类型是gauges、counters和summaries。下面的章节构建了一个示例节点,并使用这些基本的meter类型观察节点行为。

要注册meters,您需要一个对 MeterRegistry 的引用,该引用由Micrometer扩展配置和维护。 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在唯一的metric标识和标签组合与对应的meter实例之间维护着一种内部映射关系。使用 register , counter , 或其他方法来增加counters或记录的数值并不会创建一个新的meter实例,除非该标识符和标记/标签值的组合以前未曾出现过。

Gauges

Gauges测量的是一个可以随时间增加或减少的数值,就像汽车上的车速表。Gauges在监控一个缓存或集合的统计数据时很有用。考虑下面这个观察列表大小的简单例子:

    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

需要注意的是,gauges是采样的,而不是设置的;因而与一个gauge相关的值在不同的测量之间可能会发生怎样的变化将无从记录。在本例中,列表的大小会在访问Prometheus节点时被观察到。

Micrometer提供了一些额外的机制来创建gauges。请注意,Micrometer在默认情况下不会对它所观察的对象创建强引用。根据其所在的registry,Micrometer要么完全省略掉观察已经被垃圾收集的对象的gauge,要么使用 NaN (not a umber - 不是数字)作为观察值。

什么时候应该使用Gauge?只有在您无法使用其他测量值的时候。不要对您可以计算的东西使用gauge。Gauges的使用可能没有counters那么直白。如果您要测量的东西可以计数(因为数值总是递增的),就用counter代替。

计数器(Counters)

Counters是用来测量只增加的数值的。在下面的例子中,您将统计您测试一个数字是否是质数的次数:

    @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;
    }

以上代码打算给counter添加一个标签来表明是什么值被检查了,但是请记住,metric名称( 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.

不过添加一个标签以传达更多的信息也是有可能的。让我们调整我们的代码,改动一下counter来添加一些标签以传达更多信息。

    @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;
    }

看一下这个counter产生的数据,您可以看到负数或者数字1被或者偶数等被检查的频率。尝试以下命令,并在文本输出中查找 example_prime_number_total 。请注意,当Micrometer将Prometheus命名规则应用于 example.prime.number ,即最初指定的counter名称时,会添加后缀 _total

如果您的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

那么什么时候使用counter呢?只有当您正在做的事情不能被计时(timed)(或总结summarized)的时候。counter只记录一个计数值,而这个值可能就是所需的全部。但是,如果您想更多地了解一个值是如何变化的,那么timer(当基本的测量单位是时间时)或distribution summary可能更合适。

Summaries 和 Timers

Micrometer中的Timers和distribution summaries非常相似。两者都允许您记录这样一种观察值,它将与其他记录值汇总并作为一个总和来被记录。Micrometer也会使用一个counter来表示已经记录的测量值的个数,并且跟踪最大的观察值(在一个衰减的区间内)。

Distribution summaries是通过调用 record 方法来记录观测值,而timers则提供了专门用于处理时间和测量持续时间的额外功能。例如,我们可以通过如下方式使用一个timer来测量计算素数所需的时间:

    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在为这个timer发送metrics时将应用Prometheus规范。Prometheus测量时间的单位是秒。Micrometer会将测量的持续时间转换为秒,并按照规范在metric名称中包含单位。再访问几次prime节点后,在文本输出中寻找以下三个条目: 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

Timers和distritution summaries都可以被配置为发送额外的统计数据,如hitogram数据、预计算的百分位数或service level object(SLO)的边界值。请注意,计数、总和和histogram数据可以跨维度(或跨一系列实例)重新汇总,而预计算的百分数则不能。

审查自动生成的metrics

要查看metrics,请执行 curl localhost:8080/q/metrics/

Micrometer扩展会自动为HTTP服务器请求计时。按照Prometheus对timers的命名惯例,查找 http_server_requests_seconds_count , http_server_requests_seconds_sum , 和 http_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
#

请注意,metric是延迟出现的,您通常不会看到您的节点的任何数据,直到有请求试图访问它,等等。

忽略节点

您可以使用 quarkus.micrometer.binder.http-server.ignore-patterns 属性禁用对HTTP节点的测量。这个属性接受一个用逗号分隔的简单正则表达式匹配的列表来识别应被忽略的URI路径。例如, quarkus.micrometer.binder.http-server.ignore-patterns=/example/prime/[0-9]+ 会忽略对 <a href="http://localhost:8080/example/prime/7919" class="bare">http://localhost:8080/example/prime/7919</a>; 请求的监测。而一个对 <a href="http://localhost:8080/example/gauge/7919" class="bare">http://localhost:8080/example/gauge/7919</a>; 的请求仍会被监测。

URI模板

Micrometer扩展将尽最大努力以模板的形式表示包含路径参数的URI。使用上面的例子,一个对 <a href="http://localhost:8080/example/prime/7919" class="bare">http://localhost:8080/example/prime/7919</a>; 的请求应该作为 http_server_requests_seconds_* metrics 的一个属性出现,其值为 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来配置metrics

Micrometer使用 MeterFilter 实例来定制 MeterRegistry 实例发出的metrics。Micrometer扩展将检测 MeterFilter CDI beans,并在初始化 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单例将产生两个不同的 MeterFilter beans。一个将只用于Prometheus MeterRegistry 实例(使用 @MeterFilterConstraint 修饰符),另一个将用于所有 MeterRegistry 实例。一个应用配置属性也被注入并作为标签值使用。MeterFilters的其他例子可以在 官方文档 中找到。

Micrometer支持注解吗?

Micrometer确实也定义了两个注解, @Counted@Timed ,它们可以被添加到方法中。 @Timed 注解将修饰一个方法的执行。除了注解本身定义的标签外,还将添加以下标签:类名、方法名和异常("none "或检测到的异常的简单类名)。

使用注解是被限制的,因为您不能动态地分配有意义的标签值。还要注意的是,许多方法的计数和计时,例如REST节点方法或Vert.x Routes,Micrometer扩展都支持开箱即用。

使用其他Registry实现

如果您不使用Prometheus,您可以有其他选择。一些Micrometer registry的实现已经包含在 Quarkiverse扩展 中了。例如,要使用Micrometer StackDriver MeterRegistry,您可以使用 quarkus-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 registry还没有对应的扩展,请使用 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")

然后,您将需要指定自定义的provider来配置和初始化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来注入任何您需要更改registry的配置属性。大多数Micrometer registry扩展,如 quarkus-micrometer-registry-statsd ,为registry特定的配置对象定义了一个用于与Quarkus配置模型集成的生产者。

MicroProfile Metrics API支持

如果您在您的应用程序中使用MicroProfile Metrics API,Micrometer扩展将创建一个自适应层l来把这些metrics映射到Micrometer registry中。注意,两个系统之间的命名规则是不同的,所以在Micrometer中使用MP Metrics时发出的metrics将发生变化。您可以使用 MeterFilter ,根据您的规范重新映射名称或标签。

@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 fixed at build time - All other configuration properties are overridable at runtime

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>

About the Duration format

持续时间的格式使用标准的 java.time.Duration 格式您可以在 Duration#parse() javadoc 中了解更多信息。

您还可以提供以数字开头的持续时间值。 在这种情况下,如果该值仅包含一个数字,则转换器将该值视为秒。 否则,PT 会隐式添加到值的前面,以获得标准的 java.time.Duration 格式。