gpt4 book ai didi

java - 如何使用 SLA 和标签注册 Micrometer Timer?

转载 作者:行者123 更新时间:2023-11-29 09:51:45 26 4
gpt4 key购买 nike

我正在尝试将我的 Prometheus 指标迁移到千分尺,但现在我在这里遇到了一件事......

目前我有一个 Prometheus 直方图配置如下:

private static final Histogram REQUEST_DURATION = Histogram
.build("http_request_duration_milliseconds", "Duration in milliseconds for processing a request.")
.labelNames("http_method", "http_status", "java_class", "java_method")
.buckets(10, 25, 50, 100, 500, 1000)
.register();

因此为了切换到 Micrometer,我将其替换如下:

Timer.builder("http.request.duration")
.description("Duration in seconds for processing a request.")
.sla(Duration.ofMillis(10), Duration.ofMillis(25), Duration.ofMillis(50), Duration.ofMillis(100), Duration.ofMillis(500), Duration.ofMillis(1000), Duration.ofMillis(5000))
.register(registry);

好的。让我们看看我想如何使用它......目前我只是调用

REQUEST_DURATION.labels(httpMethod, httpStatus, javaClass, javaMethod).observe(milliseconds);

所以我将其替换为

Metrics.timer("http.request.duration",
"http.method", httpMethod,
"http.status", httpStatus,
"java.class", javaClass,
"java.method", javaMethod)
.record(Duration.ofNanos(nanoseconds));

但现在的问题是,Micrometer 提示说我之前配置的指标没有这些标签。我当然知道了,因为我当时不知道这些值。这里是异常(exception):

java.lang.IllegalArgumentException:Prometheus 要求所有具有相同名称的仪表具有相同的一组标签键。已经有一个包含标签键 [] 的现有仪表。您尝试注册的仪表具有 key [http.method、http.status、java.class、java.method]。

好的。所以我想,让我们使用 Metrics.timer 调用指定存储桶。但这不起作用,因为没有传递这些值的方法。

那么...如何为我的指标设置 sla 存储桶 标签

最佳答案

我在 Micrometer slack channel 上得到了答案. Micrometer 解决这个问题的方法不是注册指标本身,而是注册一个过滤器,如下所示:

registry.config().meterFilter(new MeterFilter() {
@Override
public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
if (id.getName().equals("http.request.duration")) {
return DistributionStatisticConfig.builder()
.sla(Duration.ofMillis(10).toNanos(),
Duration.ofMillis(25).toNanos(),
Duration.ofMillis(50).toNanos(),
Duration.ofMillis(100).toNanos(),
Duration.ofMillis(500).toNanos(),
Duration.ofMillis(1000).toNanos(),
Duration.ofMillis(5000).toNanos())
.build()
.merge(config);
}
return config;
}
});

当使用 Metrics.timer(...) 推送指标值时,Micrometer 将调用此过滤器并应用此处指定的所有配置。此过滤器仅在仪表初始化时调用,即当 Metrics.timer(...) 第一次使用此特定 nametags 调用时>。所以我们不必担心这里的性能。

关于java - 如何使用 SLA 和标签注册 Micrometer Timer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50366888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com