如何在Micronaut中更改端点的路径?

时间:2019-05-20 06:35:58

标签: prometheus metrics micronaut micrometer

我已经使用cli设置了micronaut,并希望添加一个提供普罗米修斯度量的端点。按照指南(和Micronaut: How to get metrics in the Prometheus format?),我通过以下方式将内容添加到application.yml中:

micronaut:
  application:
    name: foo-service
  metrics:
    enabled: true
    export:
      prometheus:
        enabled: true
        step: PT1M
        descriptions: true
endpoints:
  metrics:
    enabled: true
  prometheus:
    enabled: true
    sensitive: false

现在我有两个端点,一个端点在/metrics,另一个端点在/prometheus。但是,我希望/metrics返回Prometheus指标。知道我该如何实现吗?

我知道我可以使用/endpoints将所有端点放在一个子路径下,例如endpoints.all.path,然后代理到那里,但这确实很丑陋,而不是我想解决的那种方式它。

3 个答案:

答案 0 :(得分:1)

您可以禁用指标终结点并创建一个响应/metrics的控制器。该控制器可以注入PrometheusEndpoint并将调用委托给端点bean。

答案 1 :(得分:1)

lena_punkt给出的示例对我有用。 我将在我的application.yml中添加一个Java示例和一些必要的conf。

endpoints:
  metrics:
    enabled: false
    sensitive: false
  prometheus:
    enabled: false
    sensitive: false
import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.micronaut.configuration.metrics.annotation.RequiresMetrics;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Produces;

import javax.inject.Inject;

@RequiresMetrics
@Controller("/metrics")
public class PrometheusController {

    private final PrometheusMeterRegistry prometheusMeterRegistry;

    @Inject
    public PrometheusController(PrometheusMeterRegistry prometheusMeterRegistry) {
        this.prometheusMeterRegistry = prometheusMeterRegistry;
    }

    @Get
    @Produces("text/plain")
    public String metrics() {
        return prometheusMeterRegistry.scrape();
    }
}

答案 2 :(得分:0)

由于james-kleeth,我走了正确的路,尽管它基本上是重新实现的。我禁用了prometheus端点并添加了一个控制器。但是,当端点被禁用时,我无法再注入它。它的实现是“琐碎的”(只是引用了普罗米修斯注册表)。这是我的解决方案:

package my.company.service

import io.micrometer.prometheus.PrometheusMeterRegistry
import io.micronaut.configuration.metrics.annotation.RequiresMetrics
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Produces
import io.swagger.v3.oas.annotations.Operation
import javax.inject.Inject

@RequiresMetrics
@Controller("/metrics")
class MetricsController @Inject constructor(val prometheusMeterRegistry: PrometheusMeterRegistry) {
    @Operation(summary = "Provide metrics in Prometheus format")
    @Get
    @Produces("text/plain; version=0.0.4")
    fun metrics(): String = prometheusMeterRegistry.scrape()
}