Micrometer Metrics
本指南展示了您的Quarkus应用程序如何利用Micrometer metrics库测量运行时和应用程序metrics。
除了在本指南中所述的一些的应用特定的metrics之外,您也可以利用各种Quarkus扩展所暴露的内置metrics。这些将在支持内置metrics的每个特定扩展的指南中描述。
Micrometer是Quarkus推荐的metrics度量库。 |
先决条件
完成这个指南,你需要:
-
大概15分钟
-
编辑器
-
安装JDK 11以上版本并正确配置了
JAVA_HOME
-
Apache Maven 3.9.1
-
如果你愿意的话,还可以选择使用Quarkus CLI
-
如果你想构建原生可执行程序,可以选择安装Mandrel或者GraalVM,并正确配置(或者使用Docker在容器中进行构建)
架构
Micrometer定义了一个核心库为Metrics提供注册机制,以及核心metric类型(Counters、Gauges、Timers、Distribution Summaries等)。这些核心类型提供了一个抽象层,以适应不同的后端监控系统。从本质上讲,您的应用程序(或一个库)可以向 MeterRegistry
注册
一个 Counter
, Gauge
, Timer
,或 DistributionSummary
。Micrometer会将该注册委托给一个或多个实现,每个实现都会处理相关监控栈的特定考虑。
Micrometer使用了一套命名规范来翻译已注册的Meters和各种后端registries使用的规范。例如,Meters名称的创建和命名应使用点来分隔各段,如 a.name.like.this
。之后Micrometer会将该名称翻译成所选registries使用的格式。Prometheus使用的是下划线,这意味着之前的名称在Prometheus的格式的metrics输出中会显示为 a_name_like_this
。
解决方案
我们建议您按照下面几节的说明,一步一步地创建应用程序。您也可以直接跳到解决方案。或者:
-
克隆git存储库。
git clone https://github.com/quarkusio/quarkus-quickstarts.git
,或 -
下载这个 档案 。
该解决方案位于 micrometer-quickstart
目录中。
创建Maven项目
Quarkus Micrometer扩展的结构与Micrometer本身类似: quarkus-micrometer
提供核心Micrometer支持和运行时集成,其他Quarkus和Quarkiverse扩展提供额外的依赖和需求,以支持相应的监控系统。
在这个例子中,我们将使用Prometheus registry。
首先,我们需要一个新的项目。用以下命令创建一个新项目:
该命令生成一个Maven项目,将 micrometer-registry-prometheus
扩展作为一个依赖导入。该扩展将加载核心的 micrometer
扩展,以及支持Prometheus所需的其他依赖项。
如果您已有配置好的Quarkus项目,您可以通过在您的项目根目录下运行以下命令来将 micrometer-registry-prometheus
扩展添加到您的项目中:
quarkus extension add 'micrometer-registry-prometheus'
./mvnw quarkus:add-extension -Dextensions='micrometer-registry-prometheus'
./gradlew addExtension --extensions='micrometer-registry-prometheus'
这将在您的构建文件中添加以下内容:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer-registry-prometheus</artifactId>
</dependency>
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 jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.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;
}
请注意,在这里偶数被添加到列表中,而到奇数时列表将删除一个元素。
在开发模式下启动您的应用程序:
quarkus dev
./mvnw quarkus:dev
./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代替。
Management interface
By default, the metrics are exposed on the main HTTP server. You can expose them on a separate network interface and port by enabling the management interface with the |
计数器(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 |
不过添加一个标签以传达更多的信息也是有可能的。让我们调整我们的代码,改动一下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从之前的开发模式下退出了,那么请再次启动它:
quarkus dev
./mvnw quarkus:dev
./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从之前的开发模式下退出了,那么请再次启动它:
quarkus dev
./mvnw quarkus:dev
./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>
的请求仍会被监测。
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}
的值。
By default, the metrics are exported using the Prometheus format application/openmetrics-text
, you can revert to the former format by specifying the Accept
request header to text/plain
(curl -H "Accept: text/plain" localhost:8080/q/metrics/
).
使用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
扩展:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer-registry-stackdriver</artifactId>
</dependency>
implementation("io.quarkus:quarkus-micrometer-registry-stackdriver")
如果您想使用的Micrometer registry还没有对应的扩展,请使用 quarkus-micrometer
扩展,并直接添加已打包的MeterRegistry依赖:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer</artifactId>
</dependency>
<dependency>
<groupId>com.acme</groupId>
<artifactId>custom-micrometer-registry</artifactId>
</dependency>
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,请确保您的构建文件中存在以下依赖:
<dependency>
<groupId>org.eclipse.microprofile.metrics</groupId>
<artifactId>microprofile-metrics-api</artifactId>
</dependency>
implementation("org.eclipse.microprofile.metrics:microprofile-metrics-api")
MP Metrics API 的兼容层会在将来迁移至另外的扩展中。 |
Management interface
By default, the metrics are exposed on the main HTTP server. You can expose them on a separate network interface and port by setting quarkus.management.enabled=true
in your application configuration. Note that this property is a build-time property. The value cannot be overridden at runtime.
If you enable the management interface without customizing the management network interface and port, the metrics are exposed under: http://0.0.0.0:9000/q/metrics
. You can configure the path of each exposed format using:
quarkus.micrometer.export.json.enabled=true # Enable json metrics
quarkus.micrometer.export.json.path=metrics/json
quarkus.micrometer.export.prometheus.path=metrics/prometheus
With such a configuration, the json metrics will be available from http://0.0.0.0:9000/q/metrics/json
. The prometheus metrics will be available from http://0.0.0.0:9000/q/metrics/prometheus
.
Refer to the management interface reference for more information.
参考配置
Configuration property fixed at build time - All other configuration properties are overridable at runtime
类型 |
默认 |
|
---|---|---|
Micrometer metrics support. Micrometer metrics support is enabled by default. Environment variable: |
boolean |
|
Micrometer MeterRegistry discovery. Micrometer MeterRegistry implementations discovered on the classpath will be enabled automatically by default. Environment variable: |
boolean |
|
Micrometer MeterBinder discovery. Micrometer MeterBinder implementations discovered on the classpath will be enabled automatically by default. Environment variable: |
boolean |
|
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 Environment variable: |
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 Environment variable: |
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 Environment variable: |
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 Environment variable: |
boolean |
|
Redis client metrics support.
Support for Redis metrics will be enabled if Micrometer support is enabled, the Quarkus Redis client extension is on the classpath and either this value is true, or this value is unset and Environment variable: |
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 Environment variable: |
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 Environment variable: |
boolean |
|
Eclipse MicroProfile Metrics support. Support for MicroProfile Metrics will be enabled if Micrometer support is enabled and the MicroProfile Metrics dependency is present:
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: |
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 Environment variable: |
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 Environment variable: |
boolean |
|
Support for export to JSON format. Off by default. Environment variable: |
boolean |
|
The path for the JSON metrics endpoint. The default value is Environment variable: |
string |
|
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: |
int |
|
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: |
|
|
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 Environment variable: |
boolean |
|
The path for the prometheus metrics endpoint (produces text/plain). The default value is
If the management interface is enabled, the value will be resolved as a path relative to
Environment variable: |
string |
|
By default, this extension will create a Prometheus MeterRegistry instance. Use this attribute to veto the creation of the default Prometheus MeterRegistry. Environment variable: |
boolean |
|
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, Patterns specified here will take precedence over those computed values. For example, if Environment variable: |
list of string |
|
Comma-separated list of regular expressions defining uri paths that should be ignored (not measured). Environment variable: |
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: |
int |
|
Comma-separated list of regular expressions used to specify uri labels in http metrics. Vertx instrumentation will attempt to transform parameterized
resource paths, Patterns specified here will take precedence over those computed values. For example, if Environment variable: |
list of string |
|
Comma-separated list of regular expressions defining uri paths that should be ignored (not measured). Environment variable: |
list of string |
|
Suppress non-application uris from metrics collection.
This will suppress all metrics for non-application endpoints using
Suppressing non-application uris is enabled by default. Environment variable: |
boolean |
|
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: |
int |
|
Prometheus registry configuration properties. A property source for configuration of the Prometheus MeterRegistry, see https://micrometer.io/docs/registry/prometheus. Environment variable: |
|
About the Duration format
持续时间的格式使用标准的 您还可以提供以数字开头的持续时间值。 在这种情况下,如果该值仅包含一个数字,则转换器将该值视为秒。 否则, |