【发布时间】:2019-08-17 07:17:54
【问题描述】:
我正在将微服务更新到 Spring Boot 2,并将指标从 dropwizard 迁移到 micrometer。我们使用 prometheus 来存储指标并使用 grafana 来显示它们。我想测量每秒对所有 URL 的请求。千分尺文档指出:
Timers are intended for measuring short-duration latencies, and the frequency of such events.
所以计时器似乎是完成这项工作的方式:
Timer.Sample sample = log ? Timer.start(registry)
//...code which executes request...
List<Tag> tags = Arrays.asList(
Tag.of("status", status),
Tag.of("uri", uri),
Tag.of("method", request.getMethod()));
Timer timer = Timer.builder(TIMER_REST)
.tags(tags)
.publishPercentiles(0.95, 0.99)
.distributionStatisticExpiry(Duration.ofSeconds(30))
.register(registry);
sample.stop(timer);
但它不会产生任何每秒速率,相反,我们有类似的指标:
# TYPE timer_rest_seconds summary
timer_rest_seconds{method="GET",status="200",uri="/test",quantile="0.95",} 0.620756992
timer_rest_seconds{method="GET",status="200",uri="/test",quantile="0.99",} 0.620756992
timer_rest_seconds_count{method="GET",status="200",uri="/test",} 7.0
timer_rest_seconds_sum{method="GET",status="200",uri="/test",} 3.656080641
# HELP timer_rest_seconds_max
# TYPE timer_rest_seconds_max gauge
timer_rest_seconds_max{method="GET",status="200",uri="/test",} 0.605290436
解决这个问题的正确方法是什么?每秒的速率应该通过 prometheus 查询计算还是通过 spring actuator 端点返回?
【问题讨论】:
-
Prometheus 可以为您计算:prometheus.io/docs/prometheus/latest/querying/examples
标签: java spring spring-boot prometheus