我已经使用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
,然后代理到那里,但这确实很丑陋,而不是我想解决的那种方式它。
答案 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()
}