【问题标题】:How to change the path of an endpoint in Micronaut?如何更改 Micronaut 中端点的路径?
【发布时间】:2019-05-20 06:35:57
【问题描述】:

我已经使用 cli 设置了 micronaut,并希望添加一个提供 prometheus 指标的端点。按照指南(和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 返回普罗米修斯指标。知道如何实现吗?

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

【问题讨论】:

    标签: prometheus metrics micronaut micrometer


    【解决方案1】:

    lena_punkt 给出的例子对我有用。 我将在我的 application.yml 中添加一个 Java 示例和一些我需要的配置文件。

    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】:

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

      【讨论】:

      • 这只是部分工作。我可以添加一个绑定到/metrics 的控制器并注入PrometheusEndpoint。但是,只有在 application.yml 中启用它时,它才能作为 bean 使用,这使得它可以在 /prometheus 中使用。所以现在我可以在两条路径上使用它。有没有机会不绑定到/prometheus
      【解决方案3】:

      感谢 james-kleeth,我走上了正确的道路,尽管它基本上是重新实现。我禁用了 prometheus 端点并添加了一个控制器。但是,当端点被禁用时,我无法再注入它。它的实现是“微不足道的”(仅引用 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()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 2015-10-18
        • 2022-01-08
        • 1970-01-01
        • 2017-08-18
        • 2019-01-20
        • 1970-01-01
        相关资源
        最近更新 更多