使用千分尺、弹簧靴和普罗米修斯测量每秒请求数

Jav*_*tar 5 java spring spring-boot prometheus

我正在将微服务更新到 spring boot 2,并将指标从 dropwizard 迁移到 micrometer。我们使用 prometheus 来存储指标并使用 grafana 来显示它们。我想测量每秒对所有 URL 的请求。千分尺文档指出:

Timers are intended for measuring short-duration latencies, and the frequency of such events.
Run Code Online (Sandbox Code Playgroud)

所以计时器似乎是完成这项工作的方式:

Timers are intended for measuring short-duration latencies, and the frequency of such events.
Run Code Online (Sandbox Code Playgroud)

但它不会产生任何每秒速率,而是我们有类似于以下的指标:

# 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
Run Code Online (Sandbox Code Playgroud)

解决这个问题的正确方法是什么?每秒速率应该通过普罗米修斯查询计算还是通过弹簧执行器端点返回?

Ker*_*ukk 5

Prometheus 提供了一种名为PromQL (Prometheus Query Language)的功能查询语言,可以让用户实时选择和聚合时间序列数据。您可以使用rate()函数:

以下示例表达式返回过去 5 分钟内测量的范围向量中每个时间序列的每秒 HTTP 请求速率:

rate(http_requests_total{job="api-server"}[5m])
Run Code Online (Sandbox Code Playgroud)