我们在 non sprint-boot 应用程序和 Prometheus 中的目标监控系统中使用 Micrometer。我们创建了一个用于校准响应时间的过滤器。
定时器的示例代码在 servlet 过滤器中如下所示:
Timer.Sample sample = Timer.start(prometheusRegistry);
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
String host = servletRequest.getServerName();
String path = servletRequest.getRequestURI();
String method = servletRequest.getMethod();
try {
chain.doFilter(request, response);
} finally {
sample.stop(Timer.builder(METRIC_NAME)
.description(METRIC_HELP)
.tags(HOST, host)
.tags(PATH, path)
.tags(METHOD, method)
.tags(STATUS, Integer.toString(servletResponse.getStatus()))
.publishPercentileHistogram(true) //create histogram, not summary
.minimumExpectedValue(Duration.ofMillis(10))
.maximumExpectedValue(Duration.ofSeconds(60))
.register(prometheusRegistry);
}
到目前为止,它正在为我添加的最小和最大期望值生成大约 55 个桶。我主要使用publishPercentileHistogram(true),以便可以跨维度(例如pod或实例)聚合存储桶。有没有办法控制桶的数量,但仍然可以跨维度聚合?
仅提及 serviceLevelObjectives() 而不提及publishPercentileHistogram() 是否允许在 prometheus 端进行聚合?