球衣应用程序中的 Micrometer Prometheus 指标(非 spring)
Micrometer Prometheus metrics in jersey application (Non spring)
我有一个带有 Jersey REST 端点的 Web 应用程序 (war)。我正在与 prometheus/micrometer 集成以生成指标。我在此处公开了“/metrics”端点
@Path("/metrics")
public class Metrics {
private static final PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
static {
new JvmGcMetrics().bindTo(prometheusRegistry);
new JvmMemoryMetrics().bindTo(prometheusRegistry);
new JvmCompilationMetrics().bindTo(prometheusRegistry);
new JvmThreadMetrics().bindTo(prometheusRegistry);
}
@GET
public String getMetrics() {
return prometheusRegistry.scrape();
}
}
我对如何生成 http 请求指标感到困惑。我找不到任何与获取这些指标相关的代码。有人可以帮我解决这个问题吗?
您需要添加一个 Filter
来记录每个通过的请求。请参阅 https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcMetricsFilter.java 以了解 Spring 是如何做到的。
如果可能,我建议不要使用 static
注册表,而是使用依赖项注入。
这是您可以在过滤器的 doFilter
方法中执行的操作的一个小示例
long start = System.nanoTime()
try {
filterChain.doFilter(request, response);
long durationNanos = System.nanoTime() - start;
prometheusRegistry.timer("http.server.requests", "status", response.getStatus().toString()).record(durationNanos, TimeUnit.NANOSECONDS)
} catch (Exception ex) {
//Equivalent exception timer recording
throw ex;
}
替代checketts proposed, you could make use of the Jersey server instrumentation of Micrometer which is present even prior to the 1.0.0
release in the form of micrometer-jersey2
library. You can find the source here。
您的切入点是 MetricsApplicationEventListener
which can be registered with Jerseys ResourceConfig
. For an example, you can have a look at the test class 如何做到这一点。
您还可以在 Spring 引导 here.
中查看这是如何 integrated/autoconfigured
最后一点:Spring Boots 指标名称是 http.server.requests
(以区分它们与 HTTP 客户端请求指标),如果你有一天会转移到 Spring Boot 或你的平台已经是 运行 Spring 引导应用程序,您的非 Spring 引导 HTTP 请求指标将很好地匹配,不用多说。
我有一个带有 Jersey REST 端点的 Web 应用程序 (war)。我正在与 prometheus/micrometer 集成以生成指标。我在此处公开了“/metrics”端点
@Path("/metrics")
public class Metrics {
private static final PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
static {
new JvmGcMetrics().bindTo(prometheusRegistry);
new JvmMemoryMetrics().bindTo(prometheusRegistry);
new JvmCompilationMetrics().bindTo(prometheusRegistry);
new JvmThreadMetrics().bindTo(prometheusRegistry);
}
@GET
public String getMetrics() {
return prometheusRegistry.scrape();
}
}
我对如何生成 http 请求指标感到困惑。我找不到任何与获取这些指标相关的代码。有人可以帮我解决这个问题吗?
您需要添加一个 Filter
来记录每个通过的请求。请参阅 https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcMetricsFilter.java 以了解 Spring 是如何做到的。
如果可能,我建议不要使用 static
注册表,而是使用依赖项注入。
这是您可以在过滤器的 doFilter
方法中执行的操作的一个小示例
long start = System.nanoTime()
try {
filterChain.doFilter(request, response);
long durationNanos = System.nanoTime() - start;
prometheusRegistry.timer("http.server.requests", "status", response.getStatus().toString()).record(durationNanos, TimeUnit.NANOSECONDS)
} catch (Exception ex) {
//Equivalent exception timer recording
throw ex;
}
替代checketts proposed, you could make use of the Jersey server instrumentation of Micrometer which is present even prior to the 1.0.0
release in the form of micrometer-jersey2
library. You can find the source here。
您的切入点是 MetricsApplicationEventListener
which can be registered with Jerseys ResourceConfig
. For an example, you can have a look at the test class 如何做到这一点。
您还可以在 Spring 引导 here.
中查看这是如何 integrated/autoconfigured最后一点:Spring Boots 指标名称是 http.server.requests
(以区分它们与 HTTP 客户端请求指标),如果你有一天会转移到 Spring Boot 或你的平台已经是 运行 Spring 引导应用程序,您的非 Spring 引导 HTTP 请求指标将很好地匹配,不用多说。