有没有办法使用 Prometheus 记录经过的时间
Posted
技术标签:
【中文标题】有没有办法使用 Prometheus 记录经过的时间【英文标题】:Is there a way to record elapsed time using Prometheus 【发布时间】:2018-06-01 07:24:28 【问题描述】:我有一个 spring-boot 应用程序,我使用Prometheus
来收集指标数据。 Prometheus 具有诸如 Counter
之类的指标,它可以很好地计算某事发生的次数,Gauge
也可以计数,但可以减少等等。是否有一个指标可以让我跟踪某事的请求持续时间?例如,假设我想记录从进行 api 调用到 api 返回响应之间所花费的时间。我将如何跟踪拨打电话和收到 api 响应之间的时间?然后,是否可以在Y
坐标上创建一个图表,我可以列出响应所花费的时间长度(以秒或毫秒为单位);然后在X
轴上,是否显示时间戳(收集指标的时间)?
【问题讨论】:
【参考方案1】:对于时间事件大小,例如 api 延迟,您可能需要Summary
。
然后您可以计算aggregate average latency:
sum without (instance)(rate(my_summary_latency_seconds_sum[5m]))
/
sum without (instance)(rate(my_summary_latency_seconds_count[5m])
【讨论】:
... 并使用 Summary#startTimer() 获取计时器,并使用 Summary.Timer#observeDuration() 获取经过的时间【参考方案2】:正如你提到的spring-boot,你真的应该看看Micrometer 项目。它提供了一个供应商中立的指标 API,支持 Prometheus。 Micrometer 有一个特定的计时器原语:
Timer
.builder("my.timer")
.tags("uri", "/api/endpoint")
.register(registry)
.record(() ->
/* do something */
);
// or
registry.timer("my.timer", "uri", "api/endpoint").record(() ->
/* do something */
);
对于 Spring-Boot 1.5 项目,您将使用 micrometer-spring-legacy
依赖项。对于 Spring-Boot 2(撰写本文时为 2.0.0.M7),千分尺支持包含在 OOTB 中,spring-boot-starter-actuator
。
当您提到定时 API 请求时,我假设您使用的是 Spring MVC。自动支持这些时间。 (每个 URI 都有一个 count
,请求持续时间的 sum
以及一个额外的 max
用于跟踪时间窗口内的滚动最大值。)
如果您还不想计算服务器端请求延迟百分比,您也可以启用直方图桶的生成。
看看documentation。
【讨论】:
以上是关于有没有办法使用 Prometheus 记录经过的时间的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在使用 Prometheus 的 IIS 站点出现故障时产生警报?
有没有办法用 Prometheus 和 Grafana 监控 Apache 服务器?
有没有办法配置要使用 jmx_exporter/prometheus 捕获的 kafka-connect jmx 指标?