如何更改 Micronaut 端点的路径?
How to change the path of an endpoint in Micronaut?
我已经使用 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
到 return 普罗米修斯指标。知道如何实现吗?
我知道我可以将所有端点放在一个子路径下,例如 /endpoints
使用 endpoints.all.path
然后代理到那里,但这真的很丑而且不是我想要的方式解决它。
您可以禁用指标端点并创建一个响应 /metrics
的控制器。该控制器可以注入 PrometheusEndpoint
并将调用委托给端点 bean。
感谢james-kleeth,我走上了正轨,虽然它基本上是re-implementation。我禁用了普罗米修斯端点并添加了一个控制器。但是,当端点被禁用时,我无法再注入它。它的实现是 "trivial"(仅引用普罗米修斯注册表)。这是我的解决方案:
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()
}
lena_punkt给出的例子对我有用。
我将在我的 application.yml.
中添加一个 Java 示例和一些对我来说必要的 confs
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();
}
}
我已经使用 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
到 return 普罗米修斯指标。知道如何实现吗?
我知道我可以将所有端点放在一个子路径下,例如 /endpoints
使用 endpoints.all.path
然后代理到那里,但这真的很丑而且不是我想要的方式解决它。
您可以禁用指标端点并创建一个响应 /metrics
的控制器。该控制器可以注入 PrometheusEndpoint
并将调用委托给端点 bean。
感谢james-kleeth,我走上了正轨,虽然它基本上是re-implementation。我禁用了普罗米修斯端点并添加了一个控制器。但是,当端点被禁用时,我无法再注入它。它的实现是 "trivial"(仅引用普罗米修斯注册表)。这是我的解决方案:
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()
}
lena_punkt给出的例子对我有用。 我将在我的 application.yml.
中添加一个 Java 示例和一些对我来说必要的 confsendpoints:
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();
}
}